공백이 포함된 bash CD 경로 문제: "매개변수가 너무 많습니다"

공백이 포함된 bash CD 경로 문제: "매개변수가 너무 많습니다"

공백이 있는 경로를 만들었고 디렉터리를 변경하려고 하면 공백을 이스케이프 처리하거나 경로를 인용했음에도 불구하고 "매개 변수가 너무 많습니다"라는 오류 메시지가 나타납니다.

제가 수행한 테스트는 다음과 같습니다.

# creating a path with spaces in it
$mkdir -p "01.Silly Path/0.2 With Plenty of /0.3 spaces"

# Trying to cd
$cd 01.Silly\ Path/0.2\ With\ Plenty\ of\ /0.3\ spaces/
bash: cd: too many arguments

# Trying with sh
$sh
$ cd 01.Silly\ Path/0.2\ With\ Plenty\ of\ /0.3\ spaces/
$ pwd
/xxx/Documents/dev/01.Silly Path/0.2 With Plenty of /0.3 spaces

# Trying to create a file using the problematic path : it works
$echo "dummy file test" > 01.Silly\ Path/0.2\ With\ Plenty\ of\ /0.3\ spaces/dummy_file.t
$cat 01.Silly\ Path/0.2\ With\ Plenty\ of\ /0.3\ spaces/dummy_file.t
dummy file test

# But command cd fails
$cd 01.Silly\ Path/0.2\ With\ Plenty\ of\ /0.3\ spaces/
bash: cd: too many arguments

$bash --version
GNU bash, version 5.2.15(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
lde@ldedebian ~/Documents/dev  $
$

# Tried quoting instead of escaping : still having failure with bash
$( cd "01.Silly Path/0.2 With Plenty of /0.3 spaces/" ; pwd)
bash: cd: too many arguments

# But works fine in zsh and sh
$sh -c ' cd "01.Silly Path/0.2 With Plenty of /0.3 spaces/" ; pwd '
/home/xxx/Documents/dev/01.Silly Path/0.2 With Plenty of /0.3 spaces
$zsh -c ' cd "01.Silly Path/0.2 With Plenty of /0.3 spaces/" ; pwd '
/home/xxx/Documents/dev/01.Silly Path/0.2 With Plenty of /0.3 spaces

# And the issue seems to be related to spaces indeed
$mkdir -p "01.Silly_Path/0.2_With_Plenty_of_/0.3_spaces"
$( cd 01.Silly_Path/0.2_With_Plenty_of_/0.3_spaces/; pwd)
/home/xxx/Documents/dev/01.Silly_Path/0.2_With_Plenty_of_/0.3_spaces

Bash와 공간에 대해 제가 뭔가를 놓치고 있는 걸까요, 아니면 버그인가요?

답변1

당신이 확인했어요댓글에서cd자체 셸 기능으로 셸의 내장 유틸리티를 오버로드하는 소프트웨어를 설치했습니다. 쉘 함수에는허점, 이는 경로 이름 인수를 공백으로 분할하게 하여(아마도 변수 확장을 큰따옴표로 묶는 것을 잊었기 때문일 수 있음) 관찰한 문제를 야기합니다.

소프트웨어를 제거하거나 최소한 셸 기능을 제거하십시오.

unset -f cd

...이 문제를 해결할 수도 있습니다.

\$*또한 다음으로 변경하여 문제를 해결 하도록 선택할 수도 있습니다 \"\$@\".$*"$@" 이 파일에.

관련 정보