繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM