cd 및 ls에 대한 별명을 작성하는 방법


32

ls명령을 실행 한 후 명령을 자주 실행합니다 cd. cs이 작업에 대한 별칭 (예 :)을 어떻게 만들 수 있습니까?

답변:


35

에서 배쉬 팁과 트릭 : 스타일 'CD' :

마지막으로 'cd'명령에 대한 사용자 정의 대체 작성 방법을 보여 드리고자합니다.

디렉토리로 변경할 때 항상 같은 것을 입력합니까? 적어도 매번 거기에 파일을 나열하십시오. 매번 'cd'마다 손이 'ls'를 자동으로 입력 할 수 있습니다.

글쎄, 내가 생각할 수있는 모든 방법을 시도함으로써, 우리가 추구하는 목표를 올바르게 달성 할 수있는 유일한 방법이 있다는 것이 밝혀졌습니다. 쉘 함수를 만들어야합니다.

쉘 함수는 쉘 프로그래밍의 일부입니다. 컴파일 된 프로그래밍 언어와 마찬가지로 함수는 일종의 절차 적 모듈화 기능을 제공합니다. 일반적으로 사용되는 논리 또는 다른 파라미터로 계산을 수행하는 일반 함수를 생성 할 수 있습니다. 이 경우 매개 변수는 현재 작업 디렉토리입니다.

다음은 간단한 것입니다.

function cs () {
    cd $1
    ls
}

@geirha가 corretly가 지적한 것처럼 이름에 공백이있는 디렉토리로 전환하려고하면 위 기능이 실패합니다.

$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>  

대신 다음 기능을 사용해야합니다.

function cs () {
    cd "$@" && ls
    }

해당 코드를에 추가하면 다음 ~/.bashrc을 수행 할 수 있습니다.

hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$

1
공백이 포함 된 디렉토리에서는 실패합니다. dv3500ea의 답변에 대한 의견을 참조하십시오.
geirha

24

builtinbash에서 다음 명령을 사용할 수 있습니다 .

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}

2
꽤 매끈하다. 나는 .bashrc에서 @Florian과 비슷한 솔루션을 오랫동안 가지고 있었지만 동료가 컴퓨터에 내 'cs'별칭이 없다는 것을 잊었을 때 훨씬 더 만족 스럽다.
dino

이 답변이 가장 좋습니다. 어떤 이유로 든 명령을 덮어 쓰기 위해 별칭을 사용할 수 없으므로이 답변과 같은 기능을 수행해야합니다. : D
trusktr

그러나 내장되지 않은 명령은 어떻습니까? 예를 들어, 위의 ls 명령을 덮어 쓰면 작동하지 않습니다. "내장"대신 사용할 키워드가 있습니까?
trusktr

전체 경로를 사용하십시오. 예 :function ls() { /usr/bin/ls $* }
OneOfOne

내 정의도 변경 cd하기 때문에 재정의하는 데 문제가있었습니다 . 참조 stackoverflow.com/a/19941991/1601989rvmcd
DavidG


9

기능을 사용하는 데 도움 을 준 Florian Diesch 에게 감사드립니다 . csound 패키지에 명령 cs이 있기 때문에 이름으로 사용할 수 없으므로을 사용했습니다 .cslc

나는 이것을 ~/.bash_aliases( nano ~/.bash_aliases)에 추가했다 .

function lc () {
    cd $1;
    ls 
}

reset이를 적용하려면 터미널이 필요합니다 .


8
$1디렉토리가 공백이 포함 된 경우처럼 인용 부호로 둘러싸이지 않은 것은 실패 할 것이다. 또한 cd; 의 반환 값을 확인해야합니다 . 실패한 경우 (예 : 권한 거부)을 실행할 필요가 없습니다 ls. lc() { cd "$@" && ls; }
geirha

1

이 함수를 확장하면 다음 과 같이 대신 cs() { cd "$1" && ls; }함수 cd를 사용하여 모든 함수의 인수를 전달할 수 있습니다 .$@"$1"cs() { cd $@ && ls; }


1

내 정의도 변경 cd하기 때문에 재정의하는 데 문제가있었습니다 . https://stackoverflow.com/a/19941991/1601989를 참조 하십시오 . 나는 그것이 하고있는 것을 건너 뛸 것이기 때문에 실제로 사용하고 싶지 않았습니다 .rvmcdbuiltinrvm

나는 내 다음을 추가했습니다 .bashrc:

# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
  if [[ $# -eq 0 ]]; then
    cd
  elif [[ -d "$*" ]]; then
    cd "$*"
  elif [[ -f "$*" ]]; then
    echo "WARNING: file given, cd to file's dirname" 1>&2
    local dir=$(dirname "$*")
    cd "$dir"
  else
    cd "$*"
  fi
}

function cs()
{
  cdd $* && ls
}

그런 다음 rmv줄에 다음과 같이 입력 하십시오 .bashrc.

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.