문제

경로와 같은 쉘 변수에서 요소를 제거하는 관용적 인 방법이 있습니까?

그것은 내가 가져 가고 싶은 것입니다

PATH=/home/joe/bin:/usr/local/bin:/usr/bin:/bin:/path/to/app/bin:.

그리고 제거하다 또는 바꾸다 그만큼 /path/to/app/bin 나머지 변수를 막지 않고. 나를 허용하기위한 추가 포인트 놓다 임의 위치의 새로운 요소. 대상은 잘 정의 된 문자열로 인식 할 수 있으며 목록의 어느 시점에서나 발생할 수 있습니다.

나는 이것을 보았고 아마도 내 자신의 무언가를 함께 자갈 수 있다는 것을 알고 있지만, 나는 좋은 접근법을 찾고 있습니다. 이식성 및 표준화 A 플러스.

나는 bash를 사용하지만, 당신이 좋아하는 쉘에서도 예를 들어 환영합니다.


여기서 컨텍스트는 수십 개의 실행 파일을 생성하고 파일 시스템 주위에 데이터를 보관하고 환경 변수를 사용하는 대규모 과학 분석 패키지의 여러 버전 (분석을위한 것, 프레임 워크 작업을위한 다른 하나) 사이에서 편리하게 전환 해야하는 것 중 하나입니다. 이 모든 것을 찾는 데 도움이됩니다. 버전을 선택하는 스크립트를 작성하고 싶습니다. $PATH 현재 활성화 된 버전과 관련된 요소 및 새 버전과 관련된 동일한 요소로 바꾸십시오.


이것은 반복 방지 문제와 관련이 있습니다 $PATH 로그인 스크립트 등을 다시 실행할 때 요소.


도움이 되었습니까?

해결책

DMCKEE의 제안 된 솔루션 해결 :

  1. 일부 버전의 bash는 기능 이름의 하이픈을 허용 할 수 있지만 다른 버전은 다른 버전 (MacOS X)은 그렇지 않습니다.
  2. 함수가 끝나기 직전에 리턴을 사용할 필요가 없습니다.
  3. 나는 모든 세미 콜론의 필요성을 보지 못합니다.
  4. 왜 당신이 패턴별로 패턴을 수출하는지 모르겠습니다. 에 대해 생각하다 export 글로벌 변수 설정 (또는 생성)과 동일합니다. 가능할 때마다 피해야 할 사항.
  5. 당신이 무엇을 기대하는지 잘 모르겠습니다 'replace-path PATH $PATH /usr'해야하지만, 내가 기대할 수있는 일을하지는 않습니다.

다음과 같이 시작하는 경로를 고려하십시오.

.
/Users/jleffler/bin
/usr/local/postgresql/bin
/usr/local/mysql/bin
/Users/jleffler/perl/v5.10.0/bin
/usr/local/bin
/usr/bin
/bin
/sw/bin
/usr/sbin
/sbin

내가 얻은 결과 ( 'replace-path PATH $PATH /usr') 이다:

.
/Users/jleffler/bin
/local/postgresql/bin
/local/mysql/bin
/Users/jleffler/perl/v5.10.0/bin
/local/bin
/bin
/bin
/sw/bin
/sbin
/sbin

/usr이 (완전한) 경로 요소로 나타나지 않고 경로 요소의 일부로만 원래의 경로를 되 찾을 것으로 예상했을 것입니다.

이것은 고정 될 수 있습니다 replace-path 하나를 수정하여 sed 명령 :

export $path=$(echo -n $list | tr ":" "\n" | sed "s:^$removestr\$:$replacestr:" |
               tr "\n" ":" | sed "s|::|:|g")

나는 '|'대신 ':' '를 사용했다. '|'이후 대체물의 부분을 분리하기 위해 (이론적으로) 경로 구성 요소에 나타날 수있는 반면, 경로의 정의에 따르면 결장은 할 수 없습니다. 나는 두 번째를 관찰합니다 sed 경로 중간에서 현재 디렉토리를 제거 할 수 있습니다. 즉, 경로의 합법적 인 (불량) 값은 다음과 같습니다.

PATH=/bin::/usr/local/bin

처리 후 현재 디렉토리가 더 이상 경로에 있지 않습니다.

경기를 정박하기위한 비슷한 변화가 적절합니다. path-element-by-pattern:

