我有一个 bash 脚本:
#!/bin/bash
VAR1="var1"
VAR2="var2"
VAR3="var3"
cat ${VAR1} \
<(echo -e '<something>') \ # <--------- here's the error
${VAR2}/file123.txt \
<(echo -e '</something>\n<something2>') \
${VAR3}/file456.txt \
<(echo -e '</something2>')
当我运行它时:sh my_script.sh
,我收到错误:
my_script.sh: 9: Syntax error: "(" unexpected (expecting word)
更新:
bash
未找到,“/bin/bash”不存在。也bash
没有。
答案1
尝试 :
chmod 755 "my_script.sh"
然后像这样简单地运行它
my_script.sh
开头的行#!/bin/bash
用于告诉您的系统应该使用哪个 shell 来运行脚本。我认为你通过使用 执行它来超越这一点sh my_script.sh
。您也可以明确地编写/bin/bash my_script.sh
.另外,如果您的脚本中有一些 bash 特定的语法,您应该考虑将扩展名更改为.bash
更明确。
编辑
您的 FreeBSD 发行版上似乎没有bash
(FreeBSD 上的默认 shell 似乎是tcsh
)。你可以找到这里bash
在 FreeBSD 上安装的教程。我提供的解决方案应该可以正常工作。祝你好运。
答案2
显然,从 she-bang 来看,该脚本旨在由bash
not运行sh
(尽管zsh
由于未加引号的变量,语法看起来更像语法)。
您需要使用bash
或 来运行它zsh
。如果这些 shell 不可用,您可以安装它们,或者将该脚本转换为sh
此处应该简单的语法。
该sh
语言(Bourne 或 POSIX)没有<(...)
运算符。它来自于并且ksh
受到支持。是非标准的,甚至只能在某些环境中使用。bash
zsh
echo -e
bash
ksh
标准sh
等效项是:
var1="var1"
var2="var2"
var3="var3"
cat < "$var1" || exit
printf '<something>\n' || exit
cat < "$var2/file123.txt" || exit
printf '</something>\n<something2>\n' || exit
cat < "$var3//file456.txt" || exit
print '</something2>\n'