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