shell 运行.sh文件终端[重复]

y1aodyip  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(139)
    • 此问题在此处已有答案**:

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行)没有运行。
我能不能了解一下为什么会这样?我该如何解决?

ws51t4hk

ws51t4hk1#

它是交互式工作的,因为put命令不是由shell使用,而是运行sftp进程。您的脚本尝试独立运行put命令。

重定向

要运行put,您可以将它们馈送到sftp的标准输入:

#!/bin/bash
sftp -i ~/.ssh/id_rsa username@host <<END
put csv_file
put manifest_file
END

其中<<END表示取下一行直到看到END,并将它们重定向(<<)到sftp的标准输入。

批处理文件

或者,如果您可以通过批处理文件自动化它们,例如batch,并且只包含put行:

put csv_file
put manifest_file

然后告诉sftp它应该像这样处理batch文件中的命令,而不是使用shell脚本:

sftp -i ~/.ssh/id_rsa username@host -b batch

注意:由于您的文件中有bash shebang,您可以使该文件可由chmod +x run.sh执行,然后简单地以./run.sh运行它。

相关问题