![네트워크 네임스페이스와 스크립트가 $PATH를 손상시킨 것 같습니다.](https://linux55.com/image/94851/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EA%B0%80%20%24PATH%EB%A5%BC%20%EC%86%90%EC%83%81%EC%8B%9C%ED%82%A8%20%EA%B2%83%20%EA%B0%99%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
다음 스크립트를 가정합니다.
$ cat test.sh
#!/bin/bash
echo $PATH
때로는 다음과 같이 진행됩니다.
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/<user>/.local/bin:/home/<user>/bin
$ sudo ip netns exec blue echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/<user>/.local/bin:/home/<user>/bin
$ ./test.sh
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/<user>/.local/bin:/home/<user>/bin
$ sudo ip netns exec blue ./test.sh
/sbin:/bin:/usr/sbin:/usr/bin
왜. 그것은 그들이 내 바이너리를 많이 볼 수 없다는 것을 의미했기 때문에 내 스크립팅 생태계를 깨뜨렸습니다.
제가 테스트한 두 배포판 중 Fedora 24가 이 작업을 수행할 수 있는 유일한 배포판입니다. Ubuntu 14.04는 $PATH
예상대로 작동합니다.
스크립트에 추가해 보았습니다.
$ sudo ip netns exec blue PATH=$PATH
PATH=etcetc
그러나 실제 명령이 아니기 때문에 오류가 발생합니다 .
올바른 접근 방식은 무엇입니까?
답변1
항상 수행할 수 있는 두 가지 작업은 다음과 같습니다. 의심할 여지가 없도록 명령의 정규화된 이름을 사용합니다. 내 스크립트에서는 환경을 외부적으로 수정할 때(즉, 환경과 독립적으로) 문제를 피하기 위해 스크립트 내에 구체적으로 PATH 변수를 설정했습니다. 어쨌든 이것은 좋은 일반적인 관행처럼 보입니다.