【问题标题】:Passing variables to sftp batch将变量传递给 sftp 批处理
【发布时间】:2023-03-28 09:05:01
【问题描述】:

我正在编写一个需要将变量传递给 sftp 批处理的脚本。根据我搜索到的其他文档,我已经能够使一些命令正常工作,但不能完全满足我的需要。

最终目标是类似于远程服务器上的文件测试运算符: ( if [-f $a ] then:; else exit 0;)

最终,如果文件存在 (:),我希望文件继续运行脚本,如果不存在则退出 0(不是退出 1)。远程计算机是 Windows 服务器,而不是 Linux。

这是我所拥有的:

注意 - 我试图传递的变量 $source_dir 会根据调用此函数的脚本的输入参数而变化。这和ls 通配符是棘手的部分。在查找特定文件时,我已经能够使其工作,而不仅仅是“任何”文件。

    ${source_dir}= /this/directory/changes

    RemoteCheck () {

    /bin/echo "cd $source_dir" > someBatch.txt
    /bin/echo "ls *" >> someBatch.txt

    /usr/bin/sftp -b testBatch.txt -oPort=${sftp_port} ${sftp_ip}


    exit_code=$?;
    if [ $exit_code -eq 0 ]; then
        :
    else
        exit 0
    fi

可能有更好的方法来做到这一点,但我已经搜索了多个论坛,还没有找到一种方法来操纵它。

感谢您的任何帮助,您的大师一直非常乐于助人!

【问题讨论】:

  • 请看:shellcheck.net
  • 您确定不想cd $source_dir 吗?在您的代码中,您使用ls * 覆盖它。
  • 我覆盖它是什么意思?它不是连续执行命令吗?我可能没有正确使用它 - 但我认为我可以像这样将几个命令串在一起,它们会按顺序执行?
  • @alvits - 我明白你的意思。我偶然发现了这个并编辑了重定向器以匹配。这是我的问题。

标签: bash shell sftp


【解决方案1】:

您无法仅使用 OpenSSH sftp 的退出代码来测试任何文件是否存在。

您可以将sftp 输出重定向到一个文件并解析它以查看是否有任何文件。

您可以使用 shell echo 命令将列表与输出的其余部分分隔开,例如:

!echo listing-start
ls
!echo listing-end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2015-05-12
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多