Почему первое поле в 'ls-l' не является 'f' при просмотре файла? [closed]

Есть способ закрыть терминал для одной команды, и это использование перенаправления файлов:

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. Эти команды правильно поставят службу на фон.

7
22.09.2018, 23:07
0 ответов

Теги

Похожие вопросы