다음 함수를 만들었습니다 ~/.bashrc
.
function cl {cd $1; echo $1; ls -al $1}
(실제로 읽는 내용을 확인하기 위해 echo 명령을 거기에 넣었습니다)
내 홈 디렉토리에 "samples 폴더"라는 폴더를 만들고 cl "example folder"
and를 시도했습니다. 그들은 모두 같은 것을 인쇄합니다:cl example\ folder
cl ~/"example folder"
-bash: cd: too many arguments
example folder
다음은 현재 디렉토리만 나열하는 ls 명령입니다.
그렇다면 이 문제를 해결할 수 있는 방법이 있을까요? 공백이 포함된 디렉토리를 전달하는 방법은 무엇입니까?
답변1
function cl {cd $1; echo $1; ls -al $1}
Bash 구문보다 zsh 구문에 더 가깝지만 그럼에도 불구하고 여전히 많은 문제가 있습니다.
존재하다bash
- 그 뒤에는 공백이 필요
{
하고 그 앞에는}
명령 구분 기호(;
,&
, 개행 문자이지만 그것도 괜찮습니다)가 필요합니다.)
zsh에서는 작동하지 않습니다. - 매개변수 확장은 따옴표로 묶어야 합니다. 그렇지 않으면 분할+glob을 거치게 됩니다. zsh에서는 작동하지 않습니다.
- 변수 데이터를 옵션이 아닌 일반 매개변수로 전달하는 경우 옵션 닫는 태그( )를 앞에 붙여야
--
데이터가 옵션으로 처리되는 것을 방지 할 수 있습니다-
. cd
다음 명령을 실행한 후 종료 상태를 확인하지 않습니다.echo
임의의 데이터를 출력하는 데 사용할 수 없습니다. 대신 사용하십시오printf
.cd
편집 후$1
상대 경로인 경우ls -la $1
(또는 더 정확하게는ls -la -- "$1"
) 더 이상 작동하지 않습니다 .$1
아마도 당신은ls -la
(또는ls -lA
)만을 원할 것입니다.- 스크립트에서는 일반적으로
cd
와 함께 사용 하고 다른 언어 처럼 작동하도록 설정되지 않거나 비어 있는지-P
확인한 후 ( ) 사용하려고 합니다. 그러나 대화형 셸에서 함수를 사용하는 경우에는 적용되지 않을 수 있습니다.$CDPATH
CDPATH= cd -P -- "$1"
chdir()
function f { ...; }
함수 정의를 위한 ksh 구문입니다. 표준 구문보다 이를 선호bash
할 이유가 없습니다 .f() { ...; }
그래서:
cl() {
cd -- "$1" || return
printf '%s\n' "$1"
ls -Al
}
인수가 전달되지 않으면 cd
디렉토리가 다음으로 변경됩니다.집디렉토리( 또는 cd
와 유사 ).cd ~
cd "$HOME"
그러나 여기서 cl
인수 없이 호출 하면 인수가 전혀 없는(그리고 질식할 수도 있는) "$1"
대신 빈 인수로 확장됩니다 . 인수 없이 if를 cd
호출하려면 ( 홈 디렉터리로 이동하여 거기에 있는 파일을 나열함) 로 바꾸거나 로 받은 것과 동일한 인수 목록으로 호출할 수 있습니다. 예를 들어 or를 사용할 수 있습니다.cd
cl
cl
"$1"
${1+"$1"}
cd
cl
"$@"
cl -P ../bin
cl -- -dir-whose-name-starts-with-dash
그런 다음 첫 번째 인수 나 첫 번째 인수만 cd
사용하는 대신 나중에 현재 작업 디렉터리를 인쇄할 수 있습니다 .printf '%s\n' "$PWD"
pwd
cl() {
cd "$@" || return
pwd
ls -Al
}
추가 자료: