내 파일에 .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'
물론 여기에는 단점도 있습니다. 예를 들어 유사한 별칭을 사용하여 이 문제를 해결할 수는 있지만 pushd
or 에서는 작동하지 않습니다 . popd
내가 완전히 고려하지 않은 다른 특수 사례가 있을 수 있습니다.
또한 cshrc 파일에 보관하는 별칭이 실제로 별칭인지 여부도 고려하세요.필요별칭이 됩니다. 어떤 방식으로든(변수를 설정하거나 디렉터리를 변경하여) 셸 환경을 수정하지 않는 한 독립형 셸 스크립트일 가능성이 높습니다. 이 경우 실제로 기능을 지원하는 쉘을 사용하여 작성할 수 있습니다.
답변3
마지막으로 내 해결책은 스크립트를 사용하여 $CLIENT
변수를 내 별칭에 전달하는 것이었습니다.
예:
이 스크립트에서 클라이언트 디렉터리를 찾으려면 find_client.sh
이 메서드를 만들고 사용하세요. echo $PWD | awk -F / '{ print $5; }' | xargs
전체 경로를 추가하여 출력을 에코합니다.
다음과 같이 별칭( 파일) .cshrc
에 별칭을 만듭니다 .
alias wk 'cd `find_client.sh`'
지금까지는 예상대로 작동하는 것 같습니다.