我有以下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)
内联作为文件名参数)
答案 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特定的功能将不可用)