Terminal 通过Automator中的终端复制文件

Terminal 通过Automator中的终端复制文件,terminal,automator,cp,Terminal,Automator,Cp,因此,以下问题似乎是由Automator引起的,但我不能确定(我会发布一张图片,但我没有足够的分数): 我有一个Automator服务,它的第一个操作是“获取指定的查找项”工具,该工具会转到~/Desktop/D53\u C71J\u C。下一个操作是“运行Shell脚本”,其中包含 PATH="$@" echo "Path: $PATH" cd "$PATH" for f in *; do echo "f: $f" CAT="$PATH/$f" echo "CAT: $

因此,以下问题似乎是由Automator引起的,但我不能确定(我会发布一张图片,但我没有足够的分数):

我有一个Automator服务,它的第一个操作是“获取指定的查找项”工具,该工具会转到
~/Desktop/D53\u C71J\u C
。下一个操作是“运行Shell脚本”,其中包含

PATH="$@"
echo "Path: $PATH"
cd "$PATH"
for f in *;
do
    echo "f: $f"
    CAT="$PATH/$f"
    echo "CAT: $CAT"
    cp "$f" ~/Desktop
done 
结果是

Path: /Users/ajharn/Desktop/D53_C71J_C
f: D53_C71J_C1.psd
CAT: /Users/ajharn/Desktop/D53_C71J_C/D53_C71J_C1.psd

f: D53_C71J_C1_MERGE.psd
CAT: /Users/ajharn/Desktop/D53_C71J_C/D53_C71J_C1_MERGE.psd
f: D53_C71J_C2.psd

等等。它一直工作到
cp
。我已经用echos测试过了,这样的路径已经排好了。令人困惑的是,
cp-D53\u-C71J\u-C2.psd~/Desktop
在终端中运行良好。

您选择的变量名非常不明智:
PATH
被shell用于存储指向可执行文件所在目录的路径(请参阅和)。由于
cp
是一个外部程序,而不是shell命令(可在
/bin/cp
中找到),因此当您使用当前工作路径覆盖
路径时,shell不会找到它,因此永远不会运行

按照计划做更多的事情

[[ -d "$@" ]] && cd "$@"                # cd into folder if is one
for f in ./*; do                        # always prefix relative globs
    [[ -f "$f" ]] && cp "$f" ~/Desktop  # only copy files
done

一切都会好起来的。当然,添加“获取文件夹内容”操作和“移动查找对象”操作也可以,无需任何shell干预。

啊,我应该注意到这样一个基本单词可能就是一个关键字。谢谢你的链接。由于我对shell脚本还相当陌生,我也很欣赏关于它为什么是错误的解释。非常感谢你的帮助!