- 此问题在此处已有答案**:
Pass commands as input to another command (su, ssh, sh, etc)(3个答案)
Difference between sh and Bash(11个答案)
昨天关门了。
我运行下面的命令行从终端和它的工作:
sftp -i ~/.ssh/id_rsa username@host
put csv_file
put manifest_file
我想自动运行这个,所以我创建了一个. sh文件,如下所示:
#!/bin/bash
sftp -i ~/.ssh/id_rsa username@host
put csv_file
put manifest_file
并将其保存为run.sh。我运行它如下:
sh run.sh
它连接到主机,但接下来的命令(put行)没有运行。
我能不能了解一下为什么会这样?我该如何解决?
1条答案
按热度按时间ws51t4hk1#
它是交互式工作的,因为
put
命令不是由shell使用,而是运行sftp
进程。您的脚本尝试独立运行put
命令。重定向
要运行
put
,您可以将它们馈送到sftp
的标准输入:其中
<<END
表示取下一行直到看到END
,并将它们重定向(<<
)到sftp
的标准输入。批处理文件
或者,如果您可以通过批处理文件自动化它们,例如
batch
,并且只包含put行:然后告诉
sftp
它应该像这样处理batch
文件中的命令,而不是使用shell脚本:注意:由于您的文件中有
bash
shebang,您可以使该文件可由chmod +x run.sh
执行,然后简单地以./run.sh
运行它。