export $target=$(echo -n $list | tr ":" "\n" | grep -m 1 "^$pat\$")

나는 그것을 전달할 때 주목한다 grep -m 1 표준이 아닙니다 (GNU 확장자이며 MacOS X에서도 사용할 수 있습니다). 그리고 실제로-n 옵션 echo 또한 비표준입니다. 뉴 라인을 에코에서 콜론으로 전환함으로써 추가되는 후행 결장을 간단히 삭제하는 것이 더 나을 것입니다. Path-element-s-pattern은 한 번만 사용되므로 바람직하지 않은 부작용이 있습니다 (그것은 기존의 내보내기 변수로 $removestr), 그것은 몸으로 현명하게 대체 될 수 있습니다. 이것은 공백이나 원치 않는 파일 이름 확장 문제를 피하기 위해 인용문을보다 자유롭게 사용하는 것과 함께 다음과 같이됩니다.

# path_tools.bash
#
# A set of tools for manipulating ":" separated lists like the
# canonical $PATH variable.
#
# /bin/sh compatibility can probably be regained by replacing $( )
# style command expansion with ` ` style
###############################################################################
# Usage:
#
# To remove a path:
#    replace_path         PATH $PATH /exact/path/to/remove
#    replace_path_pattern PATH $PATH <grep pattern for target path>
#
# To replace a path:
#    replace_path         PATH $PATH /exact/path/to/remove /replacement/path
#    replace_path_pattern PATH $PATH <target pattern> /replacement/path
#
###############################################################################

# Remove or replace an element of $1
#
#   $1 name of the shell variable to set (e.g. PATH)
#   $2 a ":" delimited list to work from (e.g. $PATH)
#   $3 the precise string to be removed/replaced
#   $4 the replacement string (use "" for removal)
function replace_path () {
    path=$1
    list=$2
    remove=$3
    replace=$4        # Allowed to be empty or unset

    export $path=$(echo "$list" | tr ":" "\n" | sed "s:^$remove\$:$replace:" |
                   tr "\n" ":" | sed 's|:$||')
}

# Remove or replace an element of $1
#
#   $1 name of the shell variable to set (e.g. PATH)
#   $2 a ":" delimited list to work from (e.g. $PATH)
#   $3 a grep pattern identifying the element to be removed/replaced
#   $4 the replacement string (use "" for removal)
function replace_path_pattern () {
    path=$1
    list=$2
    removepat=$3
    replacestr=$4        # Allowed to be empty or unset

    removestr=$(echo "$list" | tr ":" "\n" | grep -m 1 "^$removepat\$")
    replace_path "$path" "$list" "$removestr" "$replacestr"
}

Perl 스크립트가 호출되어 있습니다 echopath 경로와 같은 변수로 문제를 디버깅 할 때 유용합니다.

#!/usr/bin/perl -w
#
#   "@(#)$Id: echopath.pl,v 1.7 1998/09/15 03:16:36 jleffler Exp $"
#
#   Print the components of a PATH variable one per line.
#   If there are no colons in the arguments, assume that they are
#   the names of environment variables.

@ARGV = $ENV{PATH} unless @ARGV;

foreach $arg (@ARGV)
{
    $var = $arg;
    $var = $ENV{$arg} if $arg =~ /^[A-Za-z_][A-Za-z_0-9]*$/;
    $var = $arg unless $var;
    @lst = split /:/, $var;
    foreach $val (@lst)
    {
            print "$val\n";
    }
}

아래 테스트 코드에서 수정 된 솔루션을 실행할 때 :

echo
xpath=$PATH
replace_path xpath $xpath /usr
echopath $xpath

echo
xpath=$PATH
replace_path_pattern xpath $xpath /usr/bin /work/bin
echopath xpath

echo
xpath=$PATH
replace_path_pattern xpath $xpath "/usr/.*/bin" /work/bin
echopath xpath

출력은 다음과 같습니다.

.
/Users/jleffler/bin
/usr/local/postgresql/bin
/usr/local/mysql/bin
/Users/jleffler/perl/v5.10.0/bin
/usr/local/bin
/usr/bin
/bin
/sw/bin
/usr/sbin
/sbin

.
/Users/jleffler/bin
/usr/local/postgresql/bin
/usr/local/mysql/bin
/Users/jleffler/perl/v5.10.0/bin
/usr/local/bin
/work/bin
/bin
/sw/bin
/usr/sbin
/sbin

