BASH 기술: dir 스택.
5841 단어 bashshellprogramminglinux
험난한 길
명령줄을 사용할 때 흔히 볼 수 있는 것은 자신이 한 디렉터리에 있다는 것을 발견하지만, 다른 디렉터리의 일부 내용을 신속하게 검사해야 한다는 것이다.다른 디렉터리의 하위 디렉터리에서 뭔가를 봐야 할지도 모른다.당신이 완성한 후, 당신은 어떻게 당신이 시작한 곳으로 돌아갑니까?
Go 응용 프로그램을 개발 중인 경우
~/go/src/github.com/cpu/someproject
와 하위 디렉토리config fragments/etc/mysql/
를 검사하여 MySQL을 구성하는 방법을 알려주고 싶습니다.가장 직접적인 방법은
/etc/mysql/my.cnf.d
:daniel@noir:~/go/src/github.com/cpu/someproject $> cd /etc/mysql/
daniel@noir:/etc/mysql $> ls -l
total 8
-rw-r--r-- 1 root root 208 Jan 25 09:21 my.cnf
drwxr-xr-x 2 root root 4096 Feb 2 12:57 my.cnf.d
daniel@noir:/etc/mysql $> # Oh wait, I need to check the fragments in my.cnf.d
daniel@noir:/etc/mysql $> cd my.cnf.d
daniel@noir:/etc/mysql/my.cnf.d $> # Nope! Didn't find what I wanted, guess I need to check the base `my.cnf`.
daniel@noir:/etc/mysql/my.cnf.d $> cd ..
daniel@noir:/etc/mysql $> # Aha! That had what I needed! Back to work
daniel@nori:/etc/mysql $> cd ~/go/src/github.com/cpu/someproject
daniel@noir:~/go/src/github.com/cpu/someproject $>
이것은 네 개의 독립된 cd
명령이다!더 심각한 것은 내가 프로젝트로 돌아가는 전체 경로를 기억해야 한다는 것이다.깊이 박힌 디렉터리가 있는 더 복잡한 예를 상상할 수 있습니다. 이 문제들은 더욱 뚜렷합니다.이것이 바로 내가 BASH 디렉터리 창고의 정보 광고에서 더빙한 것이다. "당연히 더 좋은 방법이 있지!"간단한 방법
물론 정답은 the BASH directory stack!그것의 작업 원리는 당신이 이미 익숙해졌을 수도 있는 다른 어떤 것stack datastructure과 같다.스택 상단에서 항목을 추가하고 삭제하면 상단과 상대적인 위치에 따라 스택의 낮은 다른 항목을 인용할 수 있습니다.
cd
를 사용하여 스택에 디렉토리를 추가할 수 있습니다.cd
명령은 상대 경로와 절대 경로를 수락합니다.맨 위에 있는 디렉터리를 삭제하고 pushd
명령을 사용하여 자동으로 pushd
삭제할 수 있습니다.마지막으로 cd
를 사용하여 현재 디렉터리 스택을 볼 수 있습니다.나는 popd
자신의 줄에서 모든 창고 항목을 보는 것을 더욱 좋아한다. 그 중에서 디지털 인덱스 dirs
는 창고의 맨 윗부분, dirs -v
는 맨 윗부분부터 시작하는 첫 번째 등이다.우리는 이전의 예시로 돌아가서 이 점을 이해하지만, 이번에는 디렉터리 창고를 사용할 것이다.
daniel@noir:~/go/src/github.com/cpu/someproject $> pushd /etc/mysql/
daniel@noir:/etc/mysql $> ls -l
total 8
-rw-r--r-- 1 root root 208 Jan 25 09:21 my.cnf
drwxr-xr-x 2 root root 4096 Feb 2 12:57 my.cnf.d
daniel@noir:/etc/mysql $> # Oh wait, I need to check the fragments in my.cnf.d
daniel@noir:/etc/mysql $> pushd my.cnf.d
daniel@noir:/etc/mysql/my.cnf.d $> # Nope! Didn't find what I wanted, guess I need to check the base `my.cnf`.
daniel@noir:/etc/mysql/my.cnf.d $> popd
daniel@noir:/etc/mysql $> # Aha! That had what I needed! Back to work
daniel@nori:/etc/mysql $> popd
daniel@noir:~/go/src/github.com/cpu/someproject $>
이게 더 쉬워!당신은 내가 두 가지 방식으로 사용하는 것을 볼 수 있습니다 0
. 하나는 절대 경로 1
와 하나는 상대 경로 pushd
.나는 pushd /etc/mysql/
내가 변경한 디렉터리에서 되돌아올 수 있다. 나는 내가 되돌아오고 싶은 이전 디렉터리에 대한 어떤 정보도 기억할 필요가 없다.두 번째
pushd my.cnf.d
이후에 popd
에서 dirs -v
까지 실행할 경우 스택은 다음과 같습니다. 0 /etc/mysql/my.cnf.d
1 /etc/mysql
2 ~/go/src/github.com/cpu/someproject
스크립트 작성
내가 자주 사용하는 BASH 디렉터리 창고의 또 다른 곳은 소형 BASH 스크립트에 있다.보통 나는 특정한 디렉터리에서 명령을 실행해야 하지만, 그 후에 다른 디렉터리로 돌아가고 싶다.한 가지 방법은 스크립트의
pushd
명령을 세밀하게 균형 있게 조정하는 것이다.#!/usr/bin/env bash
# Sort some input data into an output directory
cat input/day1/data.csv | cut -f, -d1 | sort > output/day1/sorted.data.csv
# Change to the output directory
cd output/day1
# Run some tool that looks for *.csv files in the current directory
summaryTool -q -v
# Change back to the directory the script is being run in
cd ../../
이 각본은 매우 취약하다.나중에 my.cnf.d
디렉터리가 필요하지 않다고 결정하고 cd
명령과 첫 번째 day1
를cat input/data.csv | cut -f, -d1 | sort > output/sorted.data.csv
cd output/
첫 번째cat
와 두 번째cd
사이에 명령이 많으면 의외로 하나만 업데이트하기 쉽다.이런 상황이 발생하면 두 번째 디렉터리cd
는 첫 번째 디렉터리와 동기화되지 않고 한 디렉터리를 너무 멀리 되돌려줍니다.읊다, 읊조리다cd
및 cd ../../
를 사용하면 이 오류를 제거할 수 있습니다.#!/usr/bin/env bash
# Sort some input data into an output directory
cat input/day1/data.csv | cut -f, -d1 | sort > output/day1/sorted.data.csv
# Change to the output directory
pushd output/day1
# Run some tool that looks for *.csv files in the current directory
summaryTool -q -v
# Change back to the directory the script is being run in
popd
(일을 더 잘 알기 위해 나는 pushd
과popd
사이에서 명령을 움츠러들곤 한다.)pushd
를 사용하면 DRY principle 를 받아들일 수 있고 두 개의 단독 popd
명령 사이에 정보를 복사하지 않습니다.결론
명령행을 사용할 때 하루 동안
popd
, cd
, pushd
, popd
을 사용해 보세요.자신이 사용하고 있는 것을 발견하면 dirs
자신의 생활이 더욱 가벼워질 수 있는지 물어보세요.연습을 통해 BASH 디렉터리 스택을 매우 좋아한다는 것을 알 수 있습니다. cd
에 추가할 수 있습니다. (-)
Reference
이 문제에 관하여(BASH 기술: dir 스택.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cpu/bash-tricks-the-dir-stack-4mei텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)