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