태그 보관물: shell

shell

사람이 읽을 수있는 방식으로 PATH 표시 이런 식으로 생각하고있다 : $ echo $PATH

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
...



답변

사용할 수 있습니다 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


답변

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

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


답변

Smith John의 솔루션을 확장 하면 다음과 같이 멋진 별칭이됩니다 .bash_profile.

alias MyPath='echo -e ${PATH//:/\\n}'


답변

설정되지 않은 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


답변