不能在bash中使用进程替换



我有一个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' 'n01') 
| 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可以处理所有这些功能。

我也会非常努力地去减少那个脚本的噪音

相关内容

  • 没有找到相关文章

最新更新