我有一个bash脚本(源),它必须将openssl输出重定向到另一个bash脚本:
stdbuf -i0 -o0
openssl s_client
-starttls xmpp
-xmpphost "$domain"
-connect "$host:$port"
-quiet
< "$pipename"
| (printf '%s %sn' "$jid" "$authstr";
stdbuf -o0 tr '>n' 'n 01')
| stdbuf -o0 tee "$debug_recv"
| stdbuf -o0 "$thisdir/echoz.sed"
| stdbuf -o0 tee "$debug_sent"
| stdbuf -o0 tr -d 'n'
| stdbuf -o0 tr ' 01' 'n'
| tee >( bash commandparser.sh >> /dev/pts/0 )
> "$pipename"
但是它给出了一个错误:./echoz.sh: 38: Syntax error: "(" unexpected
如果我在命令行中做同样的事情,它会工作得很好:
$ echo "[DATA]" | tee >( bash commandparser.sh >> /dev/pts/0 )
------------------NEW MESSAGE-----------------
From:
To:
Type:
Text:
------------------NEW MESSAGE-----------------nn
您的脚本以#!/bin/sh
开头,sh
不一定是bash
。如果你想让你的脚本在bash
下运行,那么使用#!/usr/bin/env bash
。
通过ShellCheck.net运行。
Line 30:
< "$pipename"
^-- SC2094 (info): Make sure not to read and write the same file in the same pipeline.
Line 38:
> "$pipename"
^-- SC2094 (info): Make sure not to read and write the same file in the same pipeline.
你的问题可能就像Ed说的那样-sh
可能是bash
-我的Git Bash仿真的sh
允许>(...)
结构,但其他版本可能不允许,所以我使用明确使用bash
,或者检查你的目标系统的sh
可以处理所有这些功能。
我也会非常努力地去减少那个脚本的噪音…