У меня есть этот простой сценарий оболочки:
#!/bin/sh
echo "alpha"
finish()
{
echo "--------------------------------------------------------------"
}
trap finish EXIT
echo "bravo"
cd /non/existent/path
# cd /non/existent/path && gitk &
echo "charlie"
При запуске это дает следующий результат, как и ожидалось:
alpha
bravo
./test.sh: 13: cd: can't cd to /non/existent/path
charlie
--------------------------------------------------------------
Но тогда, если я раскомментирую строку, содержащую вызов gitk
(т.е. строку 14), я получу следующий вывод:
alpha
bravo
./test.sh: 13: cd: can't cd to /non/existent/path
charlie
--------------------------------------------------------------
./test.sh: 14: cd: can't cd to /non/existent/path
Обратите внимание, что линия с тире больше не находится в конце. Есть идеи, почему это происходит?
Я также заметил, что если я удалю амперсанд в конце этой строки, порядок снова будет таким, как я ожидал. Так что запуск gitk в качестве фонового процесса явно оказывает влияние, но я не знаю, как именно.
Наконец, можно ли изменить скрипт так, чтобы я мог продолжать запускать gitk в качестве фонового процесса, но при этом строка с черточками должна отображаться в конце?