sFTP 连接后本地 shell 中的 if 条件

sFTP 连接后本地 shell 中的 if 条件

如果文件大小为 0,我已在本地 shell 中成功使用以下脚本将文件从一个目录移动到另一个目录:

if [[ ! -s /directory1/subdirectory1/file1.txt ]]
then
    mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2;
fi;

现在我想使用相同的脚本添加与我们的客户服务器建立 sFTP 连接后,在本地 shell 中运行相同的命令:

!if [[ ! -s /directory1/subdirectory1/file1.txt ]]
then
    mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2/; fi;

该脚本运行失败,并出现以下错误:/QOpenSys/usr/bin/bsh:第 1 行语法错误:“fi”意外。在通过 sFTP 建立连接后,我已经成功运行了包括本地 shell 命令的脚本,但是我一直在努力尝试这一点,但没有成功。我们正在运行 iSeries V7.2。我很感激任何帮助。

答案1

你想达到什么目的?

对于 bash 脚本来说!反转输出返回。如果您想查看 CLI 运行的示例:

ls ; echo $?

应该返回 0

! ls ; echo $?

将返回 1。如果您的文件夹已满,请仔细查看返回的底部。您将得到 0 或 1,具体取决于您运行它的方式。

在你的例子中!位于 if 旁边(无空格) 就像 !if,not ! if,它会将 if 反转为 fi,然后 bash 会说 fi 不是命令。尝试一下,在 之间留一个空格!如果并看看会发生什么。不确定你需要发生什么。就像我说的,解释一下你想要的结果,这将有助于别人得到你的答案。

答案2

  1. Shell 转义通常要求将 shell 命令全部输入一行。尝试输入

    !if [[ ! -s /directory1/subdirectory1/file1.txt ]]; then mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2; fi
    

    (末尾不需要分号。)

  2. 如果您想要多次发出相同的命令,您可以通过将其放入(本地)shell 脚本来简化您的生活。然后你可以通过输入来运行它

    !my_conditional_mv
    

    (或者无论你选择如何称呼它)。

相关内容