我正在使用 AutoHotkey 宏来运行一些 shell 命令,IE
^`::
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,没问题 — 这与一次粘贴多行 shell 命令相同 — 我们中的许多人都已经看到命令提示符如何在每行执行时“异步”出现:
stdin
是否有隐藏(可能是阻塞)然后执行输入而不显示它(或其输出)的命令或技巧?有点像输入密码。
请不要对上述内容作出判断:-(先发制人地否认某些事情:
我不会
csh
选择使用;是的,我读过前十名。我使用数百台服务器,这些服务器并不都安装相同的网络共享
/home
- 这就是为什么我使用rsync
将“主服务器”推送到.cshrc
每个.vimrc
不同网络共享的位置,以便上面的键盘宏将找到并加载无论我在哪里都可以找到。
更新
我尝试添加stty -echo
,IE
^`::
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
。)
答案1
答案2
通过使用备用屏幕缓冲区,您可以非常接近您想要的效果。
最多(全部?)终端模拟器有 2 个屏幕缓冲区,您可以在它们之间切换。因此,您切换到备用屏幕缓冲区,运行命令,然后切换回主屏幕缓冲区。
只需在命令之前运行以下命令:
tput smcup
最后,运行
tput rmcup
但是,这仍然会tput smcup
在屏幕上显示该命令。
我能想到隐藏命令的唯一方法是为其添加键绑定(如ESC+ t)。我知道zsh
可以做到这一点,但我不知道csh
。
如果您没有该tput
命令,您可以回显原始转义码。
对于腻子来说,这将是:
echo -e '\e[?47h'
和
echo -e '\e[2J\e[?47l'
答案3
您应该在两台机器之间mkfifo
进行双向|pipe
写入,而不是依赖于粘贴到腻子终端。但如果你必须使用putty,那么你应该在设置中关闭它的流量控制并使用原始模式——stty raw
在主机端并在putty的设置中找到原始终端选项。