Bash:如何执行来自变量扩展的重定向

时间:2017-03-18 06:36:35

标签: bash

我正在尝试运行一个带有变量的命令,该变量包含另一个禁止jar警告消息的命令。但是,它没有按预期工作,我无法弄清楚我做错了什么。

TEST=${TEST:-2> /dev/null}
java -jar ~/bin/aw.jar ${Test}

1 个答案:

答案 0 :(得分:0)

重定向只有在不加引号并且在字面上出现在命令行中而不是源自任何类型的扩展时才会执行:

$ ls
$ echo hello >out
$ ls
out
$ cat out 
hello
$ rm * 
$ echo hello '>out'
hello >out
$ ls
$ x='>out'
$ echo hello $x
hello >out
$ ls

为了解释来自引用字符串或扩展的重定向运算符,您必须通过eval执行命令(但请注意,这可能会导致命令的其他部分发生意外扩展):

$ ls
$ x='>out'
$ eval echo hello $x
$ ls
out
$ cat out
hello