추가 작업을 수행하기 위해 터미널 명령을 수정할 수 있습니까?


8

별칭, 함수를 살펴 봤지만 만족스러운 것은 없었습니다. 몇 가지 시나리오를 알려 드리겠습니다.

  • cd폴더에 넣은 횟수의 95 %가 ls 명령을 따릅니다 .
  • 시간의 90 % I mkdir, I cd나 자신이에.

당신은 아이디어를 얻습니다.

이 명령들을 함께 묶는 가장 깨끗한 방법은 무엇입니까?


5
별칭이 효과가없는 이유는 무엇입니까?
Thorbjørn Ravn Andersen

2
mkdir의 cd 결과가 ls에 고정되어야합니까?
bmike

@bmike 글쎄, 새로 생성 된 디렉토리는 비어 있기 때문에 ls는 아무것도 출력하지 않습니다.
Random832

@ Random832 당신은 ls에 플래그가 없다고 가정하지만, 더 중요한 것은 내 질문에 변경이 얼마나 부러 지거나 무거워 졌는지 밝힐 것입니다. 함수보다 별칭을 선호하지만 두 가지 모두 요청을 시도 할 수 있습니다.
bmike

1
@ fd0 별칭이 작동하지 않았다는 것을 의심하지 않습니다. 이유를 묻습니다. 문제에 대한 더 간단한 해결책이있을 수 있습니다.
Thorbjørn Ravn Andersen

답변:


4

이 줄을 당신의 .zsrhc또는.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

결과->

여기에 이미지 설명을 입력하십시오

이 답변의 설명 :

내 .bashrc의 이전에는 다음이 있습니다. [-z "$ PS1"] && return, 그리고 그 줄 뒤의 모든 것은 대화식 세션에만 적용되므로 스크립트에서 cd의 동작에 영향을 미치지 않습니다.

이 의견의 추가 정보 :

[-z "$ PS1"] $ PS (대화식 프롬프트 변수)가 "제로 길이"(-z)인지 확인합니다. 길이가 0이면 설정되지 않았으므로 Bash가 대화식 모드에서 실행되고 있지 않아야합니다. 이 조건에서 && 리턴 부분은 .bashrc 소싱에서 나갑니다.

Btw, 질문 주셔서 감사합니다, 정말 멋지다 :)

편집하다 :

또 다른 해결책은 ls를 프롬프트에 통합하는 것입니다. OhMyZsh로 그렇게 할 수 있다고 확신합니다.)


1
일반적으로 표준 명령과 동일한 이름을 cd ls rm 등과 같이 사용하지 마십시오. 표준 명령을 사용해야합니다.
Mark

@Mark 'rm -rf ~ / *'에 동의합니다. ^^하지만 cd 명령의 경우에는 그렇게 위험하지 않습니다. 그리고 Carles는 '기존 명령 업그레이드'를 원합니다.
StrawHara

@StrawHara가 게시 한 이후 로이 솔루션을 사용했으며 0 문제가 있다고 말해야합니다. 나는 "어떻게 갔는지"를 제공하고 싶었습니다. :) 정말 유용합니다. 이것은 내가 그것을 사용하는 방법입니다 (.zshrc) : i.imgur.com/WHpROIE.png
Carles Alcolea

13

나는 이것을 위해 새로운 명령을 내리는 경향이 있습니다. 나는 그것들을 하나의 것으로 결합하는 것이 논리적이라고 생각합니다.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

이 아이디어를 결합한 아이디어가 마음에 듭니다! :-)
Garex

5
이 답변은 스크립트에서 사용될 때 cd / mkdir의 기본 정의를 방해하지 않기 때문에 가장 깨끗합니다
holroy

1
물론 Go 프로그래밍 언어를 사용하기로 결정하면 어떻게 될까요? : P
arxanas

@ arxanas : 당신은 makefiles를 사용합니까? ;-)
DevSolar

2
흠. 나는 이것을 좋아한다. 그러나 실수로 이름을 잘못 입력하면 새 디렉토리가 만들어집니다. 휴가 (CD /.... 또는 ../기타) 에 대한 점검을 구현 하고 디렉토리가 비어 있으면 삭제 하기가 어렵 습니까? 디렉토리를 비워두면 디렉토리가 비어 있는지 확인하고 그렇다면 삭제하십시오. 당신이 그것을 원하지 않는다면, 당신은 여전히 ​​대신에 cd를 사용할 수 있습니다
Schwertspize

6

나는 이런 것들을 내 것에 추가하려고 시도했다 .bashrc.

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

그러나 이것이 재정의 된 명령을 사용하는 스크립트를 망칠 수 있으며 옵션 처리가 취약 할 수 있음을 발견했습니다 (예 : -pmkdir명령 에 전달하려는 경우 에도 전달됨 cd). 다른 이름 (예 : c또는 mcd)으로 별칭을 정의하는 것이 좋습니다.


1
[ -z "$PS1" ] && return이러한 기능을 수행하기 전에 파일 끝에 삽입 하면 도움이됩니다.
Carles Alcolea

5

나는 기능이 갈 길이라고 생각한다. 같은 것

chglist() {
    cd "$1" && ls
}

예로서.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.