2016-08-21 4 views
3

(bashの)以下の罰金に動作します:ターミナルでのsh -cとプロセス置換

cat <(echo "hello") 

しかし、私は行った場合:

sh -c 'cat <(echo "hello")' 

私は

sh: 1: Syntax error: "(" unexpected 

を取得し、あなたが説明することができますその理由は?

はところで、私の全体的な目的は、シェルスクリプトでこのコマンドを記述することです:

watch -n 1 'cat <(iptables -L INPUT) <(iptables -L FORWARD)' 

が、それは動作しません、その理由は、上記の問題のようです。

答えて

2

shは、多くの場合、dashではなく、bashではありません(man sh参照)。 dashは、プロセスの置換を行わず、POSIXのものだけを行います。

あなたは何をする必要があります:

bash -c 'cat <(echo "hello")' 

ksh & zshも、プロセス置換を行うことができます。

あなたの例では、あなたは、単に行うことができます。

watch -n 1 'iptables -L INPUT; iptables -L FORWARD' 

高度なシェルまたはプロセスsubtitutionは必要ありません。

+0

ありがとう:

は、私は非常にクリーンであり、任意のPOSIX互換シェルで動作し、次のコマンドをお勧めします!彼が最初に答えたので、私はhek2mglから答えを受け入れました。 – Markus

+1

ありがとうございますが、それは正しい理由ではありません。 :)あなたに最も役立つと思う答えを受け入れてください。重複した質問に属する回答も確認してください。彼らは問題をより詳細に説明します。 – hek2mgl

+0

@ hek2mglありがとうございます。彼の答えがまったく良いと思うなら、それは良い理由かもしれません。 – PSkocik

0

構文エラーの理由は、がシステム上のbashにリンクされておらず、POSIX標準の一部ではないprocess substitutionを理解できないためです。

while true ; do 
    clear 
    iptables -L INPUT 
    iptables -L FORWARD 
    sleep 1 
done 
関連する問題