ls
공백이있는 파일 이름을 입력 할 때마다 내 컴퓨터 중 하나 (Debian Sid를 실행 중)에서 작은 따옴표가 있습니다.
나는 즉시 내 별칭을 확인했지만 그대로 유지했습니다.
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
이름에 작은 따옴표가 포함 된 파일이있는 또 다른 테스트 (jimmij의 요청에 응답) :
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
새로운 coreutils-8.26 출력으로 업데이트하십시오 (이것은 훨씬 덜 혼란 스럽지만 기본적으로 여전히 자극적입니다). 이 인쇄물에 대한 Pádraig Brady에게 감사드립니다 :
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
왜 이런 일이 발생합니까? 제대로 중지하려면 어떻게합니까?
명확히하기 위해, 나는 ls를 자동으로 컬러 출력으로 설정했습니다. 그것은 결코 주변에 따옴표를 넣지 않았습니다.
나는 실행 중이며 bash
coreutils 8.25입니다.
편집 : 개발자가 생각한 핵심 유틸리티 (link)가 나타납니다 .46 년 이상의 유닉스 전통과 놀랍게도 최소한의 원칙을 어기 는 에도 불구하고 글로벌 기본값을 만드는 것이 좋습니다 .
다시 컴파일하지 않고이 문제를 해결할 수있는 방법이 있습니까?
업데이트-2017 년 10 월-Debian Sid는 기본적으로 쉘 이스케이프 인용을 다시 활성화했습니다. 이건 말도 안돼 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
그리고 이전 버그 보고서에 대한 회신 체인의 맨 아래에 "변경은 의도적 인 것이며 계속 남아있을 것입니다." https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
나는 이것이 해결되었다고 생각했다. 분명히 아닙니다.
업데이트 : 2019 년 4 월 :이 변경으로 인해 PHP에서 의심스러운 버그 보고서를 발견했습니다 ls
. 개발자를 혼란스럽게 만들고 잘못된 버그 보고서를 생성하는 경우 변경 사항을 다시 생각해야합니다.
업데이트 : Android toybox ls
는 이제 이와 비슷한 작업을 수행하지만 따옴표 대신 백 슬래시를 사용합니다. -q 옵션을 사용하면 공백이 '물음표 문자'로 렌더링됩니다 (공백이 아니기 때문에 공백을 확인하지 않았습니다). 문제의 장치를 루팅하지 않고 지금까지 찾은 유일한 해결책은 추가하는 것입니다. 이것을 스크립트에 넣고 쉘을 시작할 때 소스로 만듭니다. 이 함수는 ls
터미널 을 사용 하는 경우 열 을 사용하고 그렇지 않으면 ls
파이프 당 줄 을 인쇄하기 때문에 인쇄 공간 을 속이면서 줄당 하나씩 인쇄합니다.
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls | cat
그것이 사라지는 지 보십시오 . 타임머신이 있다면 Bell Labs ~ 1970으로 돌아가서 Ken Thompson에게 파일과 디렉토리 이름에 공백을 허용하는 것은 나쁜 생각이라고 설득하려고합니다. :-P
'*'
. 나는 ls
그것을 제거하기 위해 모든 기계에 별칭을 추가하는 주위에 갈 것 같아요 ...
QUOTING_STYLE=literal
는 별칭이 아닌 환경 변수 로이 작업을 수행 할 수 있습니다 . (나는 그것이 맛의 문제라고 생각하지만 변수를 선호합니다.)
ls
명령을 파싱하지 않는 이유 입니다.