csh 无法识别命令行选项以 -- 开头的命令
csh doesn't recognize command with command line options beginning with --
我的 csh 脚本中有一个 rsync 命令,如下所示:
#! /bin/csh -f
set source_dir = "blahDir/blahBlahDir"
set dest_dir = "foo/anotherFoo"
rsync -av --exclude=*.csv ${source_dir} ${dest_dir}
当我 运行 这样做时,出现以下错误:
rsync: No match.
如果我删除 --exclude
选项,它会起作用。我在 bash 中编写了等效的脚本并且按预期工作
#/bin/bash -f
source_dir="blahDir/blahBlahDir"
dest_dir="foo/anotherFoo"
rsync -av --exclude=*.csv ${source_dir} ${dest_dir}
问题是这只能在 csh 中完成。关于如何让他工作的任何想法?
这是因为 csh
正在尝试 将 --exclude=*.csv
扩展为文件名,并抱怨找不到匹配该模式的文件。
您可以通过将选项括在引号中来解决此问题:
rsynv -rv '--exclude=*.csv' ...
或转义星号:
rsynv -rv --exclude=\*.csv ...
这是由于 csh
和 bash
在默认处理带有与文件不匹配的通配符的参数方面不同的结果。 csh
会抱怨,而 bash
只会不管它。
您可能认为 bash
选择了更好的方法,但事实并非如此,如以下抄本所示,您有一个与参数匹配的文件:
pax> touch -- '--file=xyzzy.csv' ; ls -- *.csv
--file=xyzzy.csv
pax> echo --file=*.csv
--file=xyzzy.csv
您可以看到 bash
shell 扩展了 参数,而不是按原样将其提供给程序。双方各有利弊。
我的 csh 脚本中有一个 rsync 命令,如下所示:
#! /bin/csh -f
set source_dir = "blahDir/blahBlahDir"
set dest_dir = "foo/anotherFoo"
rsync -av --exclude=*.csv ${source_dir} ${dest_dir}
当我 运行 这样做时,出现以下错误:
rsync: No match.
如果我删除 --exclude
选项,它会起作用。我在 bash 中编写了等效的脚本并且按预期工作
#/bin/bash -f
source_dir="blahDir/blahBlahDir"
dest_dir="foo/anotherFoo"
rsync -av --exclude=*.csv ${source_dir} ${dest_dir}
问题是这只能在 csh 中完成。关于如何让他工作的任何想法?
这是因为 csh
正在尝试 将 --exclude=*.csv
扩展为文件名,并抱怨找不到匹配该模式的文件。
您可以通过将选项括在引号中来解决此问题:
rsynv -rv '--exclude=*.csv' ...
或转义星号:
rsynv -rv --exclude=\*.csv ...
这是由于 csh
和 bash
在默认处理带有与文件不匹配的通配符的参数方面不同的结果。 csh
会抱怨,而 bash
只会不管它。
您可能认为 bash
选择了更好的方法,但事实并非如此,如以下抄本所示,您有一个与参数匹配的文件:
pax> touch -- '--file=xyzzy.csv' ; ls -- *.csv
--file=xyzzy.csv
pax> echo --file=*.csv
--file=xyzzy.csv
您可以看到 bash
shell 扩展了 参数,而不是按原样将其提供给程序。双方各有利弊。