답변:
함수를 사용하여이를 수행 할 수 있습니다.
$ cdls() { cd "$@" && ls; }
&&
' cd
는 디렉토리에 대한 의미 이며 성공한 경우 (예 : 디렉토리가 존재하는 경우) ls
'를 실행하십시오 . 은 Using &&
운영자 더 나은 다음 세미콜론 사용하다 ;
와 같이, 두 개의 명령 사이에서 오퍼레이터 { cd "$@" ; ls; }
. 이 두 번째 명령은 작동 ls
여부에 관계없이 실행 됩니다 cd
. cd
실패 하면 ls
현재 디렉토리의 내용을 인쇄하여 사용자에게 혼란을 줄 것입니다. 모범 사례로 사용 &&
하지 말고 사용하십시오 ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
일반적으로, 특히 일반적으로 호출되는 명령의 경우 이미 존재하는 명령의 이름을 바꾸는 것은 좋지 않습니다 cd
. 대신 다른 이름으로 새 명령을 작성하십시오. cd
이라는 이름의 함수 나 별칭으로 덮어 쓰면 cd
100,000 개의 파일이있는 디렉토리를 입력하면 어떻게됩니까? 를 사용하는 많은 유틸리티가 cd
있으며이 비정상적인 동작으로 인해 혼동 될 수 있습니다. 공유 계정을 사용하는 경우 ( root
다른 시스템 관리자와 작업 할 때 와 같이 ) 사람들이 기대하는 것과 환경이 다르기 때문에 기존 명령을 바꾸는 것이 매우 위험 할 수 있습니다.
pwd
. 이것이 모범 사례인지 확실하지 않지만 일반적으로 수행됩니다. 몇 가지 예는 tldp.org/LDP/abs/html/aliases.html 을 참조하십시오 .
cd() { builtin cd "$@" && pwd; };
표준 Bourne 쉘 사용 (Sierra 10.12.6)
나는 이것을 .bashrc에 가지고 있으며 잘 작동한다.
function cd {
builtin cd "$@" && ls -F
}
내 .bashrc의 이전에는 다음 [ -z "$PS1" ] && return
이 cd
있습니다.
[ -z "$PS1" ] && return
합니까?
[ -z "$PS1" ]
검사를하는 경우 $PS
(대화 형 프롬프트 변수) "제로 길이"입니다 (-z). 길이가 0이면 설정되지 않았으므로 Bash가 대화식 모드에서 실행되지 않아야합니다. && return
부분은 소싱에서 종료 .bashrc
이러한 조건에서,이 시점에서.
i
에 "$-"
: case "$-" in *i*) ;; *) return ;; esac
.
PS1
변수가 설정되지 않았거나 비어 있고 셸이 여전히 대화 형일 수 있지만 프롬프트는 표시되지 않습니다. 나는 $-
확인합니다.
.bashrc 파일에 별칭을 추가하지 않으시겠습니까?
다음과 같은 것 :
alias cdls='cd "$@" && ls'
cd 명령에 대한 별명 작성의 일반적인 솔루션은 popd와 같이 현재 디렉토리를 변경하거나 cd 명령으로 스크립트를 실행할 수있는 다른 명령이 있기 때문에 완벽하지 않습니다.
프롬프트를 리턴하기 전에 명령을 실행하는 $ PROMPT_COMMAND Bash 후크를 사용하는 것이 좋습니다.
명령 (이 경우 함수)은 디렉토리가 화면 노이즈를 줄이기 위해 변경된 경우에만 ls를 실행합니다. .bashrc 코드 :
#each console has its own file to save PWD
PrevDir=$(tty)
PrevDir=/tmp/prev-dir${PrevDir////-}
#don't ls when shell launched
echo $PWD > $PrevDir
LsAfterCd() {
[[ "$(< $PrevDir)" == "$PWD" ]] && return 0
ll --color=always | sed 1d
echo $PWD > $PrevDir
}
PROMPT_COMMAND=LsAfterCd
이것을 복사하십시오 :
altercd(){ cd(){ unset -f cd ; cd $*; ls ; altercd; } } ; altercd
이제 당신은 간단한 CD를 할 수 있습니다 :
cd /
(files listed)
cd /home
(files listed)
etc...
bash에서는 매개 변수가 필요한 조치의 별명으로 되풀이 할 수 없습니다. 이를 위해 기능이 있습니다. 그래서 당신 ~/.bashrc
의 다음을 넣어
mycd() {
cd "$1"
ls
}
function mycd { builtin cd "$1" && ls "$2" }
.
아래 코드를 .profile에 넣으면 작동합니다. HP-Unix 상자에서 테스트했습니다.
cdl()
{
if [ "$#" = 0 ]; then
cd ~ && ls -ltr
elif [ -d "$@" ]; then
cd "$@" && ls -ltr
else
echo "$@" directory not found!!!
fi
}
#SET YOUR ALIAS TO CD
alias cd="cdl"
더 편리- 역사로 돌아갈 수있는 능력 :
function cd() {
if [ -d "$@" ]; then
echo -n "Stack: "
pushd "$@"
ls
else
builtin cd "$@"
fi
}
function popd() {
builtin popd "$@" && ls
}
디렉토리를 변경하면 다음과 같은 줄 Stack: (current_dir) (previous_dir) ...
이 표시되고 ls
출력됩니다. dirs history로 돌아가려면 다음 명령을 팝업하십시오 popd
.
else
잘못된 디렉토리로 이동하려고 할 때 오류가 표시되도록 추가했습니다 .
ls
옵션이 없으므로이 옵션 을 사용하는 것이 좋습니다 cd
.
cdls() {
cd ${$#} && ls ${@:0:$#-1}
}
cd
옵션이 있습니다.
유용한 정보는 다음과 같습니다 (Debian 9에서).
c() {
cd "${@}" \
&& ls --color=always -C \
| sed '
# on line 5, print the line,
5 {
# append an ellipsis
a[...]
# and quit
q
}
# print lines 1-4 verbatim
'
}
이렇게하면 해당 디렉토리에 너무 많은 항목이있어 콘솔이 깨끗하게 유지되는 경우 줄임표가있는 출력이 잘립니다.
$ c data/git/buildroot/package/
4th lua-markdown
a10disp lua-messagepack
acl lua-msgpack-native
acpica luaossl
acpid lua-periphery
[...]
$ ls -1 | wc --lines
1977