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

Riz*_*rif 4 macos

有没有办法在所有打开的终端选项卡上运行相同的命令。我通常登录到许多服务器并希望对所有服务器执行相同的命令。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 \"*\""


小智 5

iTerm2可以解决这个问题。脚步:

  1. 根据您的要求拆分终端
  2. 单击 shell -> 广播输入(根据您的要求选择广播设置)

屏幕截图供参考: 在此输入图像描述


syn*_*tel 0

为此,请使用 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 上做你想做的事,但老实说,这通常是一个糟糕的主意,我会疏忽地提供一个指向它的超链接。