Что означает этот синтаксис bash? (Показ: кейс, exec) - PullRequest
2 голосов
/ 12 января 2010

Какова цель этого скрипта bash? (Это часть более крупного сценария.)

if [ $# -gt 0 ]
then
  case $1 in
  -*) ;;
  *) exec $* ;;
esac
fi

Смежный вопрос:

https://stackoverflow.com/questions/2046762/problem-with-metamap-inappropriate-ioctl-for-device

Ответы [ 5 ]

7 голосов
/ 12 января 2010

На английском, строка за строкой:

if the number of arguments is greater than 0
then
if the first argument...
  starts with '-', do nothing
  else, "exec" the arguments (run the entire set of arguments as a command replacing this process, not as a child process)
(end of case)
(end of if)
1 голос
/ 12 января 2010

Часть case ... esac является оператором switch. Если $1 совпадает с -* (то есть начинается с -), то первый случай будет выполнен - ​​и ничего не будет делать. В противном случае (если $1 соответствует *, что, в зависимости от настроек оболочки, может исключать вещи, начинающиеся с .), будет выполняться exec $*.

Вокруг этого есть оператор if, обеспечивающий выполнение переключения только в том случае, если действительно есть какие-либо параметры, с которыми нужно проверять (количество параметров больше нуля).

1 голос
/ 12 января 2010

Не зная сценариев bash, я бы сказал это

  • определяет, больше ли число аргументов, чем 0
  • если это так, он смотрит на первый аргумент
    • Если он начинается с -, он ничего не делает
    • В противном случае он выполняет все аргументы как одну командную строку
0 голосов
/ 12 января 2010

Если первый параметр, помещенный в командную строку для этого сценария, является файлом, а не параметром, попробуйте запустить его как исполняемый файл или сценарий.

0 голосов
/ 12 января 2010

Он принимает первый переданный аргумент и выполняет его с остальными аргументами I.E.:

./script.sh ls dir1 dir2

будет действовать так, как если бы вы набрали

ls dir1 dir2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...