내가 이해한 바로는 PATH
환경 변수에 경로를 추가하는 일반적인 방법은 :
문자로 구분된 경로를 연결하는 것입니다.
예를 들어, 경로 3개를 추가하려면 다음 /my/path/1
과 /my/path/2
같이 /my/path/3
해야 합니다.
PATH=$PATH:/my/path/1:/my/path/2:/my/path/3
읽기가 쉽지 않습니다.
어떤 방법이 있나요?정의또는다음에 추가PATH
변수를 사용할 경로여러 줄 구문? 배열을 사용할까요? 나는 다음과 같은 것을 찾고 있습니다 :
PATH =
$PATH
/my/path/1
/my/path/2
/my/path/3
쉘과 관련된 흥미로운 솔루션이 있다면 zsh에서 솔루션을 찾고 있습니다.
답변1
전혀 흥미로운 솔루션은 아니지만 이식성이 뛰어납니다.
PATH=${PATH}:/my/path/1
PATH=${PATH}:/my/path/2
PATH=${PATH}:/my/path/3
답변2
zsh에서는 $path
배열입니다.
path=(
$path
~/.local/bin
~/.gem/ruby/2.0.0/bin
)
참고: path
모두 소문자입니다.
답변3
zsh에서는 작동하는지 모르겠지만 bash에서는 작동합니다.
PATH=$(paste -d ":" -s << EOF
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF
)
편집하다더 짧게:
PATH=`paste -d ":" -s << EOF
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF`
그리고 프로세스를 생성하지 않습니다.
new_path=(
"$PATH"
/my/path/1
/my/path/2
/my/path/3)
OLD_IFS="$IFS"
export IFS=":"
PATH="${new_path[*]}"
export IFS="$OLD_IFS"
큰따옴표는 변수의 공백을 보존하고 IFS의 쉘 해석을 방지하는 $PATH
데 중요합니다 .$IFS
${new_path[*]}
$OLD_IFS
업데이트 2주석 및 빈 줄 관리에는 sed를 사용하십시오.
PATH=`sed -e '/^#/'d -e '/^$/'d << EOF | paste -d ":" -s
$PATH
/my/path/1
# This is a comment.
/my/path/2
/my/path/3
EOF`
주석 문자는 줄의 첫 번째 문자여야 하며, 빈 줄은 완전히 비어 있어야 합니다. 주석 앞과 빈 줄에서 공백과 탭을 관리하려면 sed -e '/^[ \t]*#/'d -e '/^[ \t]*$/'d
대신 (sed 구현에 따라 다를 수 있으므로 테스트하려면 탭)을 사용하세요.
답변4
zsh에서 경로 끝에 디렉터리를 추가하려면 다음을 수행하세요.
path+=/my/path/1
path+=/my/path/2
path+=(/path/to/app/{i386,share}/bin)
가지고 다닐 수 있는:PATH에 경로를 올바르게 추가하는 방법은 무엇입니까?
당신은 그것을 사용할 수 있습니다글로벌 예선존재하지 않는 디렉터리나 기호 링크에 대한 항목을 제외합니다. 세션 중에 나중에 디렉터리를 추가할지 여부(예: 디렉터리가 원격 파일 시스템에 있는 경우)에 따라 이것이 이상적일 수도 있고 아닐 수도 있습니다. path+=/my/path
오른쪽이 문자열 컨텍스트에 있으므로 구문을 사용하여 이 작업을 수행 할 수 없습니다 . 따라서 path+=(/my/path)
각 배열 요소가 목록 컨텍스트에서 확장되므로 와일드카드가 발생하지 않습니다.
path+=(/path/to/app/{i386,share}/bin(-/N))