使用 ssh 运行远程命令获取“bash: /dev/fd/63: No such file or directory”

Qia*_*hen 6 shell bash ssh file-descriptors process-substitution

/root/test.sh在远程服务器上有以下内容:

#!/bin/bash
date
Run Code Online (Sandbox Code Playgroud)

在远程服务器上,我得到以下输出:

# ./test.sh
Fri Dec 18 07:41:10 EST 2015

# bash <(cat /root/test.sh)
Fri Dec 18 07:41:23 EST 2015
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试从本地计算机运行相同的命令,则会得到以下结果:

$ ssh root@remote_server /root/test.sh
Fri Dec 18 07:44:32 EST 2015

$ ssh root@remote_server bash <(cat /root/test.sh)
cat: /root/test.sh: No such file or directory
bash: /dev/fd/63: No such file or directory
Run Code Online (Sandbox Code Playgroud)

那么最后运行的问题是什么?您可能会发现运行这样的脚本很奇怪bash <(cat /root/test.sh)。我这样做的原因是因为它是我真实情况的简化版本。我的真实代码是从网上下载一个Bash脚本在本地运行。我有很多机器要运行,具有不同的参数,所以我试图从我的本地计算机上运行它们。

Jak*_*uje 13

你不能像这样传递文件描述符ssh<(...)构造在您的系统上创建虚拟文件,在远程系统上执行时它没有意义。

如果你真的想使用它,把它放在引号中,如果你有 bash,它将在远程系统上进行评估

ssh root@remote_host "bash <( cat /root/test.sh )"
Run Code Online (Sandbox Code Playgroud)