.
/Users/jleffler/bin
/work/bin
/usr/local/mysql/bin
/Users/jleffler/perl/v5.10.0/bin
/usr/local/bin
/usr/bin
/bin
/sw/bin
/usr/sbin
/sbin

이것은 적어도 문제가 무엇인지에 대한 나의 정의를 위해 나에게 맞아 보인다.

나는 그것을 주목한다 echopath LD_LIBRARY_PATH 평가합니다 $LD_LIBRARY_PATH. 기능이 그렇게 할 수 있다면 좋을 것입니다. 따라서 사용자가 다음을 입력 할 수 있습니다.

replace_path PATH /usr/bin /work/bin

사용하여 수행 할 수 있습니다.

list=$(eval echo '$'$path)

이것은 코드의 개정으로 이어집니다.

# path_tools.bash
#
# A set of tools for manipulating ":" separated lists like the
# canonical $PATH variable.
#
# /bin/sh compatibility can probably be regained by replacing $( )
# style command expansion with ` ` style
###############################################################################
# Usage:
#
# To remove a path:
#    replace_path         PATH /exact/path/to/remove
#    replace_path_pattern PATH <grep pattern for target path>
#
# To replace a path:
#    replace_path         PATH /exact/path/to/remove /replacement/path
#    replace_path_pattern PATH <target pattern> /replacement/path
#
###############################################################################

# Remove or replace an element of $1
#
#   $1 name of the shell variable to set (e.g. PATH)
#   $2 the precise string to be removed/replaced
#   $3 the replacement string (use "" for removal)
function replace_path () {
    path=$1
    list=$(eval echo '$'$path)
    remove=$2
    replace=$3            # Allowed to be empty or unset

    export $path=$(echo "$list" | tr ":" "\n" | sed "s:^$remove\$:$replace:" |
                   tr "\n" ":" | sed 's|:$||')
}

# Remove or replace an element of $1
#
#   $1 name of the shell variable to set (e.g. PATH)
#   $2 a grep pattern identifying the element to be removed/replaced
#   $3 the replacement string (use "" for removal)
function replace_path_pattern () {
    path=$1
    list=$(eval echo '$'$path)
    removepat=$2
    replacestr=$3            # Allowed to be empty or unset

    removestr=$(echo "$list" | tr ":" "\n" | grep -m 1 "^$removepat\$")
    replace_path "$path" "$removestr" "$replacestr"
}

다음 수정 된 테스트도 이제 작동합니다.

echo
xpath=$PATH
replace_path xpath /usr
echopath xpath

echo
xpath=$PATH
replace_path_pattern xpath /usr/bin /work/bin
echopath xpath

echo
xpath=$PATH
replace_path_pattern xpath "/usr/.*/bin" /work/bin
echopath xpath

이전과 동일한 출력을 생성합니다.

다른 팁

내 대답을 다시 게시합니다 Bash의 $ 경로 변수에서 경로를 제거하는 가장 우아한 방법은 무엇입니까? :

#!/bin/bash
IFS=:
# convert it to an array
t=($PATH)
unset IFS
# perform any array operations to remove elements from the array
t=(${t[@]%%*usr*})
IFS=:
# output the new array
echo "${t[*]}"

또는 하나의 라이너 :

PATH=$(IFS=':';t=($PATH);unset IFS;t=(${t[@]%%*usr*});IFS=':';echo "${t[*]}");

요소를 삭제하려면 SED를 사용할 수 있습니다.

#!/bin/bash
NEW_PATH=$(echo -n $PATH | tr ":" "\n" | sed "/foo/d" | tr "\n" ":")
export PATH=$NEW_PATH

경로에서 "foo"가 포함 된 경로를 삭제합니다.

주어진 라인 전후에 SED를 사용하여 새 라인을 삽입 할 수도 있습니다.

편집 : 정렬 및 Uniq를 통해 배관하여 중복을 제거 할 수 있습니다.

echo -n $PATH | tr ":" "\n" | sort | uniq -c | sed -n "/ 1 / s/.*1 \(.*\)/\1/p" | sed "/foo/d" | tr "\n" ":"

