有没有办法在所有打开的终端选项卡上运行相同的命令。我通常登录到许多服务器并希望对所有服务器执行相同的命令。Xshell(仅在 Windows 上可用)具有此功能,您可以在所有打开的终端上运行相同的命令,我想知道它是否可以在 mac 中实现?
小智 5
这绝对是可能的。我经常这样做。这解决了它:
onall () {
if [[ $1 == "--help" ]]; then
echo "Usage: onall <command>"
return 0
fi
osascript -e "tell application \"Terminal\"
repeat with w in windows
repeat with t in tabs of w
do script \"${1//\"/\\\"}\" in t
end repeat
end repeat
end tell"
}
Run Code Online (Sandbox Code Playgroud)
osascript是运行 AppleScript 代码的命令行程序,-e 选项告诉它使用以下字符串作为脚本。在${1//\"/\\\"}逃逸中的所有命令的报价。
您可以在您的 .bash_profile 或您使用的任何其他文件中声明它,或者您可以将其从函数中取出,将其放入脚本中,使脚本可执行并将其放在始终位于您的 PATH 中的某个位置。
注意 1:整个命令必须在第一个参数中。
注意 2:如果您正在执行带有引号的命令,则必须对引号进行转义。
例如,onall echo "*"不会给出预期的结果。相反,使用onall "echo \"*\""
为此,请使用 SSH,而不是使用终端。如果它是您需要在终端中运行的命令,那么您很可能无论如何都会在某个地方进行 sshing - 消除中间人。
生成无密码 ssh 密钥对,将公钥放在远程系统上,然后从单个 shell 脚本中您可以执行类似的操作
for host in host1 host2 host3 ..; do
ssh -i ~/.ssh/my_private_key username@${host} "echo HAXXXXXXXXXXXX | wall"
done
Run Code Online (Sandbox Code Playgroud)
这是一个非常粗糙的机制,但它比必须为每个命令物理打开终端要好得多。
我实际上知道有一些东西可以在 OSX 上做你想做的事,但老实说,这通常是一个糟糕的主意,我会疏忽地提供一个指向它的超链接。
| 归档时间: |
|
| 查看次数: |
2850 次 |
| 最近记录: |