有没有办法在所有打开的终端选项卡上运行相同的命令。我通常登录到许多服务器,并希望对所有服务器执行相同的命令。 Xshell(仅在Windows上可用)具有此功能,您可以在所有打开的终端上运行相同的命令,我想知道它是否可能以某种方式在mac中运行?
答案 0 :(得分:3)
绝对有可能。我经常这样做。这解决了它:
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 \"*\""
答案 1 :(得分:0)
无法在Apple的终端中完成您的要求。
也许在某些alternative中,您可能会发现更接近您需求的内容。
答案 2 :(得分:0)
不使用终端,而是使用SSH。如果这是一个你需要在终端中运行的命令,那么你可能无论如何都在捣蛋 - 消灭中间人。
生成无密码的ssh密钥对,将公钥放在远程系统上,然后从单个shell脚本中执行类似
的操作for host in host1 host2 host3 ..; do
ssh -i ~/.ssh/my_private_key username@${host} "echo HAXXXXXXXXXXXX | wall"
done
这是一个非常粗略的机制,但除了必须为每个命令物理打开一个终端之外,它还是光明的。
我实际上知道在OSX上会做你想要的东西,但老实说,这是一个通常不好的想法,提供一个超链接对我来说是疏忽的。