작은 스크립트를 작성했는데 어떤 이유로 작동하도록 매개 변수에 전달 된 공백을 이스케이프 처리해야합니다.pgrep가 예상보다 다른 pid를 인쇄합니다.
나는이 문제가있는 사람들에 관한 수많은 기사를 읽었으며 일반적으로 $ @를 인용하지 않았기 때문에 내 변수는 모두 스크립트와 명령 줄에서 인용 된 매개 변수 내에서 인용됩니다. 또한 디버그 모드에서 스크립트를 실행하면 반환 된 줄은 복사 붙여 넣기를 통해 성공적으로 실행될 수 있지만 스크립트 내에서 실행되면 실패합니다.
CODE :
connections()
{
args="[email protected]"
pid="$(pgrep -nf "$args")"
echo $pid
# code that shows TCP and UDP connections for $pid
}
connections "[email protected]"
예 :
bash test.sh "blah blah"
가 실패하고 대신 현재 실행중인 쉘
bash test.sh "blah\ blah"
성공의 PID를 반환하고의 PID를 반환 proc 귀하가 pgrep을 통해 검색하는 내용
이것은 정확히 당신의 문제는 아니지만 여기서''$ @ "'의 사용법을 이해하지 못합니다. 'connections'는 하나의 인수만을 취하도록 명확하게 설계된 것처럼 보입니다. 다중 인수를 받으면 잘못 될 것입니다 (첫 번째 인수가 명령과 일치하도록'pgrep -nf'에 별도로 모든 인수를 전달합니다) 행 및 모든 후속 인수는 프로세스 이름과 만 일치합니다. 왜''$ 1 ''대신에''$ 1''을 쓰는 것이 좋을까요? 또는 여러 인자가있는 경우 오류나 경고를주는 것이 더 좋습니다. – ruakh
나는 이미 그것을 시도했고 같은 문제가 있었다. 만약 $ @의 모든 인스턴스를 $ 1로 바꾸면 같은 문제가 발생합니다 (공간을 벗어남으로써 현재 쉘의 pid를 가져 오지는 않지만 공간이 작동 함) –
예 : 말했듯이''$ @ '' 문제가되지 않습니다. 그러나 나는 왜 당신이 그것을 오용하고 싶어하는지 알지 못합니다. – ruakh