Управление заданиями Bash - Можете ли вы прекратить вторую команду в списке, не завершив первую? - PullRequest
1 голос
/ 24 октября 2011

Если я выдам это в командной строке 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 голос
/ 25 октября 2011

Может быть лучше, но это сработает:

  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 приостанавливает команду сна, и выводится «привет». Ввод fg возобновляет сон.

0 голосов
/ 26 октября 2011

В данном конкретном случае просто добавьте ...

echo "Press a key to begin... ${0}"
read

В начале cmd_2.Таким образом, вы серьезно не мешаете кому-то, желающему использовать cmd_2, и вы даете себе шанс убить его, прежде чем он уничтожит то, что вы хотите сохранить.

...