web-dev-qa-db-ja.com

貼り付けたシェルコマンドを非表示にするにはどうすればよいですか?

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に慣れていない場合でも、問題はありません。シェルコマンドの複数の行を一度に貼り付けるのと同じです。多くの人は、各行の実行時にコマンドプロンプトが「非同期に」表示されることを確認しています。

enter image description here

stdinを非表示(おそらくブロック)してから、入力(またはその出力)を表示せずに実行するコマンドまたはトリックはありますか?パスワードを入力するようなものです。


上記に関する判断は控えてください:先制的にいくつかのことを否認するには:

  1. 私はcshを選択して使用しません。はい、トップ10を読みました。

  2. _/home_に同じネットワーク共有をマウントしていない数百台のサーバーを使用しています。そのため、rsyncを使用して「マスター」をプッシュしています_.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
_

ただし、プロンプトは引き続き表示されます。

enter image description here

(私は_$Prompt_の設定を解除することを考えましたが、私の_.cshrc_が行うことの1つは、正確に_$Prompt_を置き換えることであるため気が進まないです。)

2
Andrew Cheong

私はAutoHotKeyに精通していないので、そこで解決策が見つからない場合は、読み進めてください。

POSIXは readコマンド を指定します。これにより、-sでターミナルエコー(入力時に表示されるもの)を抑制しながら、入力行を取得できます。これもbashに組み込まれていますが、システムをチェックして、スタンドアロンとして存在するかどうかを確認することができます。

それ以外の場合、 ここを見て 、cshでstty(別のスタンドアロン)を使用して同じことを実行できます。

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

代替画面バッファーを使用すると、必要なものにかなり近づくことができます。
ほとんど(all?)ターミナルエミュレーターには、切り替えることができる2つの画面バッファーがあります。そのため、代替画面バッファーに切り替えてコマンドを実行してから、メインバッファーに切り替えます。

コマンドの前に次を実行するだけです。

tput smcup

そして最後に、実行します

tput rmcup

ただし、これでも画面にtput smcupコマンドが表示されます。
コマンドを非表示にすることを考える唯一の方法は、コマンドにキーバインディングを追加することです( ESC+t)。 zshがこれを実行できることは知っていますが、cshについてはわかりません。


tputコマンドがない場合は、生のエスケープコードをエコーアウトできます。
PuTTYの場合、これは次のようになります。

echo -e '\e[?47h'

そして

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

mkfifo双方向|pipe 2台のマシン間で、PuTTY端末への貼り付けに頼るのではなく書き込みます。ただし、PuTTYを使用する必要がある場合は、設定でフロー制御をオフにして、rawモードを使用する必要があります-stty rawホスト側で、PuTTYの設定でrawターミナルオプションを見つけます。

0
mikeserv