path를 다루는 shell 1: dirs, pushd, popd, dirname, basename, pwd

markyang92·2021년 5월 26일
0

shell-script

목록 보기
11/19

dirs: 디렉토리 스택 출력

  • 홈디렉토리~(틸트) 처리 디렉토리 스택을(dirs stack) 출력
  • 디렉토리 스택: 거쳐갔거나 pushd, popd로 제어한 stack

dirs -l

  • 현재 디렉토리 스택(dirs stack)을 출력(/home도 자세히)


dirs -v: 레벨 보여줌

  • dirs 스택 레벨

    주의!!! -vl 통합 옵션은 zsh에서만 사용가능하고 bash쉘에선 XXX

dirs +N/-N

  • STDOUT으로 출력되는 dirs에서 +N일 경우 왼쪽부터 0번으로 시작하는 idx
$ dirs -l -v
 0  /home/dhyang/workspace/scripts
 1  /home/dhyang/workspace/scripts/rsync
 
$ dirs -l +0
/home/dhyang/workspace/scripts

pushd

$ pushd [LOCATION]
  • pushd디렉토리 스택argument로 준 위치를 1)push!! 하고 2)디렉토리 스택 출력
  1. 아규먼트주지 않을 때

    아규먼트를 주지 않고 그냥 $ pushd 명령을 내리면 현재 위치디렉토리 스택push!! 후 디렉토리 스택 출력

  1. $ pushd ~/snap: 디렉토리 스택~/snappush

    아규먼트로 준위치를 디렉토리 스택에 추가하고 디렉토리 스택 출력

  1. 쉘스크립트 내에서 $0과 사용 시


  1. 디렉토리 stack에 insert하기만 하고, 출력되는 STDOUT은 안보고 싶을 때
$ pushd > /dev/null
$ pushd `dirname pwd -P` > /dev/null
  • /dev/null로 버리자

popd

$ popd [LOCATION]
  • popd디렉토리 스택pop! 하고 디렉토리 스택 출력
    $ popd 명령을 내리면 디렉토리 스택 젤 위 내용 pop!하고 디렉토리 스택 출력

현재 쉘 위치 변수에 넣기

$HOME/workspace/scripts/rsync/rsync_script.sh

======== rsync_script.sh ========
#!/bin/bash

pushd `dirname $0` > /dev/null
WORKING_DIR=`dirs -l +0`
popd > /dev/null

echo $WORKING_DIR
=================================

$ ./rsync_script.sh
/home/dhyang/workspace/scripts/rsync

basename $X

  • os.path.basename( )와 같음

dirname $X

  • $X로 준 path의 dirname 까지의 path출력
  • os.path.dirname( )와 같음

지정 위치를 dir스택에 넣고/이동 출력 X

  • 예 1
  1. dirname $X의 결과는 아규먼트의 부모 디렉토리를 표준 출력한다.
  2. 표준 출력결과인 아규먼트의 부모 디렉토리pushd명령의 인자로 넣는다.
  3. $ pushd 결과 아규먼트를 디렉토리 스택에 push하고 디렉토리 스택을 표준 출력한다.
  4. 하지만 이 표준 출력은 > /dev/null리다이렉트되어 씹힌다.
  5. 그런데 $ pushd 아규먼트 로 이동된다.
    주의!! 쉘 스크립트 내에서 실행이동하지 않음

  • 예 2

pwd

  • printworkingdirectory
  • 현재 워킹 디렉토리를 STDOUT으로 출력한다.
    $ pwd = $ echo $PWD

pwd -P

  • pwd -P 옵션은 절대경로(그런데 디폴트로 절대 경로인 듯?)
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글