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

Я использую макрос 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 в настройках шпатлевки.

  • Команда, которая генерирует как стандартную ошибку, так и вывод
  • Чтение и запись в файл из stdin и stdout
  • Создайте двухстрочный текстовый файл без записи на stdout
  • Запись строк в файл с меньшего количества
  • Перенаправление tr stdout в файл
  • Правда ли, что существует 4 типа ** вывода **, мы можем ссылаться на файл в Linux?
  • Экран GNU: печать отдельного сеанса на стандартный вывод
  • Подавить предупреждение версий rbenv, если рубины не установлены
  • Вывод содержимого конвейера в файл и отображение количества строк в файле на stdout
  • Может перенаправлять stdout и stderr в те же строки, что и строки?
  • stdout, stderr и протоколирование с помощью команды script
  • Linux и Unix - лучшая ОС в мире.