Управление заданиями 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 ответа

Решение

Там может быть лучший способ, но это будет работать:

  1. Нажмите Control-Z, чтобы приостановить cmd_1.
  2. cmd_2 начнет работать. Вы можете нажать Control-C, чтобы убить его, или вы можете выполнить свой "трюк с переименованием" до шага 1, чтобы у него не было шансов на запуск.
  3. После того, как 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 и вы даете себе шанс убить его, прежде чем он уничтожит то, что вы хотите сохранить.

Другие вопросы по тегам