별칭의 경로를 동적으로 변경하는 방법은 무엇입니까?

별칭의 경로를 동적으로 변경하는 방법은 무엇입니까?

내 파일에 .cshrc경로를 사용하는 별칭이 많이 있습니다.

/projects/project_name/my_name/$CLIENT

작업 디렉터리 경로에서 폴더 이름을 가져와 다양한 별칭에 사용하기 위해 환경 변수에 저장하도록 설계된 짧은 스크립트를 작성했습니다.

set client_name = `echo $PWD | awk -F / '{ print $5; }' | xargs`

setenv CLIENT $client_name  

source ~/.cshrc   

현재 문제는 런타임 환경 변수가 이전 값에서 업데이트되지 않는다는 것입니다. 불행하게도 C 셸은 Bash(잠재적 대안)에서와 같은 기능 사용을 지원하지 않습니다.

명령줄에서 변수를 업데이트하려면 어떻게 해야 합니까? 이를 달성하는 더 좋은 방법이 있습니까?

감사해요

답변1

$5작업 디렉터리 경로() 에 5개의 변수가 없기 때문에 스크립트에서 빈 문자열을 입력할 수 있지만 pwd입력 문자열을 보지 않고는 알기 어렵습니다. 이 문제에 대해 추가 도움이 필요한 경우 추가 정보로 질문을 업데이트하고 awk전송하려는 입력이 어떤 것인지 보여주어야 합니다.

별칭을 동적으로 만드는 방법이 있는지는 모르겠지만 간단히 각 별칭을 bash 함수로 변환할 수 있습니다. Bash 함수는 변수 , , ... 등에 funct_name () {commands}저장된 인수도 허용하는 형식을 취합니다 . 따라서 동적 데이터를 매개변수로 읽는 bash 함수를 생성할 수 있습니다. 예를 들어:$1$2$3

test () {
  echo $1
}

다음과 같이 동작합니다:

$ test abc
abc
$ test foobar
foobar

이 방법을 echo사용 $1하면 $CLIENT.가지다각 별칭을 bash 함수로 다시 만들고 그런 식으로 매개변수를 사용하세요.

귀하가 제공한 예제 명령을 보면 작업 디렉터리 경로에서 폴더 이름을 가져와 환경 변수에 저장하여 다양한 별칭으로 사용하는 것처럼 보입니다. 이 작업을 수행하기 위해 bash 함수를 만들면 됩니다. 예를 들어, 작업 디렉터리의 경로를 가져오는 bash 함수는 다음과 같습니다.첫 번째폴더 이름(네 번째가 필요한 것 같으니 변경하세요)을 $TEST환경 변수에 저장합니다.

test () {
  var=$(pwd | awk -F / '{ print $2; }')
  export TEST=$var
}

이 기능을 항상 사용할 수 있도록 하려면 위의 내용을 .bashrc파일에 추가하세요. 새 터미널 창을 시작할 때마다 test이 명령을 사용할 수 있습니다 . 현재 작동 중인 터미널에 추가하려면(새 터미널을 열 필요 없이) 다음을 실행하세요 source ~/.bashrc. 그런 다음 터미널에서 명령처럼 함수를 실행할 수 있습니다. 을 실행하면 test환경 변수가 업데이트되고 alias 명령이 작동합니다. 실제적인 예는 다음과 같습니다.

$ pwd
/home/user
$ echo $TEST

$ test
$ echo $TEST
home

깨닫다:명령은 작업 중인 디렉터리에 따라 다릅니다. 폴더를 루트로 변경하면 $TEST첫 번째 슬래시 뒤에 문자열이 없기 때문에 내 예제에서는 거기에 빈 문자열을 넣습니다. 이것이 아마도 awk귀하의 경우 빈 문자열이 인쇄되는 이유일 것입니다. 그러나 입력 데이터를 보지 않고서는 확실히 알 수 없습니다.

답변2

디렉토리가 변경될 때마다 cd변수를 업데이트하는 별칭을 추가하는 것을 고려해 보십시오.$CLIENT

alias cd 'cd \!*; set client_name = `echo $PWD | awk -F / '\''{ print $5; }'\'' | xargs`; setenv CLIENT $client_name'

물론 여기에는 단점도 있습니다. 예를 들어 유사한 별칭을 사용하여 이 문제를 해결할 수는 있지만 pushdor 에서는 작동하지 않습니다 . popd내가 완전히 고려하지 않은 다른 특수 사례가 있을 수 있습니다.

또한 cshrc 파일에 보관하는 별칭이 실제로 별칭인지 여부도 고려하세요.필요별칭이 됩니다. 어떤 방식으로든(변수를 설정하거나 디렉터리를 변경하여) 셸 환경을 수정하지 않는 한 독립형 셸 스크립트일 가능성이 높습니다. 이 경우 실제로 기능을 지원하는 쉘을 사용하여 작성할 수 있습니다.

답변3

마지막으로 내 해결책은 스크립트를 사용하여 $CLIENT변수를 내 별칭에 전달하는 것이었습니다.

예:

이 스크립트에서 클라이언트 디렉터리를 찾으려면 find_client.sh이 메서드를 만들고 사용하세요. echo $PWD | awk -F / '{ print $5; }' | xargs전체 경로를 추가하여 출력을 에코합니다.

다음과 같이 별칭( 파일) .cshrc에 별칭을 만듭니다 .

alias wk 'cd `find_client.sh`'

지금까지는 예상대로 작동하는 것 같습니다.

관련 정보