我在运行El Capitan的Mac PowerBook上登录时获得了以下别名,OS X 10.11.3安装了Developer Tools安装和命令行实用程序:
alias prt_2up="enscript -G -p - \$@ | quarto -2 | lpr -P $PRINTER"
请注意$PRINTER
在.bashrc
中定义为:
export PRINTER=EPSON_Stylus_CX4800___barsoom
我“用”将其用作:
prt_2up file.txt
它创建了一个打印输出,每个打印页面有2页没有问题。
现在,我收到以下错误:
19:54:50 1z [woo:~] > source .bashrc 19:54:54 1z [woo:~] > echo $PRINTER EPSON_Stylus_CX4800___barsoom 19:54:59 1z [woo:~] > prt_2up test.php enscript: couldn't open input file "noclobber": No such file or directory no output generated lpr: The printer or class does not exist.
不明白为什么$PRINTER
不存在以及输入文件“no clobber”是什么。顺便说一句,我已经完成了+ o no clobber。无论我是打开还是关闭都没关系。四重奏是另一个实用程序,允许将一页以上的页面放在一张纸上。 noclobber
来自哪里?
我也尝试使用$@
而不使用前导\
。没有快乐。
建议表示赞赏。
答案 0 :(得分:1)
我不能告诉你为什么它以前有用,但我肯定看到了一个问题。在我详细介绍之前,我建议你试试这个:
prt_2up () { enscript -G -p - "$@" | quarto -2 | lpr -P "$PRINTER"; }
我看到的问题是在别名中使用$@
而不是shell函数。请看以下内容:
$ set -xv
$ alias foo="echo \$@"
alias foo="echo \$@"
+ alias 'foo=echo $@'
$ foo a b
foo a b
+ echo a b
a b
$ alias bar="echo \$@ | cat"
alias bar="echo \$@ | cat"
+ alias 'bar=echo $@ | cat'
$ bar a b
bar a b
+ echo
+ cat a b
cat: a: No such file or directory
cat: b: No such file or directory
$ baz () { echo "$@" | cat; }
baz () { echo "$@" | cat; }
$ baz a b
baz a b
+ baz a b
+ echo a b
+ cat
a b
bar
别名与baz
shell函数的作用不同,foo
也不行。
$ set 1 2 3
set 1 2 3
+ set 1 2 3
$ echo "$@"
echo "$@"
+ echo 1 2 3
1 2 3
$ alias foo
alias foo
+ alias foo
alias foo='echo $@'
$ foo a b
foo a b
+ echo 1 2 3 a b
1 2 3 a b
别名中的$@
引用shell本身的参数,而shell函数中的$@
引用该函数的参数。