PATH에서 모든 bin 디렉토리를 한 번에 추출하는 방법은 무엇입니까?

PATH에서 모든 bin 디렉토리를 한 번에 추출하는 방법은 무엇입니까?

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[^:]*"

관련 정보