我正在编写一个调用myShellScript.sh
其中的shell脚本,其中包含以下文本:
echo *** Print out this line ****
diff <(./myProgram) <(./otherProgram)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,sh myShellScript.sh
我收到以下错误:
-bash-4.2$ sh myShellScript.sh
myShellScript.sh **** Print out this line **** myShellScript.sh
myShellScript.sh: line 2: syntax error near unexpected token `('
myShellScript.sh: line 2: `diff <(./myProgram) <(./otherProgram)'
Run Code Online (Sandbox Code Playgroud)
使用<(...)
运算符替换进程是一项bash
功能.您收到该错误消息是因为您的脚本正在执行其他内容(例如dash
)或旧版本bash
,或者bash
在POSIX兼容模式下运行,并禁用了进程替换等非POSIX功能(谢谢,@ check!)
如果您想使用功能齐全的bash执行脚本,您有两个选择:
运行脚本bash
:
bash myShellScript.sh
Run Code Online (Sandbox Code Playgroud)将脚本的第一行设置为#!/bin/bash
(或bash
系统中的路径),然后运行如下脚本:
./myShellScript.sh
Run Code Online (Sandbox Code Playgroud)