我在终端中有这个工作命令(请记住,ssh 到 localhost 是为了测试 - 无论它是否是远程服务器都没有区别):
> ssh [email protected] sh -s -- < "./a.sh" < "./b.sh"
灰:
export var="hey world"
b.sh:
echo "$var"
按预期打印“hey world”。
但是当我将相同的命令添加到这样的脚本文件中时(假设它名为run.sh
):
#!/bin/sh
# ...
ssh [email protected] sh -s -- < "./a.sh" < "./b.sh"
我执行如下:
chmod +x ./run.sh
./run.sh
它不起作用 - 打印了一个空白行。我测试了其他命令,它们同样似乎没有被读取。
这是怎么回事?
编辑:我应该澄清一下,我已经用 Cornholio 给出的相同答案解决了这个问题,但我想确切地知道是什么原因导致它通过 REPL 而不是在 shell 脚本文件中工作
答案1
/bin/sh
您可能在命令行测试中使用了不同于的 shell 。您的问题是 中的重定向支持/bin/sh
。我发现无法将两个文件的内容附加到stdin
。要查看发生了什么,您可以将ssh
命令替换为cat
:
> cat < "./a.sh" < "./b.sh"
echo "$var"
> cat < "./a.sh"
export var="hey world"
> cat < "./b.sh"
echo "$var"
怎么样?cat a.sh b.sh ... | ssh [email protected]