在mac中的所有终端上运行相同的命令

时间:2012-03-01 22:52:01

标签: macos

有没有办法在所有打开的终端选项卡上运行相同的命令。我通常登录到许多服务器,并希望对所有服务器执行相同的命令。 Xshell(仅在Windows上可用)具有此功能,您可以在所有打开的终端上运行相同的命令,我想知道它是否可能以某种方式在mac中运行?

3 个答案:

答案 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上会做你想要的东西,但老实说,这是一个通常不好的想法,提供一个超链接对我来说是疏忽的。