답변에는 몇 가지 관련 프로그램이 있습니다.CSH에서 경로 변수를 복제하는 방법". 그들은 반복되는 요소가 없음을 보장하는 데 더 집중하지만, 내가 제공하는 스크립트는 다음과 같이 사용할 수 있습니다.

export PATH=$(clnpath $head_dirs:$PATH:$tail_dirs $remove_dirs)

$ head_dirs에 하나 이상의 디렉토리와 $ tail_dirs에 하나 이상의 디렉토리가 있고 $ remok_dirs의 하나 이상의 디렉토리가 있다고 가정하면 쉘을 사용하여 헤드, 현재 및 꼬리 부품을 대규모 값으로 연결합니다. 결과에서 $ remove_dirs에 나열된 디렉토리 중 (존재하지 않는 경우 오류가 아님) 경로에서 디렉토리의 두 번째 및 후속 발생을 제거합니다.

이것은 경로 구성 요소를 특정 위치 (시작 또는 끝을 제외하고는 간접적으로 만)로 만드는 것을 다루지 않습니다. 표명적으로, 새 요소를 추가 할 위치 또는 교체 할 요소를 지정하는 것은 지저분합니다.

Bash 자체가 검색 및 교체를 수행 할 수 있다는 메모 만 있습니다. 예상 할 수있는 민감한 옵션을 모두 수행 할 수 있습니다.

Man Page에서 :

$ {매개 변수/패턴/문자열}

패턴은 PathName 확장과 마찬가지로 패턴을 생성하도록 확장됩니다. 매개 변수가 확장되고 값에 대한 가장 긴 패턴 일치는 문자열로 대체됩니다. ipattern이 /로 시작하면 패턴의 모든 일치는 문자열로 대체됩니다. 일반적으로 첫 번째 경기 만 교체됩니다. 패턴이 #로 시작하면 확장 된 매개 변수 값의 시작 부분에서 일치해야합니다. 패턴이 %로 시작되면 확장 된 매개 변수 값의 끝에서 일치해야합니다. 문자열이 null이면 패턴의 일치가 삭제되고 / 다음 패턴이 생략 될 수 있습니다. 매개 변수가 @ 또는 *인 경우 대체 조작이 각 위치 매개 변수에 차례로 적용되고 확장이 결과 목록입니다. 매개 변수가 @ 또는 *로 스크립트 된 배열 변수 인 경우, 대체 조작은 배열의 각 구성원에게 적용되며 확장은 결과 목록입니다.

또한 $ ifs (입력 필드 분리기)를 원하는 구분 기호로 설정하여 필드 분할을 수행 할 수도 있습니다.

자, 모든 응답자에게 감사합니다. Florin의 답변의 캡슐화 된 버전을 준비했습니다. 첫 번째 패스는 다음과 같습니다.

# path_tools.bash
#
# A set of tools for manipulating ":" separated lists like the
# canonical $PATH variable.
#
# /bin/sh compatibility can probably be regained by replacing $( )
# style command expansion with ` ` style
###############################################################################
# Usage:
#
# To remove a path:
#    replace-path         PATH $PATH /exact/path/to/remove    
#    replace-path-pattern PATH $PATH <grep pattern for target path>    
#
# To replace a path:
#    replace-path         PATH $PATH /exact/path/to/remove /replacement/path   
#    replace-path-pattern PATH $PATH <target pattern> /replacement/path
#    
###############################################################################
# Finds the _first_ list element matching $2
#
#    $1 name of a shell variable to be set
#    $2 name of a variable with a path-like structure
#    $3 a grep pattern to match the desired element of $1
function path-element-by-pattern (){ 
    target=$1;
    list=$2;
    pat=$3;

    export $target=$(echo -n $list | tr ":" "\n" | grep -m 1 $pat);
    return
}

# Removes or replaces an element of $1
#
#   $1 name of the shell variable to set (i.e. PATH) 
#   $2 a ":" delimited list to work from (i.e. $PATH)
#   $2 the precise string to be removed/replaced
#   $3 the replacement string (use "" for removal)
function replace-path () {
    path=$1;
    list=$2;
    removestr=$3;
    replacestr=$4; # Allowed to be ""

    export $path=$(echo -n $list | tr ":" "\n" | sed "s|$removestr|$replacestr|" | tr "\n" ":" | sed "s|::|:|g");
    unset removestr
    return 
}

