Бег
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 $?.
Я хотел бы понять эту разницу, чтобы расширить мое понимание оболочек и программирования переносимых оболочек.
Я использую bash4.4.12 и dash0.5.8-2.3ubuntu1 на Ubuntu 17.10 (хитрый Aardvark).
&>находится в POSIX. Вот&следует>. Во-foo &> barпервых, этоfoo &запускfooв фоновом режиме и> barперенаправление без команды.bashне соответствует POSIX, когда интерпретирует его по-другому.