如果文件大小为 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
Shell 转义通常要求将 shell 命令全部输入一行。尝试输入
!if [[ ! -s /directory1/subdirectory1/file1.txt ]]; then mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2; fi
(末尾不需要分号。)
如果您想要多次发出相同的命令,您可以通过将其放入(本地)shell 脚本来简化您的生活。然后你可以通过输入来运行它
!my_conditional_mv
(或者无论你选择如何称呼它)。