startScript.sh
에 있습니다/root/script/startScript.sh
script1.sh
에 있습니다/root/script/test/script1.sh
script2.sh
에 있습니다/root/script/test/script2.sh
startScript.sh
아래처럼 보인다
#!/bin/bash
#some code!
sh `pwd`/test/script1.sh 2>&1 &
sh `pwd`/test/script2.sh 2>&1 &
#some code
script2.sh
script1.sh
다음과 같이
#!/bin/bash
> `pwd`/process_ids.txt
while true;do
echo "The Process: `ps`" >> `pwd`/process_ids.txt
#some code to parse the process, etc. and echo it
done
일어나는 일은 process_ids.txt
파일이 생성되는 것 입니다 /root/script
. 하지만 그 근거 scriptx.sh
는 pwd
. /root/scripts/test/
보여줬는데 pwd
보여 scriptx.sh
지네요 /root/script/
. 어떻게 얻을 수 pwd
있나요 scriptx.sh
?
답변1
test/
생성하려는 파일의 경로에 추가하면 어떨까요?
#!/bin/bash
> `pwd`/test/process_ids.txt
while true;do
echo "The Process: `ps`" >> `pwd`/test/process_ids.txt
#some code to parse the process, etc. and echo it
done
답변2
가장 쉬운 방법은 이를 스크립트 1과 2에 매개변수로 전달하는 것입니다. 따라서 scriptx.sh
다음과 같이 수정되었습니다(그런데 $PWD
외부 명령을 실행할 이유가 없습니다).
#!/bin/bash
#some code!
sh "$PWD"/test/script1.sh "$PWD" 2>&1 &
sh "$PWD"/test/script2.sh "$PWD" 2>&1 &
#some code
그리고 script1.sh
그리고 script2.sh
:
#!/bin/bash
dir="$1"
> "$dir"/process_ids.txt
while true;do
echo "The Process: `ps`" >> "$dir"/process_ids.txt
#some code to parse the process, etc. and echo it
done
보다 정교한 접근 방식은 파일 시스템에서 상위 스크립트의 PWD를 얻는 것입니다 /proc
. 다른 사람들이 시작되고 있으므로 변수 의 PID scriptx.sh
에 액세스할 수 있습니다 . Linux에서 실행 중인 각 프로세스에는 현재 작업 디렉터리에 대한 링크가 있습니다 . 따라서 동일하게 유지하고 다른 항목을 다음과 같이 수정할 수 있습니다.scriptx.sh
$PPID
/proc/PID/cwd
scriptx.sh
#!/bin/bash
dir="$(readlink -f /proc/$PPID/cwd)"
> "$dir"/process_ids.txt
while true;do
echo "The Process: `ps`" >> "$dir"/process_ids.txt
#some code to parse the process, etc. and echo it
done
답변3
당신은 필요하지 않습니다얻다또는통과누구든지 무엇이든. 끝났습니다. 분기된 프로세스의 현재 작업 디렉터리는 상위 프로세스의 현재 작업 디렉터리입니다. 따라서 이러한 스크립트가 현재 디렉터리를 변경하지 않는 한, 만약 그렇다면 이것이 예상된 동작이거나 편집을 통해 수행을 방지해야 하는 작업인 경우 현재 작업 디렉터리는 모든 사람에게 동일하게 됩니다. 하지만 만약 있다면예어떤 이유에서인지 차이가 있고 출력이 ...
`pwd`
...똑같은 문제가 있고 똑같은 이유로 인해 어떤 징후로도 간주될 수 없습니다.
그러나 다른 프로세스에 대해 이러한 사항을 확인하고 싶고 다른 프로세스의 PID가 있는 경우( script2.sh
쉘 인수에서 와 같이 $!
)를 사용하여 다른 프로세스의 PID를 얻을 수 있으면jobs -p
cd -P /proc/"$!"/cwd;pwd;cd -
...먼저 마지막 백그라운드 프로세스의 현재 작업 디렉터리로 변경한 다음 인쇄한 다음 현재 셸의 이전 현재 작업 디렉터리로 다시 변경하여 인쇄합니다.