sh: 意外标记“<”附近的语法错误
sh: syntax error near unexpected token `<'
我正在创建一个脚本,我将 awk 命令的输出重定向到一个循环中,但它给了我这个错误:
sh: -c: line 3: syntax error near unexpected token `<'
sh: -c: line 3: `done < <(awk "{print}" inputfile.txt)'
我能够 运行 它针对不同的远程主机,但是这台主机给我一个错误。有谁知道 sh/bash 的某些版本是否不支持该语法,或者知道该语法的任何替代方法,或者可能发现我无法看到的错误? (我是 bash 脚本编写的新手,所以即使方向正确也会有所帮助!)
这是我的脚本的简化版本,我能够在上面重现该问题:
#!/usr/bin/env bash
host=
ssh $host 'while read line
do
echo "hi";
done < <(awk "{print}" inputfile.txt)'
看起来该主机上的远程用户使用的 shell 不是 Bash 到 运行 命令,参见 this Q&A;一种解决方法是避免 Bashisms:
ssh "$host" 'awk "{print}" inputfile.txt \
| while IFS= read -r line; do
echo "$line"
done'
它有自己的缺陷,请参阅 A variable modified inside a while loop is not remembered – 或者,您可以指定远程主机应该 运行 Bash:
ssh "$host" <<'EOF'
bash -c 'while IFS= read -r line; do
echo "$line"
done < <(awk "{print}" inputfile.txt)'
EOF
我正在创建一个脚本,我将 awk 命令的输出重定向到一个循环中,但它给了我这个错误:
sh: -c: line 3: syntax error near unexpected token `<'
sh: -c: line 3: `done < <(awk "{print}" inputfile.txt)'
我能够 运行 它针对不同的远程主机,但是这台主机给我一个错误。有谁知道 sh/bash 的某些版本是否不支持该语法,或者知道该语法的任何替代方法,或者可能发现我无法看到的错误? (我是 bash 脚本编写的新手,所以即使方向正确也会有所帮助!)
这是我的脚本的简化版本,我能够在上面重现该问题:
#!/usr/bin/env bash
host=
ssh $host 'while read line
do
echo "hi";
done < <(awk "{print}" inputfile.txt)'
看起来该主机上的远程用户使用的 shell 不是 Bash 到 运行 命令,参见 this Q&A;一种解决方法是避免 Bashisms:
ssh "$host" 'awk "{print}" inputfile.txt \
| while IFS= read -r line; do
echo "$line"
done'
它有自己的缺陷,请参阅 A variable modified inside a while loop is not remembered – 或者,您可以指定远程主机应该 运行 Bash:
ssh "$host" <<'EOF'
bash -c 'while IFS= read -r line; do
echo "$line"
done < <(awk "{print}" inputfile.txt)'
EOF