Есть способ закрыть терминал для одной команды, и это использование перенаправления файлов:
ssh-add > /dev/null < /dev/null 2>&1
Это запустит команду ssh-add
с закрытым терминалом. Все хорошо, за исключением сложности. Но теперь, когда вы знаете правильную команду, просто сделайте ее псевдонимом и добавьте в ~/.bash_aliases
:
alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"
И все готово. Просто набрав ssh-add
, вы вызовете псевдоним, который вызовет настоящую команду со всеми перенаправлениями.
Команда ssh-add
теперь правильно спрашивает пароль в диалоговом окне... При условии, что у вас установлен один из этих пакетов (в Ubuntu или производных, в других местах они могут иметь другие названия):
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
ksshaskpath
kwalletcli
lxqt-openssh-askpass
razorqt-openssh-askpasss
Итак, что все это значит?
Команда 2>&1
означает перенаправление дескриптора файла №2 (стандартная ошибка) туда же, куда перенаправляется дескриптор файла №1 (стандартный вывод).
Команда > /dev/null
означает перенаправление стандартного вывода в /dev/null
, который представляет собой специальный файл, отбрасывающий все записанные в него данные.
Команда < /dev/null
означает перенаправление стандартного ввода в /dev/null
(idem).
В качестве побочного примечания, и не по теме, но связанного с этим, если вы когда-нибудь захотите программировать службу в bash, вы должны помнить, что такое служба на самом деле, процесс со стандартным вводом, выводом и закрытой ошибкой, который находится в фоновом режиме:
service > /dev/null < /dev/null 2>&1 &
Обратите внимание, что единственным отличием является &, добавленный в конце (плюс тот факт, что я изменил команду ssh-add
на теоретическую service
. Эти команды правильно поставят службу на фон.