[英]Read command in bash script not waiting for user input when piped to bash?
[英]bash script, file input in piped command
在运行El Capitan,OS X 10.11.3且安装了开发人员工具和命令行实用程序的Mac PowerBook上登录时,我具有以下别名:
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的设置。 设置为开还是关似乎无关紧要。 quarto是另一个实用程序,它允许在一张纸上放置多个页面。 noclobber
来自哪里?
我也尝试过使用$@
不要使用前导\\
。 不开心
建议表示赞赏。
我无法告诉您它为什么能工作,但我肯定会遇到问题。 在详细介绍之前,让我建议您尝试一下:
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
别名中的$@
指向外壳程序本身的参数,而外壳函数中的$@
指向该函数的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.