사람이 읽을 수있는 방식으로 PATH 표시


43

PATH 환경 변수를보다 읽기 쉬운 방식으로 보여주고 싶습니다.

$ echo $PATH
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin:/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/bin:/usr/local/git/bin:/Users/arturo/.gvm/groovy/current/bin:/Users/arturo/.gvm/grails/current/bin:/Users/arturo/.gvm/griffon/current/bin:/Users/arturo/.gvm/gradle/current/bin:/Users/arturo/.gvm/lazybones/current/bin:/Users/arturo/.gvm/vertx/current/bin:/Users/arturo/.gvm/bin:/Users/arturo/.gvm/ext:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin

나는 이런 식으로 생각하고있다 :

$ echo $PATH | some cut and awk magic
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/bin
...

답변:


62

사용할 수 있습니다 tr.

$ tr ':' '\n' <<< "$PATH"
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
...

bash 및 zsh에서 테스트 한 일부 쉘에서도이를 수행 할 수 있습니다.

echo -e ${PATH//:/\\n}

zsh에서는 $path변수를 사용하여 콜론 대신 공백이있는 경로를 볼 수 있습니다.

$ echo $path
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin /Users/arturo/.rvm/bin

어느와 결합 될 수있다 printfprint.

$ printf "%s\n" $path
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
...
$ print -l $path
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
...

<<<사업자라는 herestrings 있습니다. Herestrings는 왼쪽에있는 명령의 표준 입력으로 단어를 오른쪽으로 전달합니다.

$ cat <<< 'Hello there'
Hello there

쉘이 지원하지 않으면 echo파이프를 사용하십시오.

$ echo 'Hello there' | cat
Hello there

2
here-string 사용에 관심이 있으시면 다음을 수행하십시오. echo $PATH | tr ':' '\n'하지만 솔루션이 더 명확합니다.
Arturo Herrero 2016 년

1
나는 모든 행인에게 herestrings의 사용법을 설명하기 위해 내 대답에 약간을 추가했습니다.

zsh에서는 print -l $path몇 가지 키 입력을 저장합니다. $path백 슬래시 가 포함되어 있으면 실패 하지만 매우 드문 경우입니다.
Gilles 'SO- 악마 그만해'

이 중 일부는에 빈 항목을 표시하지 못합니다 $PATH.
Stéphane Chazelas 2016 년

@ StephaneChazelas : 나는 그것에 대해 생각하지 않았습니다. 처음 두 개는 빈 항목을 표시합니다. zsh 전용은 그렇지 않습니다.

4

여기에 빠른 방법이 있습니다 bash

OLDIFS=$IFS IFS=: arr=($PATH) IFS=$OLDIFS
printf "%s\n" "${arr[@]}"

4
IFS서브 쉘을 사용하여 저장 / 복원 을 피할 수 있습니다 . 예(IFS=: arr=($PATH); printf "%s\n" "${arr[@]})")
Nick

1
이 마지막 있다면 그 또한 대부분의 껍질에 빈 항목을 표시 할 수 없게됩니다 ( /bin:/usr/bin:대한 일반적인 값으로 사용 $PATH)
스테판 Chazelas가

$PATH와일드 카드 문자를 포함하는 경우에도 실패 할 수 있습니다 (
아마도

bash어쨌든 지정한대로 IFS=: read -a arr <<< "$PATH"분할 부분에 사용할 수 있습니다 . 그렇게하면 IFS새로운 값이를 실행하는 동안에 만 사용 read되므로 복원 할 필요가 없습니다. pastebin.com/7E7C4AcR
manatwork

의견을 보내 주셔서 감사합니다. @manatwork, 왜 IFS새로운 값이 배열을 만든 후에도 유지되지만 실행 후에는 지속되지 않는지 알고 read있습니까?
iruvar


1

설정되지 않은 PATH는 빈 PATH와 다른 의미를 갖습니다. 빈 PATH에는 하나의 빈 요소가 포함되며 이는 현재 디렉토리에서만 실행 파일을 찾는 것을 의미합니다. 설정되지 않은 PATH는 기본 디렉토리 목록에서 실행 파일을 검색하는 것을 의미합니다 (그러나 일부 시스템에서는 모든 도구가 그 목록)

에서 zsh:

if (($+PATH)); then
  echo "$#path element(s):"
  printf '%q\n' "$path[@]"
else
  echo "PATH unset"
fi

POSIX 셸에서 ( 모드의 zsh경우에도 shPOSIX가 아닙니다) :

if [ -n "${PATH+.}" ]; then
  (
    p=$PATH:
    set -f
    IFS=:
    set -- $p
    echo "$# element(s):"
    printf '"%s"\n' "$@"
  )
else
  echo "PATH unset"
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.