我有一个名为~kernel-ppainside的文件夹~/Downloads。
aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa
Run Code Online (Sandbox Code Playgroud)
现在,当我键入cd ~k并按下Tab以进行自动扩展时,shell 将其扩展为,cd ~kernoops/而不是cd ~kernel-ppa/尽管具有相同起始字符的文件夹已经存在。
为了自动扩展工作,我需要用\. 因此cd \~k,Tab正确使用和按下会将其扩展为cd \~kernel-ppa/。即使使用cd \和按下Tab也能解决问题。
为什么会这样,为什么我需要逃避?此外,由于~自动扩展不需要even ,我在逃避什么?
如果我顺其自然并运行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://$
Run Code Online (Sandbox Code Playgroud)
这看起来像/目录,但pwd说它是//. 究竟是什么?
Rma*_*ano 10
如您所知,~扩展到您的主目录。但是您似乎错过了~john扩展到名为“john”的用户的主目录。
检查您的/etc/passwd文件:
% grep ker /etc/passwd
kernoops:x:107:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
Run Code Online (Sandbox Code Playgroud)
它有一个名为的“系统用户” kernoops(出于内部错误报告的原因)。因此,当您键入cd ~kTabshell 时,在本地目录扩展之前优先选择用户名扩展(1),并且您有cd ~kernoops. 现在结果是用户“kernoops”主目录是/,所以它cd就是它。
在我的 shell 中zsh,我没有双斜线 (2):
[:/] % cd ~kernoops/
[:/] % pwd
/
[:/] % cd //
[:/] % pwd
/
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个目录名称没有经过深思熟虑。它需要在脚本等方面给予三重照顾。我能想到的唯一最糟糕的想法是在其中嵌入一个标签......
(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 %
Run Code Online (Sandbox Code Playgroud)
(2) 我似乎记得 posix 为//路径中的初始设置了一个例外——它应该被维护,因为一些旧的 unix 变体(我使用了具有域/操作系统的apollos)用于//machine-name/...无缝访问其他机器'本地网络中的文件系统(尚未发明安全性)。所以可能 bash 就在这里。但是,如果您这样做,cd ///您将/在两个外壳中都拥有法线。
是的,在 unix.se 上找到!
波形符 ( ~) 在 shell 中具有特殊含义。当它出现在任何命令中时,它会扩展为您的主目录的名称。做cd ~或cd /home/aditya一样,它最终在你的主目录中。
通过\在波浪号前面放置一个反斜杠字符 ( ),您可以告诉 shell 不要对后面的特殊字符进行扩展(这就是所谓的 shell 转义)。通过这样做,cd \~您要求 shell 移动到一个名为的目录~,该目录将位于您正在执行命令的目录下。这样做cd \~kernel-ppa会将您更改为名为 的目录~kernel-ppa,这是正常行为。
编辑:更多关于〜
如果您在 之后写入系统的用户名~,您将被移动到该用户的主目录。进行Tab扩展之后cd ~将扩展到系统上现有的用户名。如果在Tab之后完成cd ~k,则扩展为 ~kernoops,因为系统用户中有名为kernoops的用户,主目录为/. 随着cd ~k结果扩展为cd ~kernoops/尾随斜杠和主目录 beeing /,您将移至//. 但这与/之前已经说过的其他人完全相同。
| 归档时间: |
|
| 查看次数: |
1942 次 |
| 最近记录: |