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

问题描述 投票:0回答:4

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

macos
4个回答
6
投票

这绝对是可能的。我经常这样做。这解决了它:

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 \"*\""


6
投票

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

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

屏幕截图供参考: enter image description here


0
投票

不要使用终端,而是使用 SSH。如果它是您需要在终端中运行的命令,那么您很可能无论如何都会在某个地方进行 ssh - 消除中间人。

生成无密码 ssh 密钥对,将公钥放在远程系统上,然后从单个 shell 脚本中您可以执行类似的操作

for host in host1 host2 host3 ..; do
    ssh -i ~/.ssh/my_private_key username@${host} "echo HAXXXXXXXXXXXX | wall"
done

这是一个非常粗糙的机制,但它比为每个命令物理打开终端要好得多。

我实际上知道有一些东西可以在 OSX 上做你想做的事情,但老实说,这通常是一个糟糕的主意,我会疏忽地提供一个指向它的超链接。


0
投票

安装 tmux,并在 tmux 中进行:-)

© www.soinside.com 2019 - 2024. All rights reserved.