GNU屏幕实用程序具有将键绑定到screen命令或macros的整洁function。 stuff命令特别方便,可以在input时将某些缩写扩展为其他string。
例如,如果我在screen并使用我的元键(默认情况下为[ Ctrl – A ]),然后:bindkey -t #@@ stuff "set -o vi; bind Cl:clear-screen Ci:complete" 。 ..然后##@成为一个快速的方法来设置一个bash shell的更改设置为我的喜好,即使当我使用共享帐户(例如,当我试图排除故障时使用sudo到达服务器上的根shell或修复它)。
这很好,你可以将这些绑定添加到你的~/.screenrc文件中。
但是,如果你想为一些更敏感的东西做一个macros…例如一个密码…那么你可能想添加一个键绑定到你的正在运行的screen会话,而不会将内容存储在任何文件的任何地方。
你是怎样做的?
你会认为使用screen -X (大写X)开关就可以轻松完成指令。 但明显的尝试失败了:
screen -X 'bindkey -t #@p stuff mysecretpasswordhere'
然后screen状态栏简短地点亮一个错误,如-X:未知命令…
为什么这个错误信息如此无用?
我现在已经想了很多次了。 第一次是几年前,是我用了很长时间的东西。 那么今天早上我必须再次弄明白。 这就是为什么我在这里发布。 所以如果我不记得更好的话,下次我需要的时候可以更容易find它。
问题是-X不接受和parsing一个单一的参数作为整个命令。 它要求将命令的每个元素作为单独的parameter passing给screen命令行。
所以这个工作:
screen -X bindkey -t '#@p' stuff "mysecretpasswordhere"
…这是我从一个shell脚本中使用它的方式:
#!/bin/bash read -sp "GNU Screen PW Setting:" pw echo screen -X 'bindkey' '-t' '#@p' 'stuff' "$pw"
然后,当我开始一个新的GNU screen会话(通常每隔几个月一次)时,我只需运行~/bin/setpw即可将我的密码存储在内存中,而无需将其写入任何文件的任何位置。
(是的,我绑定它的实际按键序列已被消毒的这张贴。杜!此外,是的,我非常一致的使用屏幕locking在我的系统和密码是漫长,强壮,因此很不方便打字sudo提示全天)。