内联unix命令作为文件名

时间:2018-10-29 10:50:12

标签: bash unix

我有以下bash脚本test.sh(具有执行权限):

#!/bin/sh
CAT_BIN="cat"
"$CAT_BIN"  <(tail -n +2 test.sh)

运行它时会给我该错误:

$ ./test.sh 
./test.sh: line 4: syntax error near unexpected token `('
./test.sh: line 4: `"$CAT_BIN"  <(tail -n +2 test.sh)'

但是,当我获取以下命令时,它会执行。

$ CAT_BIN="cat"
$ "$CAT_BIN"  <(tail -n +2 test.sh)

这在脚本中如何工作? (使用<(tail -n +2 test.sh)内联作为文件名参数)

1 个答案:

答案 0 :(得分:4)

<(tail -n +2 test.sh)构造是一项bash功能,因此您需要在bash shell中运行脚本,

替换您的顶行

#!/bin/sh

#!/bin/bash

(或bash可执行文件的正确路径,如果它不是系统上的/bin/bash

请注意,即使/bin/sh例如一个指向bash的符号链接,当您以/bin/sh的身份运行它时,它将在posix compatibility mode中启动bash,并且许多bash特定的功能将不可用)