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
接下来。
我有一个循环遍历目录中所有 .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
接下来。