# Removes or replaces an element of $1
#
#   $1 name of the shell variable to set (i.e. PATH) 
#   $2 a ":" delimited list to work from (i.e. $PATH)
#   $2 a grep pattern identifying the element to be removed/replaced
#   $3 the replacement string (use "" for removal)
function replace-path-pattern () {
    path=$1;
    list=$2;
    removepat=$3; 
    replacestr=$4; # Allowed to be ""

    path-element-by-pattern removestr $list $removepat;
    replace-path $path $list $removestr $replacestr;
}

여전히 모든 기능에서 오류 가로막이 필요하며, 내가 그 동안 반복되는 경로 솔루션에 고착해야 할 것입니다.

당신은 그것을 수행하여 그것을 사용합니다 . /include/path/path_tools.bash 작업 스크립트에서 replace-path* 기능.


나는 여전히 새로운 및/또는 더 나은 답변에 개방되어 있습니다.

awk를 사용하는 것은 쉽습니다.

바꾸다

{
  for(i=1;i<=NF;i++) 
      if($i == REM) 
          if(REP)
              print REP; 
          else
              continue;
      else 
          print $i; 
}

사용하여 시작하십시오

function path_repl {
    echo $PATH | awk -F: -f rem.awk REM="$1" REP="$2" | paste -sd:
}

$ echo $PATH
/bin:/usr/bin:/home/js/usr/bin
$ path_repl /bin /baz
/baz:/usr/bin:/home/js/usr/bin
$ path_repl /bin
/usr/bin:/home/js/usr/bin

추가

주어진 위치에 삽입됩니다. 기본적으로 끝에 추가됩니다.

{ 
    if(IDX < 1) IDX = NF + IDX + 1
    for(i = 1; i <= NF; i++) {
        if(IDX == i) 
            print REP 
        print $i
    }
    if(IDX == NF + 1)
        print REP
}

사용하여 시작하십시오

function path_app {
    echo $PATH | awk -F: -f app.awk REP="$1" IDX="$2" | paste -sd:
}

$ echo $PATH
/bin:/usr/bin:/home/js/usr/bin
$ path_app /baz 0
/bin:/usr/bin:/home/js/usr/bin:/baz
$ path_app /baz -1
/bin:/usr/bin:/baz:/home/js/usr/bin
$ path_app /baz 1
/baz:/bin:/usr/bin:/home/js/usr/bin

복제물을 제거하십시오

이것은 첫 번째 발생을 유지합니다.

{ 
    for(i = 1; i <= NF; i++) {
        if(!used[$i]) {
            print $i
            used[$i] = 1
        }
    }
}

다음과 같이 시작하십시오.

echo $PATH | awk -F: -f rem_dup.awk | paste -sd:

모든 요소가 존재하는지 확인하십시오

다음은 파일 시스템에 존재하지 않는 모든 항목에 대한 오류 메시지를 인쇄하고 0이 아닌 값을 반환합니다.

echo -n $PATH | xargs -d: stat -c %n

모든 요소가 경로인지 확인하고 리턴 코드를 얻으려면 test:

echo -n $PATH | xargs -d: -n1 test -d

가정하다

echo $PATH
/usr/lib/jvm/java-1.6.0/bin:lib/jvm/java-1.6.0/bin/:/lib/jvm/java-1.6.0/bin/:/usr/lib/qt-3.3/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tvnadeesh/bin

/lib/jvm/java-1.6.0/bin/를 제거하려면 아래와 같이하십시오.

export PATH=$(echo $PATH | sed  's/\/lib\/jvm\/java-1.6.0\/bin\/://g')

sed 입력을받습니다 echo $PATH /lib/jvm/java-1.6.0/bin/을 비워 두십시오

이런 식으로 제거 할 수 있습니다

  • 경로의 순서는 지적되지 않습니다
  • 빈 길과 같은 코너 케이스, 우아하게 경로의 공간을 처리합니다.
  • DIR의 부분 일치는 잘못된 긍정적 인 것을 제공하지 않습니다
  • 경로의 경로를 적절한 방법으로 처리합니다. 아니 : 쓰레기 등.

/foo :/some/path :/some/path/dir1 :/some/path/dir2 :/bar가 있다고 가정하면/some/path를 교체하려면 "/some/path"를 올바르게 대체하지만 "/잎을 올바르게 대체합니다. 예상대로 일부/path/dir1 "또는"/some/path/dir2 ".

