bin
모든 디렉토리를 추출 PATH
하여 변수로 설정하고 싶습니다 . 모든 디렉토리가 한 줄에 나타나기 때문에 혼란스럽습니다. :
그러나 저는 이 bin
디렉토리만 원합니다.
/home/jo52900/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/local/bin:/opt/universal/ucmdmgr/bin
어떻게 해야 합니까?
답변1
왜 당신이 이 디렉토리를 특별하게 취급하고 싶은지 모르겠습니다 bin
. 아마도 각 디렉토리를 한 줄에 표시하기를 원할 것 같습니다. 그렇다면 다음과 같이 할 수 있습니다.
printf '%s\n' "$PATH" | tr : '\n'
$PATH
예를 들어, 내 시스템에는 이름에 가 포함되지 않은 디렉토리가 많이 있습니다. bin
이는 다음과 같습니다.
$ printf '%s\n' "$PATH" | tr : '\n'
/home/terdon/perl5/bin
/home/terdon/Setups/cd-hit-v4.5.4-2011-03-07
/sbin
/usr/local/sbin
/usr/bin
/usr/sbin
/home/terdon/Setups/PfamScan
/home/terdon/research/data/python
/home/terdon/scripts
/home/terdon/bin
bin
디렉토리 만 보고 싶다면 디렉토리를 추출하면 됩니다.
$ printf '%s\n' "$PATH" | tr : '\n' | grep '/bin$'
/home/terdon/saphetor/bin
/home/terdon/perl5/bin
/usr/bin
/home/terdon/bin
또는 답변에 표시되는 작업을 수행하고 bin
실제로 존재하는 디렉토리뿐만 아니라 이름에 해당 문자열이 포함된 디렉토리 도 포함하려는 경우명명 된 bin
, 넌 할 수있어:
$ printf '%s\n' "$PATH" | tr : '\n' | grep 'bin'
/home/terdon/saphetor/bin
/home/terdon/perl5/bin
/sbin
/usr/local/sbin
/usr/bin
/usr/sbin
/home/terdon/bin
답변2
또 다른 방법은 쉘에 분할을 수행하도록 요청하는 것입니다 $PATH
.
( IFS=: ; printf "%s\n" $PATH )
grep
필요한 경우 이를 후처리할 수 있습니다.
답변3
zsh를 사용한다고 가정합니다.
print -lr $path
이것path
바꾸다는 의 콜론으로 구분된 문자열과 자동으로 동기화되는 배열입니다 PATH
.print -lr
백슬래시 해석 없이 한 줄에 하나의 요소를 인쇄합니다1.
바인딩된 배열 없이 콜론으로 구분된 다른 목록이 필요한 경우 다음을 전달할 수 있습니다.매개변수 확장 플래그.
print -lr ${(s[:])LD_LIBRARY_PATH}
"bin 디렉토리"가 무엇을 의미하는지 모르겠습니다. grep을 사용하여 필터링할 수 있습니다.
print -lr $path | grep bin
또는 사용매개변수 확장다음과 같은 기능
print -lr ${(M)path:#*bin*}
1 nitpickers의 경우: 목록이 비어 있지 않고 첫 번째 요소가 로 시작하지 않는다고 가정합니다 -
. 그것은 안전한 내기입니다 $path
.
답변4
해결책을 찾았습니다
echo "$PATH" | grep -o "[^:]*bin[^:]*"