Выполнить команду после завершения предыдущей

Выполнить команду после завершения предыдущей

Существует ли эмулятор терминала, позволяющий пользователю выполнить команду после завершения текущей запущенной команды?

Я ищу программное обеспечение, а не объяснение того, как объединять команды (например, через &&или ;). Просто мне часто хочется что-то сделать после того, как что-то другое завершено, но я не планирую все заранее. Небольшой пункт контекстного меню под названием «выполнить после завершения текущей команды», открывающий новое окно терминала, которое делает именно это, был бы потрясающим.

решение1

Я предполагаю, что вы используете Bash CLI. Есть по крайней мере два способа сделать это, в зависимости от того, насколько вы хотите планировать заранее.

Если вы ввели команду и enterзатем решили, что хотите выполнить какую-то другую команду после ее завершения, вы можете сделать это:

001 $ date; sleep 10
002 Mon, Jan 25, 2016  3:08:35 PM
003 tty; date
004 $ tty; date
005 /dev/pty2
006 Mon, Jan 25, 2016  3:08:45 PM

Примечания:

  • Добавлены номера строк ("001 ...")
  • Строка 001: две команды выполняются последовательно из-за ;, вторая выполняется долго
  • Строка 002: немедленный вывод из «даты» в строке 001, для справки
  • Строка 003: Пользователь вводит дополнительные команды, пока команда «sleep» из строки 001 все еще выполняется, ввод отображается эхом, но не интерпретируется до завершения «sleep»
  • Строка 004: $появляется приглашение, обозначающее завершение выполнения второй команды в строке 001, остальное — повтор строки 003.
  • Строка 005: Вывод команды «tty», введенной в строке 003
  • Строка 006: Вывод команды «date», введенной в строке 003, сравните со строкой 002

Однако, если вы заранее знаете, что захотите запустить что-то еще после начальной команды, но пока не знаете, что именно, вы можете явно дождаться этого, как:

006 $ date; sleep 20 &
007 Mon, Jan 25, 2016  3:13:52 PM
008 [1] 504840
009 $ wait 504840; tty; date
010 [1]+  Done                    sleep 20
011 /dev/pty2
012 Mon, Jan 25, 2016  3:14:12 PM

Примечания:

  • Строка 006: «дата» для справки, а затем команда «спящий» переводится на фоновый режим с помощью final&
  • Строка 007: вывод «даты» в строке 006, для справки
  • Строка 008: вывод &строки 006, дающий PID команды «sleep»
  • Строка 009: «wait» будет ожидать завершения процесса с указанным PID
  • Строка 010: «sleep» на строке 006 завершается, затем будет интерпретировано «tty; date»
  • Строка 011: вывод «tty» на строке 009
  • Строка 012: вывод «даты» в строке 009, сравните со строкой 007

решение2

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

Дополнительный ввод данных в меню не требуется.

Например:

$ command1
command2
$ $

(повторяющееся приглашение выводится, поскольку оболочка выводит запрос после выполнения command1перед запуском command2).

Обратите внимание, что если вы убиваете command1с помощьюkill, то command2выполняется немедленно, но если вы введете Ctrl-Cэту команду в оболочке, это приведет к прерываниюобакоманды.

Связанный контент