【问题标题】:Issue with running commands from shell script从 shell 脚本运行命令的问题
【发布时间】:2014-02-25 19:26:24
【问题描述】:

我正在尝试将文件从远程 Windows 服务器复制到 Unix 服务器。我成功地能够使用命令提示符从 Windows 服务器复制文件,但是当我从脚本运行这些命令时,它没有按预期工作。

使用的命令:

sftp user@remoteserver.com

lcd local_dir

cd remote dir

get file_name

exit

当我从脚本运行这些命令时,脚本在连接到远程服务器后停止。

谁能告诉我如何解决这个问题。

【问题讨论】:

  • 你让事情变得更复杂,你必须:使用scp而不是sftp如果服务器提供它,它更容易在脚本中使用,因为你可以执行单个命令,而不必交互。如果您被sftp 卡住,请尽量不要以交互方式使用它,而是在wgetcurl 之类的包装器中使用它。
  • 感谢您的评论。之前尝试过 scp 它不起作用,所以移到了这里。如果可能的话,你能详细说明你的答案吗
  • “它不工作”是什么意思?当然 scp 确实有效。我每天都用它。就这么简单scp user@remoteserver.com/remote_dir/filename local_dir/
  • 获取exec request failed on channel 0 lost connection
  • 对不起,我之前发布了一个语法错误,我的错。它必须是:scp user@remoteserver.com:/remote_dir/filename local_dir/(注意附加的冒号 (:))。如果这不起作用,那么直接从类似于 first 的命令尝试。

标签: unix copy sftp remote-access


【解决方案1】:

lcdexit 的命令是sftp 命令,因此您不能只将它们逐行写入脚本,而必须将它们重定向为sftps 标准输入:

 # all lines till "EOF" will be redirected to sftp
 sftp user@remoteserver.com <<- EOF
 lcd local_dir
 cd remote dir
 get file_name
 exit
 EOF

 # here you are in your shell script again, eg:
 SFTPRES=$?

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多