bash - c не устанавливает $? как и ожидалось - PullRequest
1 голос
/ 12 марта 2020

Почему следующие две команды дают разные результаты?

$ bash -c "ls BLAH; echo $?; export status=$?; echo $status"
ls: cannot access BLAH: No such file or directory
0

^ обратите внимание на пустую строку после 0

$ cat test.sh
ls BLAH; echo $?; export status=$?; echo $status
$ bash test.sh
ls: cannot access BLAH: No such file or directory
2
0

1 Ответ

1 голос
/ 12 марта 2020

Расширения $? и $status в вашем первом примере выполняются вашей текущей оболочкой - то есть до того, как bash, который вы запускаете, когда-либо видит командную строку. Используйте одинарные кавычки:

$ bash -c 'ls BLAH; echo $?; export status=$?; echo $status'
ls: BLAH: No such file or directory
1
0

или иначе:

$ bash -c "ls BLAH; echo \$?; export status=\$?; echo \$status"
ls: BLAH: No such file or directory
1
0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...