Bash for 循环中的命令不执行

Bash commands in for loop don't execute

我有一个循环遍历目录中所有 .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 脚本中执行,我将不胜感激。

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

如果您正确引用,就不必担心。当您可以直接执行时,将 cp 命令回显到文件并从中执行是无稽之谈。

你可以

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

直接从命令行,或者将上面的内容放在第一行的 bcpy.sh 文件中 #!/bin/bash 并使用 chmod +x bcpy/sh 和 运行 使 bcpy.sh 可执行 作为 ./bcpy.sh 接下来。