2017-10-02 16 views
0

2 개의 스크립트가 있습니다. 이 입력을 얻고있는 스크립트 나 스크립트 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 

있습니까 : 스크립트 a.sh는 다음과 같이 출력을 처리하는 스크립트 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 명령을 사용하여 호출 된 스크립트를 확인하십시오.