for循环中的Bash命令无法执行

时间:2018-07-20 05:08:51

标签: bash macos terminal cp

我有一个遍历目录中所有.ooutline文件的脚本,应该将它们复制到另一个文件夹中。

for file in *.ooutline; do
   echo cp  \'"$file"\' "$HOME"/Omnipresence/outlines3/
done

现在,当我回显脚本并像这样运行它时:

./bcpy.sh > out1.sh

echo产生完美的cp语句,在chmod a + x之后,我可以将out1.sh作为批处理脚本运行。我得到这样的cp语句:

cp 'savethecat steps.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
cp 'steps 8 28.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
cp 'story points 3 2.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
cp 'story points 3.ooutline' /Users/michaelisbell/Omnipresence/outlines3/

它们在out1.sh文件中完美执行。

在删除回显之后,它们不会执行,但是在bcpy.sh文件中执行。我收到此错误:

cp: 'savethecat steps.ooutline': No such file or directory
cp: 'steps 8 28.ooutline': No such file or directory
cp: 'story points 3 2.ooutline': No such file or directory
cp: 'story points 3.ooutline': No such file or directory

如果有人能告诉我我做错了什么,为什么我的命令没有按我期望的那样在bcpy2.sh脚本中执行,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的问题似乎是文件名中的空格。

如果您执行正确的报价,则不必担心。在您可以直接执行命令时,将cp命令回显到文件并从中执行是没有意义的。

你可以

for file in *.ooutline; do cp "$file" "$HOME"/Omnipresence/outlines3/ done

直接从命令行

或将上面的内容放在第一行的bcpy.sh文件中 #!/bin/bash并使用chmod +x bcpy/sh使bcpy.sh可执行并运行 下一步为./bcpy.sh