Shell 要上载到sftp的脚本不工作

Shell 要上载到sftp的脚本不工作,shell,sftp,Shell,Sftp,我有两个Linux机器,我正在尝试使用sftp将文件从一台机器上传到另一台机器。我已经将终端中使用的所有命令都放在下面的脚本中 #!/bin/bash cd /home/tests/sftptest sftp user1@192.168.0.1 cd sftp/sftptest put test.txt bye 但这是不工作的,给我的错误,如目录不存在。此外,终端保持在>sftp中,这意味着不执行bye。我怎样才能解决这个问题 我建议使用: #/bin/bash cd/home/tests/s

我有两个Linux机器,我正在尝试使用sftp将文件从一台机器上传到另一台机器。我已经将终端中使用的所有命令都放在下面的脚本中

#!/bin/bash
cd /home/tests/sftptest
sftp user1@192.168.0.1
cd sftp/sftptest
put test.txt
bye
但这是不工作的,给我的错误,如目录不存在。此外,终端保持在>sftp中,这意味着不执行bye。我怎样才能解决这个问题

我建议使用:

#/bin/bash
cd/home/tests/sftptest
sftpuser1@192.168.0.1我建议使用:

#/bin/bash
cd/home/tests/sftptest

sftpuser1@192.168.0.1当您运行
sftp
命令时,它会连接并等待您键入命令。它开始了它自己的“子shell”

脚本中的其他命令仅在
sftp
命令完成后执行。它们显然会作为本地shell命令执行,因此特别是
put
将作为不存在的命令失败


您必须将
sftp
命令直接提供给
sftp
命令

一种方法是使用输入重定向。例如,@cyrus使用“此处文档”作为答案已经表明:

sftp username@host <<< EOF
sftp_command_1
sftp_command_2
EOF
其中,
sftp.txt
脚本包含:

sftp_command_1
sftp_command_2

当您运行
sftp
命令时,它会连接并等待您键入命令。它开始了它自己的“子shell”

脚本中的其他命令仅在
sftp
命令完成后执行。它们显然会作为本地shell命令执行,因此特别是
put
将作为不存在的命令失败


您必须将
sftp
命令直接提供给
sftp
命令

一种方法是使用输入重定向。例如,@cyrus使用“此处文档”作为答案已经表明:

sftp username@host <<< EOF
sftp_command_1
sftp_command_2
EOF
其中,
sftp.txt
脚本包含:

sftp_command_1
sftp_command_2

大多数FTP客户端都是为交互使用而设计的。软件包中的程序是根据您的需要设计的,用于自动化FTP传输。我发现它们更容易使用。Blaster Alfredψ爵士,我强烈建议您查看
rsync
,而不是
sftp
。它更加灵活和有能力(由那些编写SAMBA的聪明人积极开发并带给您)。创建一个密钥对,以允许两个linux设备之间的无密码ssh连接。
rsync
是用于文件传输的瑞士军刀解决方案。大多数FTP客户端都是为交互式使用而设计的。软件包中的程序是根据您的需要设计的,用于自动化FTP传输。我发现它们更容易使用。Blaster Alfredψ爵士,我强烈建议您查看
rsync
,而不是
sftp
。它更加灵活和有能力(由那些编写SAMBA的聪明人积极开发并带给您)。创建一个密钥对,以允许两个linux设备之间的无密码ssh连接。
rsync
是您用于文件传输的瑞士军刀解决方案。