2017-10-02 23 views
0

私は2つのスクリプトを持っています。次のようにスクリプトa.shはスクリプトに出力をパイプb.sh出力を処理している:スクリプトの出力を別のスクリプトにパイプする

$ cat a.sh 
#!/bin/bash 
echo output | ./b.sh ### piping into STDIN of b.sh script 
$ 
$ cat b.sh 
#!/bin/bash 
grep output ### reading from STDIN 
$ 
$ ./a.sh 
output 

は、私はそれが入力を取得していたスクリプトからスクリプトb.shに決定することができます方法はありますか?私はb.shスクリプトがa.shであることを知りたいと思います。私はlsofとの組み合わせで/ proc/$$/fdの内容で作業しようとしましたが、成功しませんでした。

+1

なぜ知りたいですか?あなたはどうしたら違うのですか?これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように聞こえます。 –

+0

それぞれのスクリプトは異なるプロセスでなければなりません。b.shスクリプトのpsコマンドから理解できるはずです:)親プロセスはa.shスクリプトでなければなりません – Rob

答えて

0

これは愚かな解決策かもしれませんが、psを使ってそのプロセスからコマンドを取得するより親プロセスを見つけることができます。

例b.shにこれを追加することによって、あなたは上記の与えたで:a.shスクリプトから呼び出され、出力は

ps -p $(ps -o ppid= -p $$) -o cmd= 

た:コマンドから直接呼び出す

/bin/bash ./a.sh 

行:

-bash 

同じことを達成するために/ proc/$$フォルダを使用するとします/ proc/$$を入力するとparentPidを取得し、/ proc/$(parentPid)/ cmdlineを読み込むと同じ結果が得られます。

ので、あなたのようなものだろう。この方法:b.shがa.shから呼び出され

parentPid=$(cat /proc/$$/stat | awk '{print $4}') 
cat /proc/$(parentPid)/cmdline 

出力:

/bin/bash./a.sh 
+1

cat:cat/proc/$ PPID/cmdline |文字列| tail -n +2 –

+0

@ rasty.g良い取引。 :) – Rob

0

あなたはPPIDオプションでpsコマンドを使用することができますが、またはcallerコマンドを使用して、呼び出されたスクリプトを確認します。

関連する問題