Shell-Script
SSH 上的多個 fifo
Shell 腳本允許多個文件描述符(最多 9 個符合 POSIX 標準,但更多
bash
):$ install -m 755 /dev/stdin /tmp/test <<\EOF #!/bin/sh echo hi1 >&1 echo hi2 >&2 echo hi3 >&3 echo hi4 >&4 EOF $ /tmp/test 1> /tmp/1 2> /tmp/2 3> /tmp/3 4> /tmp/4 $ cat /tmp/1 hi1 $ cat /tmp/2 hi2 $ cat /tmp/3 hi3 $ cat /tmp/4 hi4
我想通過 SSH 實現相同的行為,但發生的是:
$ ssh user@remote_machine /tmp/test 1> /tmp/1 2> /tmp/2 3> /tmp/3 4> /tmp/4 $ cat /tmp/1 hi1 $ cat /tmp/2 hi2 /tmp/test: 5: /tmp/test: 3: Bad file descriptor /tmp/test: 6: /tmp/test: 4: Bad file descriptor $ cat /tmp/3 $ cat /tmp/4
stdout
除了and之外,是否可以通過 SSH 擁有多個輸出管道stderr
?重要的是要注意我不是在尋找埠轉發,因為我會遇到網路問題。
不,這是不可行的。客戶端顯式關閉每個大於 2的
ssh
打開文件描述符:/* * Discard other fds that are hanging around. These can cause problem * with backgrounded ssh processes started by ControlPersist. */ closefrom(STDERR_FILENO + 1);
這幾乎是客戶端啟動時發生的第一件事(請參閱此處提供
main()
的 OpenSSH 8.0 的原始碼)。