貼り付けたシェルコマンドを見えないようにする方法は?

貼り付けたシェルコマンドを見えないようにする方法は?

私はいくつかのシェルコマンドを実行するために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「メインサーバー」を.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

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

ここに画像の説明を入力してください。

(設定を解除しようとしましたが、私がしたことの1つが交換であった$promptので望んでいませんでした。).cshrc$prompt

答え1

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

POSIXの指定readコマンド、を使用して1行の入力を許可し、同時に端末エコー(入力時に表示される内容)を抑制します-s。これはbashにも組み込まれていますが、システムにスタンドアロンとして存在することを確認できます。

そうでなければ、ねえstty、(別のスタンドアロン)cshを使用して同じことを実行できます。

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

答え2

代替画面バッファを使用すると、望ましい効果に非常に近づくことができます。
最大(すべて?)ターミナルエミュレータには、切り替え可能な2つの画面バッファがあります。そのため、代替画面バッファに切り替えてコマンドを実行し、メイン画面バッファに戻ります。

コマンドの前に以下を実行してください。

tput smcup

最後に実行

tput rmcup

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


そのコマンドがない場合は、tput元のエスケープコードをエコーできます。
Puttyの場合、次のようになります。

echo -e '\e[?47h'

そして

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

答え3

パテ端末に貼り付けることに頼るのではなく、2つのシステム間で双方向に作成するmkfifo必要があります。|pipeただし、パテを使用する必要がある場合は、設定でフロー制御をオフにし、ホストstty raw側でネイティブモードを使用し、パテ設定でネイティブ端末オプションを見つける必要があります。

関連情報