Bash for循环don';不执行

Bash for循环don';不执行,bash,macos,terminal,cp,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 'savet

我有一个脚本,可以循环遍历我目录中的所有.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文件中完美执行

但是,在我删除echo后,它们不会在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脚本中执行,我将不胜感激。

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

如果你的报价正确,你就不用担心了。当您可以直接执行时,将
cp
命令回显到文件并从中执行是毫无意义的

你可以

用于*.ooutline中的文件;做
cp“$file”“$HOME”/Omnipresence/outlines3/
完成

直接从命令行,或将上面的命令放在bcpy.sh文件的第一行中 关于
#/bin/bash
并使用
chmod+x bcpy/sh使bcpy.sh可执行并运行它

作为
/bcpy.sh
下一步

你是对的。我没有添加#/bin/bash行。一旦我添加了它,并删除了不必要的单引号,脚本就可以顺利运行了。非常感谢您的帮助。@johnrubytheca很高兴我能帮忙。像这样的任务我几乎每天都做。我通常直接在命令行上执行。
!#/用于*.ooutline中文件的bin/bash;do mv“$file”“$(echo$file | cut-d.”-f1)“完成了
我能够完成这项工作,但我花了几个小时的时间来摆弄它。我必须承认,在阅读了网页和奥莱利的书之后,我明白了这一点“扩展变量而‘不,我真的不明白为什么mv需要我在变量周围加引号,而变量赋值似乎并不需要。”。如果我在这里回显mv结果,我会得到文件名,文件名周围没有引号,并且命令运行良好——但这在命令行中永远不起作用。所以我承认我很困惑,回声输出是误导性的,似乎输出与实际情况相反。otoh我终于发现“cut”是一个“split”命令lol。