pwd에“~ kernel-ppa”라는 폴더가 이미 있는데 cd ~ k (& 탭)가 cd ~ kernoops로 확장되는 이유는 무엇입니까?


8

~kernel-ppainside 라는 폴더가 있습니다 ~/Downloads.

aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa

내가 입력 할 때 이제 cd ~k를 눌러 Tab자동 확장, 쉘은 확장되어 cd ~kernoops/대신 cd ~kernel-ppa/같은 시작 문자 폴더가 이미 존재하지만.

자동 확장이 작동하려면로 확장해야합니다 \. 따라서 올바르게 사용 cd \~k하고 누르면으로 Tab확장됩니다 cd \~kernel-ppa/. 사용 cd \하고 누르는 것 조차도 Tab트릭을 수행합니다.

왜 그렇게되며 왜 탈출해야합니까? 또한 ~자동 확장에는 필요하지 않기 때문에 탈출하고 있습니까?

흐름을 따라 실행 cd ~kernoops/하고을 누르면 Enter터미널 상태가 다음과 //같이 변경됩니다 .

aditya@aditya-desktop:~/Downloads$ cd ~kernoops/
aditya@aditya-desktop://$ pwd
//
aditya@aditya-desktop://$ ls
bin   cdrom  etc   initrd.img  lost+found  mnt  proc  run   srv  tmp  var
boot  dev    home  lib         media       opt  root  sbin  sys  usr  vmlinuz
aditya@aditya-desktop://$ 

이것은 /디렉토리 처럼 보이지만 pwd이라고 말합니다 //. 정확히 무엇입니까?


@ RaduRădeanu "/ home / aditya / Downloads / ~ kernel-ppa"
Elliott Frisch

먼저 "cd ~ kernoops /"는 존재하지 않는 "cd / home / kernoops /"로 이동합니다. 대신 "cd /"를 쓰는 또 다른 방법 인 "cd //"를 얻습니다. 루트 파일 시스템의 루트 디렉토리입니다. 이상하게 보입니다.
Elliott Frisch

단일 이스케이프 "\\"가 작동하는 이유는 폴더가 tree있거나없는 폴더를 살펴보면 ls첫 번째 하위 폴더 인 것을 알 수 있습니다.
Elliott Frisch

@ElliottFrisch : 방금 그 ~kernel-ppa안에 유일한 폴더가 있다는 것을 알았 습니다. 방금 실행 cd 하고 Tab 키를 누르면으로 확장됩니다 cd \~kernel-ppa/. 나도 탈출 할 필요가 없습니다!
Aditya

예. 또한 Tab 키를 계속 누르면 사용 가능한 다른 완료 과정이 순환됩니다.
Elliott Frisch

답변:


10

아시다시피 ~홈 디렉토리로 확장됩니다. 그러나 당신이 놓친 것 같다는 것은 ~john"john"이라는 사용자의 홈 디렉토리로 확장 된다는 것 입니다.

/etc/passwd파일을 확인하십시오 :

% grep ker /etc/passwd
kernoops:x:107:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false

kernoops내부 버그보고를 위해 "시스템 사용자"라는 이름이 있습니다. 따라서 입력 cd ~kTab하면 셸은 로컬 디렉토리 확장 전에 사용자 이름 확장에 preference (1)를 제공하며 cd ~kernoops. 지금은 그 사용자가 "kernoops"홈 디렉토리는 결과 /는, 그래서 cd그것이야.

내 쉘 zsh에는 이중 슬래시가 없습니다 (2).

[:/] % cd ~kernoops/ 
[:/] % pwd
/
[:/] % cd //
[:/] % pwd
/

따로,이 디렉토리 이름은 잘 생각되지 않습니다. 스크립트 등 무엇이든 세 번주의해야합니다. 내가 생각할 수있는 유일한 최악의 아이디어는 탭을 포함시키는 것입니다 ...


각주 :

(1)에서 zsh이름이 지정된 디렉토리가 ~xdir있고 사용자로 시작하지 않는 경우에도 x; 일을 cd ~xTab확장하지 않고 인용되지는 ~오류가 있습니다 :

[:~/tmp/x] %  mkdir \~xdir
[:~/tmp/x] % ls
~xdir
[:~/tmp/x] % cd ~xdir  
zsh: no such user or named directory: xdir
[:~/tmp/x] 1 % 

(2) posix //가 경로 에서 초기 를 제외했다는 것을 기억하는 것 같습니다 .- 오래된 유닉스 변형 ( Apollo 를 사용하여 Domain / OS와 함께 아폴로 스 를 사용 했음 )이 //machine-name/...다른 컴퓨터에 원활하게 액세스 하는 데 사용 되었기 때문에 유지해야합니다. 로컬 네트워크의 파일 시스템 (보안은 아직 발명되지 않았습니다). 아마도 배쉬가 여기있을 것입니다. 그래도 두 쉘 모두에 cd ///법선이 있습니다 /.

예, unix.se에 있습니다 !


1
잘 알려진 또 다른 레거시 OS는 이와 같이 이중 슬래시 표기법을 사용하지만 슬래시는 일반적으로 거꾸로 작성되며 네트워크 원격 파일 시스템에 액세스하기 위해 슬래시를 허용할지 여부는 확실하지 않습니다. ;-)
R .. GitHub 중지 지원 얼음

7

물결표 문자 ( ~)는 쉘에서 특별한 의미를 갖습니다. 명령에 표시되면 홈 디렉토리의 이름으로 확장됩니다. 수행 cd ~하거나하는 것은 cd /home/aditya당신의 홈 디렉토리에 끝나는 동일합니다.

\물결표 앞에 백 슬래시 문자 ( ) 를 넣으면 쉘에 다음과 같은 특수 문자를 확장하지 않도록 지시합니다 (쉘 탈출이라고합니다). 이렇게함으로써 cd \~당신이라는 디렉토리로 이동 쉘 요청~ 은 명령을 수행하는 디렉토리 아래에있는 디렉토리 . 이렇게 하면 정상적인 동작 인 cd \~kernel-ppa이라는 디렉토리로 변경됩니다 ~kernel-ppa.

편집 : 더 ~

를 사용한 후 시스템의 사용자 이름을 쓰면 해당 사용자의 ~홈 디렉토리로 이동합니다. Tab이후 에 확장 하면 cd ~시스템에 존재하는 사용자 이름으로 확장됩니다. 경우 Tab후 완료 cd ~k라는 이름의 사용자가 있기 때문에, 그것은 ~로 확장은 kernoops kernoops 의 홈 디렉토리로, 시스템 [사용자 /. 슬래시와 홈 디렉토리 cd ~k로 결과 가 확장됨에 따라 로 이동합니다 . 그러나 이것은 이미 다른 사람들이 이미 말한 것과 동일 합니다.cd ~kernoops/////


답변 해주셔서 감사합니다. 당신과 @Rmano의 답변의 조합은 혼란을 완전히 해결합니다 :)
Aditya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.