Бег
bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
в результате test1
выводится на консоль и echo $?
печатается, 1
что, на мой взгляд, правильно, потому что команда должна возвращать то, что [b/d]ash -c
вернул внутренний, тогда как
dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
приводит к тому же выводу, но возвращается с 0
согласно echo $?
.
Я хотел бы понять эту разницу, чтобы расширить мое понимание оболочек и программирования переносимых оболочек.
Я использую bash
4.4.12 и dash
0.5.8-2.3ubuntu1 на Ubuntu 17.10 (хитрый Aardvark).
&>
находится в POSIX. Вот&
следует>
. Во-foo &> bar
первых, этоfoo &
запускfoo
в фоновом режиме и> bar
перенаправление без команды.bash
не соответствует POSIX, когда интерпретирует его по-другому.