将cshell代码移植到bourne shell

将cshell代码移植到bourne shell,shell,unix,Shell,Unix,适用于n C-shell,但不适用于Bourne。我逃离了括号,它不再抱怨,但它不起作用。救命啊 伯恩不做流程替换,即,>(…)。请改用bash。类似于bash 如果您正在寻找真正的Bourne shell(而不是bash),那么您的工作将被简化为模拟Bourne shell。事实上,您最好的选择是获得一个显式运行其他程序的程序(pee就是这样一个程序;如果存在其他程序,请参见GNU的位置) 如果您也不能这样做,那么您将不得不重新访问代码。最简单的修复方法如下所示: cat /tmp/SYSLO

适用于n C-shell,但不适用于Bourne。我逃离了括号,它不再抱怨,但它不起作用。救命啊

伯恩不做流程替换,即,
>(…)
。请改用bash。

类似于
bash

如果您正在寻找真正的Bourne shell(而不是
bash
),那么您的工作将被简化为模拟Bourne shell。事实上,您最好的选择是获得一个显式运行其他程序的程序(
pee
就是这样一个程序;如果存在其他程序,请参见GNU的位置)

如果您也不能这样做,那么您将不得不重新访问代码。最简单的修复方法如下所示:

cat /tmp/SYSLOG | tee >( egrep -i "session limit" > sess.txt) | egrep "dst_port=3389 " > dst.txt

这将并行运行这些命令。第二个
&
是不必要的,但为了对称而存在。事实上,这将在任何shell中工作,因此它是可移植的解决方案。除非
cat/tmp/SYSLOG
操作实际上是一个复杂的程序,否则它至少可以像原始代码一样灵活地工作。

您可以在bourne shell脚本中调用awk:

egrep -i "session limit"  /tmp/SYSLOG > sess.txt &
egrep    "dst_port=3389 " /tmp/SYSLOG > dst.txt  &
wait
如果您碰巧有GNU awk:

awk '
    tolower($0) ~ /session limit/ {print > "sess.txt"}
    /dst_port=3389 /              {print > "dst.txt"}
' /tmp/SYSLOG

您得到了什么错误?您确定这是C shell吗?本手册无法识别(…)符号AFAIC。它是一种
bash
符号。
gawk -v IGNORECASE=1 '
    /session limit/  {print > "sess.txt"}
    /dst_port=3389 / {print > "dst.txt"}
' /tmp/SYSLOG