我正在尝试创建一个 shell 脚本,该脚本每隔两秒读取和写入某些文本文件。当我单独运行该脚本(没有 watch)时,它运行正常。但是,当我使用 运行它时watch -n 2 ./feedcmd.sh
,出现此错误:./feedcmd.sh: 2: ./feedcmd.sh: Syntax error: "(" unexpected
。
我尝试在该短语周围添加一对额外的括号,但仍然没有成功。
这是我的 shell 脚本:
$(tmux capture-pane -t "$tes3-server" -pS 32768 > one.txt)
output=$(comm -23 <(sort one.txt) <(sort two.txt))
len=`expr "$output" : '.*'`
if [ "$len" -gt 0 ]; then
$(echo "$output" > fin.txt)
$(cat one.txt > two.txt)
$(echo 0 > done.d)
fi
echo "done"
答案1
你的脚本没有舍邦。该watch
命令可能使用 执行它/bin/sh
,它不支持<(command)
进程替换构造1:
$ cat myscript
cat <(echo foo)
$ watch -n 2 ./myscript
==>
Every 2.0s: ./myscript t400s: Sun Mar 7 09:09:04 2021
./myscript: 1: ./myscript: Syntax error: "(" unexpected
然而
$ cat myscript
#!/bin/bash
cat <(echo foo)
$ watch -n 2 ./myscript
==>
Every 2.0s: ./myscript t400s: Sun Mar 7 09:07:32 2021
foo
- 更准确地说,它传递命令,
sh -c ' ... '
然后遵循中概述的规则哪个 shell 解释器运行不带 shebang 的脚本?