Управление заданиями Bash - Можете ли вы прекратить вторую команду в списке, не завершив первую?
Если я выдам это в командной строке bash: $ cmd_1; cmd_2
cmd_1 находится на переднем плане. Могу ли я предотвратить запуск cmd_2 без остановки cmd_1? У меня есть, пока cmd_1 не закончится, в это время cmd_2 запустится, а потом уже слишком поздно.
Я не думаю, что это возможно, но, может быть, с контролем работы?
-Z $ bg толкает обе команды в bg? Скорее, cmd_1 идет к bg, а cmd_2 (где? "Ожидающий фон?" Как @ cmd?) Все еще ожидает выхода cmd_1?
Команды не были вызваны условно, а именно "cmd_1 && cmd_2", и команды не были основаны на вызове. cmd_1 работает в fg, cmd_2 еще не выполнен.
Лицевая сторона здесь заключается в том, что cmd_1 потребуется очень много времени для завершения, cmd_2 разрушителен, и я действительно не хотел бы прерывать и снова делать cmd_1. Я бы просто хотел, чтобы cmd_1 закончил, а cmd_2 вообще не запускался.
Я мог вызвать сбой cmd_2, переместив cmd_2 в cmd_2.sav до тех пор, пока cmd_1 не закончит работу, и в результате появится "-bash: cmd_2: команда не найдена", но я надеялся на более элегантное решение. cmd_2 может использоваться другими до завершения cmd_1. (Да, я мог бы обернуть cmd_2.real в оболочку cmd_2 с помощью пользовательского теста или чего-то подобного, но в этом и заключается безумие).
2 ответа
Там может быть лучший способ, но это будет работать:
- Нажмите Control-Z, чтобы приостановить cmd_1.
- cmd_2 начнет работать. Вы можете нажать Control-C, чтобы убить его, или вы можете выполнить свой "трюк с переименованием" до шага 1, чтобы у него не было шансов на запуск.
- После того, как cmd_2 убит / запрещен запуск, введите
fg
возобновить операцию cmd_1.
Если вы хотите опробовать это заранее, чтобы убедиться, что поведение, которое вы получаете, соответствует вашим ожиданиям, попрактикуйтесь с комбинацией sleep
а также echo
команды. т.е. беги sleep 10; echo "hello"
из терминала. Нажатие Control-Z приостанавливает команду сна, и выводится "привет". Typing fg
возобновляет сон.
В этом конкретном случае просто добавьте...
echo "Press a key to begin... ${0}"
read
В начале cmd_2
, Таким образом, вы не мешаете кому-либо, желающему использовать cmd_2
и вы даете себе шанс убить его, прежде чем он уничтожит то, что вы хотите сохранить.