bashrc는 어떤 언어로 작성되나요?

bashrc는 어떤 언어로 작성되나요?

나는 한 사람을 만났다멋진 방법.bashrc 파일에 기능을 추가하여 두 개 이상의 디렉터리 수준으로 이동하세요.

.bashrc 파일을 열고 다음 함수를 삽입하세요.

#user defined functions
function cd_up() {
  cd $(printf "%0.s../" $(seq 1 $1 ));
}
alias 'cd..'='cd_up'

어떻게 읽는지 알고 싶습니다.

어떤 언어로 쓰여 있나요?

답변1

의 내용은 .bashrc스크립트나 대화형 셸을 실행하는 것처럼 Bash 자체에 의해 실행됩니다. 이는 많은 확장 기능을 갖춘 POSIX 쉘 언어의 변형입니다(일부는 주로 Ksh와 같은 다른 쉘에서 빌려왔고 일부는 Bash 자체에서 생성됨).

여기서는 function cd_up() { ... ; }함수가 정의됩니다. 표준 형식은 키워드 cd_up() { ... ; }없이 입니다 function. 이는 $(...)내부적으로 명령을 실행하고 해당 출력을 명령줄 인수로 사용하는 명령 대체입니다.

이것이 printf "%0.s../"바로 비결입니다. printf형식 문자열(C 함수와 유사) printf()과 형식 문자열을 사용하여 인쇄되는 여러 인수를 허용합니다. 중요한 점은 모든 인수를 사용하는 데 필요한 만큼 형식 문자열을 반복한다는 점입니다(C 함수는 이를 수행하지 않으며 수행할 수도 없습니다). 지정자는 %0.s인수를 너비가 0인 문자열로 인쇄하도록 지시하므로 실제로 인수는 다음과 같습니다.아니요인쇄.

하지만 변함없는 부분../ 각 인수에 대해 한 번 인쇄합니다. 즉, printf "%0.s../" a b두 번 인쇄됩니다. 이는 $(seq 1 $1)또 다른 명령 대체이며 seq숫자 목록이 인쇄되므로 필요한 수의 인수를 제공하는 데 사용됩니다 printf. $1현재 함수의 첫 번째 매개변수입니다 cd_up.

예를 들어 cd_up 2먼저 실행 seq 1 2하고 인쇄합니다 1 2. 이는 매개변수로 전달되므로 어느 것이 인쇄되는지 printf얻을 수 있습니다 . 디렉터리 트리에서 두 수준 위로 전달되어 실행 됩니다 .printf "%0.s../" 1 2../../cdcd ../../

를 사용하면 set -x쉘이 실제로 실행하는 명령을 볼 수 있습니다. Bash는 다음 표기법으로 중첩 수준을 나타냅니다 +.

/tmp/foo$ set -x
/tmp/foo$ cd_up 2
+ cd_up 2
+++ seq 1 2
++ printf %0.s../ 1 2
+ cd ../../
/$

별거 아니니 참고하세요무엇출력은 seq올바른 수의 단어를 가지고 있다는 것입니다. 명령 대체가 인용되지 않았기 때문에 출력은 다음과 같이 진행됩니다.분사, 이는 공백에서 여러 인수로 분할됨을 의미합니다. printf "%0.s../" "$(seq 1 $1)"항상 형식 문자열 뒤에 하나의 인수만 전달하십시오. (링크된 페이지의 예를 참조하세요.)


유사한 함수를 작성하지만 기술이 덜 필요한 또 다른 방법은 간단한 루프를 사용하는 것입니다. 거의 POSIX sh에 있습니다( localPOSIX 아님):

cd_up() {
   local i=$1 
   while [ "$i" -gt 0 ]; do 
      cd ..
      i=$((i - 1))
   done
}

또는 Bash/Zsh에서는 연산 for 루프를 사용합니다.

cd_up() { 
    local i
    for (( i=$1; i > 0; i-- )); do 
        cd ..
    done
}

버전은 한 번만 실행되므로 중간 디렉터리가 아닌 원래 디렉터리로 돌아가기 때문에 printf더 좋습니다 . (이 문제를 해결하는 것은 연습문제로 남습니다.)cdcd -

쉘 언어에 대한 리소스는 다음을 참조하세요.

답변2

bashrc는 bash가 대화형으로 시작될 때마다 실행되는 bash 스크립트입니다.

관련 정보