使用一个命令在许多 macOS 终端上运行 cd

使用一个命令在许多 macOS 终端上运行 cd

我经常以平铺配置打开两三个 macOS 终端窗口。有时我想cd在所有窗口中进入某个特定目录。

我最好的想法是尝试写信给/dev/ttys00*,例如,

echo -ne "echo hello\x0a\x0d" > /dev/ttys000

这将显示在另一个终端上,但末尾的字节不会触发接受命令。是否有一个字节序列可以做到这一点?(出于安全原因,如果没有,我也不会感到惊讶。)顺便说一句,您可以运行tty以发现特定窗口映射到哪个设备。

我也尝试过设置$PWD变量,但它似乎并没有真正改变目录。

答案1

这将显示在另一个终端上,但末尾的字节不会触发被接受的命令。

每个 tty 设备都有两端,就像管道一样。你写入到一端的内容不循环,但输出端却是另一端。例如,/dev/ttyS*一端是串行端口,另一端是物理串行端口。写入的内容/dev/ttyS0通过网络发送。

同样,对于伪终端 (ptys),您需要/dev/ttys*访问由终端应用程序管理的无名“pty master”设备。当您向 写入内容时/dev/ttys000,它不是外壳接收到的任何信息都作为输入,因为外壳连接到相同的pty 的“从”端。相反,写入由终端应用程序它保存了相应的 pty master 的 fd,并且显示为程序输出

(一些较旧的 BSD 中,ptys 被命名为/dev/ttyP*,有/dev/ptyP*与主端相对应的设备,但我不认为 macOS 有等效的设备。Linux 肯定没有——每次你/dev/ptmx在那里打开时,你都会得到一个新的pty 对已分配。)


那么如何实现你的愿望呢?

  • 您可以尝试找到一个转义序列,要求终端返回一些内容作为输入。这曾经存在(例如,有一个“告诉我当前窗口标题”序列),但几乎所有终端都出于安全原因禁用它:例如,如果您有cat一个恶意文件,它可以设置终端标题并立即要求返回,从而运行命令。

  • 你可以让内核伪造输入。在 Linux 上,有ioctl(TIOCSTI)可供以下工具使用:; 它将输入循环回连接到 tty 同一端的所有其他程序。我不确定它是否适用于 macOS。

  • 您可以研究其他自动化方法。如果我没记错的话,macOS 有“Automator” 应用程序和 AppleScript。其他系统可能有与辅助功能挂钩的工具(就像虚拟键盘一样)。

相关内容