仅在使用 watch 命令时出现 Shell 脚本错误

仅在使用 watch 命令时出现 Shell 脚本错误

我正在尝试创建一个 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

  1. 更准确地说,它传递命令,sh -c ' ... '然后遵循中概述的规则哪个 shell 解释器运行不带 shebang 的脚本?

相关内容