여러 줄 구문을 사용하여 PATH에 경로 추가

여러 줄 구문을 사용하여 PATH에 경로 추가

내가 이해한 바로는 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))

관련 정보