3

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

Например

Представь себе бег:

apt-get install eclipse-platform

Затем будет достаточно времени, чтобы закончить, пока вы видите журнал установки, а я хочу создать новые папки (рабочие пространства), которые позже будет использовать Eclipse.

Возможно ли это без открытия нового терминала (или вкладки)?

5 ответов5

4

Есть много способов сделать это.

Вы можете приостановить задачу в любое время, нажав Ctrl + Z. Затем, чтобы возобновить задачу в фоновом режиме, используйте команду bg. Вы можете вернуть задачу на передний план с помощью fg

Поэтому, если apt-get запущен, выполните ctrl+z , затем запустите bg. это заставит его работать в фоновом режиме.

Вы также можете прочитать на экране или byobu.

4

Если рассматриваемая программа не использует stdin, вы можете ввести команды, после чего нажмите Enter, и выполнить их после завершения программы (и до тех пор, пока ни одна из них не использует stdin).

4

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

Проверьте man-страницу для apt-get и поищите варианты, которые заставляют ее работать тихо, не выписывая много выходных данных. Проверьте параметры, которые заставляют его работать, не требуя ввода пользователя (например, подтверждения)

Используйте перенаправление для записи сообщений apt-get и ошибок в файлы, используйте суффикс амперсанда для запуска команды в фоновом режиме.

nohup apt-get --be-quiet --dont-ask \
    install eclipse-platform > agiep.out 2>agiep.err &

Возможно, вам не нужен nohup (см. Справочную страницу). Я изобрел --be-quiet и -dont-ask поэтому проверь man apt-get наличие реальных эквивалентов (если есть).

Смотрите также fg на странице руководства вашей оболочки.

Примечание: многие из перечисленных выше функций зависят от оболочки. Должно быть в порядке в Bash, Ksh и тому подобное.

3

Один удобный псевдоним, который поставляется с Ubuntu .bashrc (я не знаю, есть ли он и в Debian):

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

Он использует notify-send (окружение рабочего стола): с помощью notify-send вы можете отправлять уведомления на рабочем столе пользователю через демон уведомлений из командной строки.Эти уведомления могут использоваться для информирования пользователя о событии или отображения какой-либо формы информации, не мешая пользователю.

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

( sleep 5 && alert "sleeped OK" || alert "something nasty happened with sleep") &
3

Это, вероятно, немного излишне, особенно если вы используете что-то вроде Gnome или KDE, где у вас может быть несколько окон bash, но вы должны смотреть на экран.

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

В основном, чтобы запустить экран, вы должны запустить терминал, а затем набрать screen . Он выдаст вам сообщение о себе, просто нажмите Enter, чтобы пройти мимо него. Screen - полноценная программа, так что я едва собираюсь ее поцарапать, но вот несколько основных задач. Это все при условии, что конфигурации по умолчанию (которые, поскольку вы не использовали программу, должны быть одинаковыми).

Существует набор мета-клавиш, которые нужно нажимать перед каждой экранной командой, в противном случае ввод идет непосредственно в тот сеанс терминала, который отображается. Метаключ по умолчанию - ctrl-a . Так, например, чтобы создать новое окно, вы должны сначала нажать ctrl-a затем нажать c

Полезные экранные команды

Чтобы создать новое окно: ctrl-a c

Чтобы перейти к следующему окну: ctrl-a n

Чтобы вернуться в окно: ctrl-a p

Чтобы перейти к окну: ctrl-a # где # - номер сеанса, на который вы хотите переключиться

Для просмотра всех открытых окон: ctrl-a "

Чтобы закрыть окно: введите exit как обычно

Чтобы отменить сеанс: ctrl-a d

Чтобы заново подключить сеанс: При запуске экрана добавьте опцию -r

Как сделать то, что вы просили

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

  1. Откройте терминал

  2. тип screen

  3. введите apt-get install eclipse-platform

  4. наберите ctrl-a c

  5. Запустите ваши другие команды

Когда вы перейдете на шаг 5, ваша команда с шага 3 продолжит работать. Чтобы проверить это в любое время, просто наберите ctrl-a p . Чтобы вернуться туда, где вы печатали другие команды, наберите ctrl-a n . Когда вы закончите, вы можете полностью закрыть экран и терминал, введя команду exit во всех окнах. Но если вы находитесь в середине набора команд и хотите вернуться ко всему этому позже, просто отсоедините ваш сеанс с помощью ctrl-a d . Если вы хотите вернуться и закончить, просто запустите экран с опцией -r, например, screen -r

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .