有没有办法在所有打开的终端选项卡上运行相同的命令。我通常登录许多服务器并希望在所有服务器上执行相同的命令。 Xshell(仅在 Windows 上可用)具有此功能,您可以在所有打开的终端上运行相同的命令,我想知道它是否可以在 mac 中以某种方式实现?
这绝对是可能的。我经常这样做。这解决了它:
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"
}
osascript
是运行AppleScript代码的命令行程序,-e选项告诉它使用以下字符串作为脚本。 ${1//\"/\\\"}
转义命令中的所有引号。
您可以在 .bash_profile 或您使用的任何其他文件中按原样声明它,或者您可以将其从函数中取出,将其放入脚本中,使脚本可执行并将其放在始终位于您的 PATH 中的某个位置。
注意 1:整个命令必须位于第一个参数中。
注意 2:如果您执行的命令中包含引号,则必须转义引号。
例如,
onall echo "*"
不会给出预期的结果。相反,请使用 onall "echo \"*\""
不要使用终端,而是使用 SSH。如果它是您需要在终端中运行的命令,那么您很可能无论如何都会在某个地方进行 ssh - 消除中间人。
生成无密码 ssh 密钥对,将公钥放在远程系统上,然后从单个 shell 脚本中您可以执行类似的操作
for host in host1 host2 host3 ..; do
ssh -i ~/.ssh/my_private_key username@${host} "echo HAXXXXXXXXXXXX | wall"
done
这是一个非常粗糙的机制,但它比为每个命令物理打开终端要好得多。
我实际上知道有一些东西可以在 OSX 上做你想做的事情,但老实说,这通常是一个糟糕的主意,我会疏忽地提供一个指向它的超链接。
安装 tmux,并在 tmux 中进行:-)