function __path_add(){  
    if [ -d "$1" ] ; then  
        local D=":${PATH}:";   
        [ "${D/:$1:/:}" == "$D" ] && PATH="$PATH:$1";  
        PATH="${PATH/#:/}";  
        export PATH="${PATH/%:/}";  
    fi  
}
function __path_remove(){  
    local D=":${PATH}:";  
    [ "${D/:$1:/:}" != "$D" ] && PATH="${D/:$1:/:}";  
    PATH="${PATH/#:/}";  
    export PATH="${PATH/%:/}";  
}  
# Just for the shake of completeness
function __path_replace(){  
    if [ -d "$2" ] ; then  
        local D=":${PATH}:";   
        if [ "${D/:$1:/:}" != "$D" ] ; then
            PATH="${D/:$1:/:$2:}";  
            PATH="${PATH/#:/}";  
            export PATH="${PATH/%:/}";  
        fi
    fi  
}  

관련 게시물Bash의 $ 경로 변수에서 경로를 제거하는 가장 우아한 방법은 무엇입니까?

요즘 Ruby를 사용하는 것을 선호합니다. 요즘에는 awk/sed/foo와 같은 선호합니다.

# add it to the path
PATH=~/bin/:$PATH:~/bin
export PATH=$(ruby -e 'puts ENV["PATH"].split(/:/).uniq.join(":")')

재사용 기능을 작성하고

mungepath() {
   export PATH=$(ruby -e 'puts ENV["PATH"].split(/:/).uniq.join(":")')
}

해시, 배열 및 문자열에 루비 하나의 라이너 :)

줄의 일부만 바꾸기 위해 머리에 튀어 나오는 첫 번째 것은 SED 대체입니다.

예 : Echo $ path => "/usr/pkg/bin :/usr/bin :/bin :/usr/pkg/games :/usr/pkg/x11r6/bin"을 "/usr/bin"으로 변경합니다. "/usr/local/bin"은 다음과 같이 수행 할 수 있습니다.

## 표준 출력 파일을 생성합니다

## "="문자는 슬래시 대신에 사용됩니다 ( "/")는 지저분하므로 대체 인용 문자는 경로에 없어야합니다.

## 경로 분리기 문자 ":"여기에서 제거되고 다시 추가되어 있습니다. # 마지막 경로 후에 추가 결장을 원할 수도 있습니다.

에코 $ 경로 | sed '=/usr/bin : =/usr/local/bin : ='

이 솔루션은 전체 경로 요소를 대체하므로 새로운 요소가 비슷한 경우 중복 될 수 있습니다.

새로운 Path'-S가 역동적이지 않지만 항상 일정한 세트 내에있는 경우 저장할 수 있습니다. 저것들 변수에서 필요에 따라 할당하십시오.

경로 = $ temp_path_1; # 명령 ...; n 경로 = $ temp_path_2; # 명령 등 ...;

당신이 생각했던 것이 아닐 수도 있습니다. Bash/Unix의 관련 명령 중 일부는 다음과 같습니다.

단일 열에 대해 푸드 팝드 CD ls # # 아마도 l -1a; 파일이 당신이 생각했던 곳을 확인할 수있는 #을 찾으십시오. Env 유형

.. 그리고 그 모든 것들이 있습니다 약간 일반적으로 경로 또는 디렉토리에 영향을 미칩니다. 텍스트 변경 부분은 여러 가지 방법으로 수행 할 수 있습니다!

선택한 솔루션은 4 가지 부분을 가질 수 있습니다.

1) 경로 가져 오기 2) 변경이 필요한 부품을 찾기 위해 경로를 디코딩하여 변경 사항 결정/변경 사항 결정 4) 검증/최종 통합/변수 설정

일치합니다 DJ_SEGFAULT의 답변, 나는 여러 번 실행될 수있는 환경 변수를 추가/선출하는 스크립트 에서이 작업을 수행합니다.

ld_library_path=${ORACLE_HOME}/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH//${ld_library_path}?(:)/}
export LD_LIBRARY_PATH=${ld_library_path}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

이 동일한 기술을 사용하여 PATH에서 항목을 제거, 교체 또는 조작하는 것은 파일 이름-확장과 같은 패턴 매칭 및 쉘 매개 변수 확장의 패턴리스트 지원을 고려할 때 사소한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top