Расширения $?
и $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