Как сделать скрытые команды оболочки невидимыми?

Я использую макрос AutoHotkey для запуска некоторых команд оболочки, т. Е.

^`:: SendInput set c=".cshrc-acheong"{ENTER} SendInput set v=".vimrc-acheong"{ENTER} SendInput foreach d ( /home/acheong /home/tcama /userhome/andrew.cheong ){ENTER} SendInput if ( -e $d/$c ) source $d/$c{ENTER} SendInput if ( -e $d/$v ) alias vim "vim -N -u $d/$v"{ENTER} SendInput end{ENTER} return 

Если вы не знакомы с AutoHotkey, никаких проблем – это то же самое, что вставлять сразу несколько строк команд оболочки, и многие из нас видели, как командная строка появляется «асинхронно» по мере выполнения каждой строки:

введите описание изображения здесь

Есть ли команда или трюк для скрытия (возможно, блокировки) stdin а затем выполнения ввода без отображения его (или его выходов)? Похоже на ввод паролей.


Пожалуйста, избегайте суждений относительно вышеизложенного 🙁 Чтобы упрекнуть некоторые вещи:

  1. Я не использую csh по выбору; да, я прочитал Топ-10.

  2. Я работаю с сотнями серверов, которые не все монтируют один и тот же сетевой ресурс для /home – вот почему я использую rsync чтобы нажимать «master» .cshrc и .vimrc на местоположение на отдельный сетевой ресурс, чтобы выше клавиатурный макрос найдет и загрузит то, что обнаружено, где бы я ни был.


Обновить

Я попытался добавить stty -echo , т.е.

 ^`:: SendInput stty -echo{ENTER} SendInput set c=".cshrc-acheong"{ENTER} SendInput set v=".vimrc-acheong"{ENTER} SendInput foreach d ( /home/acheong /home/tcama /userhome/andrew.cheong ){ENTER} SendInput if ( -e $d/$c ) source $d/$c{ENTER} SendInput if ( -e $d/$v ) alias vim "vim -N -u $d/$v"{ENTER} SendInput end{ENTER} SendInput stty echo{ENTER} return 

Однако подсказки продолжают появляться:

введите описание изображения здесь

(Я думал об отключении $prompt но я неохотно отношусь к тому, что делает мой .cshrc именно для замены $prompt .)

3 Solutions collect form web for “Как сделать скрытые команды оболочки невидимыми?”

Я не знаком с AutoHotKey, поэтому, если вы не можете найти там какое-либо решение, читайте дальше.

POSIX задает команду read , которая позволяет принимать строку ввода при подавлении терминального эха (это то, что вы видите при вводе) с -s . Это также встроенный bash, но вы можете проверить свою систему, чтобы убедиться, что она присутствует как отдельная.

В противном случае, глядя здесь , вы можете выполнить одно и то же, используя stty (еще один отдельный) с csh:

 stty -echo # turn echo off # do your input stty echo # turn echo back on 

Вы можете приблизиться к тому, что хотите, используя альтернативный буфер экрана.
У большинства (все?) Терминальных эмуляторов есть 2 экранных буфера, с которыми вы можете переключаться между ними. Таким образом, вы переключаетесь на альтернативный буфер экрана, запускаете свои команды и затем переключаетесь обратно на главный.

Просто выполните следующие действия перед своими командами:

 tput smcup 

И в конце, запустите

 tput rmcup 

Однако это все равно покажет команду tput smcup на экране.
Единственный способ, с помощью которого я могу скрывать команду, – добавить к ней привязку клавиш (например, ESC + t ). Я знаю, что zsh может это сделать, но я не знаю о csh .


Если у вас нет команды tput , вы можете отбросить исходные коды эвакуации.
Для шпатлевки это будет:

 echo -e '\e[?47h' 

а также

 echo -e '\e[2J\e[?47l' 

Вы должны mkfifo двунаправленную |pipe между двумя машинами и писать ей вместо того, чтобы полагаться на вставку в терминал шпатлевки. Но если вы должны использовать шпатлевку, тогда вы должны отключить управление потоком в настройках и использовать режим raw – stty raw на стороне хоста и найти опцию raw terminal в настройках шпатлевки.

  • Превращение стандартного вывода в одну команду
  • grep, как подавить отображение несогласованного файла?
  • Выход находится в консоли, но не является частью stdout или stderr
  • Может перенаправлять stdout и stderr в те же строки, что и строки?
  • Предполагаемое поведение stdbuf для подпроцессов
  • Декодирование «prog> file 2> & 1"
  • Как не отображать вывод stdout запущенного процесса?
  • Перенаправить часть скрипта bash в файл для захвата set -x output
  • Регистрация выходных команд на нескольких серверах ssh
  • Добавление кода выхода в файл журнала
  • Печать на «стандартном выходе» и «стандартной ошибке»
  • Linux и Unix - лучшая ОС в мире.