当我想通过键入返回Linux的上级目录时cd ..
,我会输入错误cd //
。令我惊讶的是,没有错误报告。更重要的是,提示变为username@hostname://$
。ls
表示我现在在根目录下。
这是Shell的错误还是功能?如果是功能,是//
的别名/
吗?我的外壳是GNU bash,版本4.1.5(1)-发行版(i686-linux-gnu)。
谢谢和最好的问候。
当我想通过键入返回Linux的上级目录时cd ..
,我会输入错误cd //
。令我惊讶的是,没有错误报告。更重要的是,提示变为username@hostname://$
。ls
表示我现在在根目录下。
这是Shell的错误还是功能?如果是功能,是//
的别名/
吗?我的外壳是GNU bash,版本4.1.5(1)-发行版(i686-linux-gnu)。
谢谢和最好的问候。
Answers:
也可以考虑。
在Linux中,//
没有任何意义–多个连续的斜杠在路径中的任何位置(包括开头)都折叠为一个。更改目录以//
将您置于/
,如运行所示readlink /proc/self/cwd
。同样地,/usr//local///bin
折叠为/usr/local/bin
。
但是,某些其他类似Unix的系统(例如Cygwin或旧的Apollo Domain / OS)使用//
前缀用于网络路径,例如//fileserver/path/to/data
。POSIX也允许这样做。
由于各种原因,bash shell会自行跟踪当前目录(除了操作系统提供的跟踪),并且其中包含防止初始文件//
折叠的代码,以保持与此类系统的兼容性。bash的“功能”是bash提供对当前目录的更直观的跟踪,例如,当cd
进入符号链接时,bash会向您显示您期望的路径,即使内核认为不是这样。“错误”是bash//
即使在不使用它的系统上也允许。
zsh
允许cd //
,但足够聪明,只显示/
提示字符串即可。
我会去提示显示“错误”。
路径“ /”,“ //”,“ /////////////////////”,...具有相同的含义:“ /”。您可以在Unix路径中的任意位置添加任意数量的“ /”,但这不会改变其含义。
“错误”在这里更多与以下事实有关:提示使用显示路径中最后键入的有效字符,而不是实际的“ pwd”。
无论如何有趣;)
//
提示中的提示是提示环境变量($PS1
)的副作用-如何PS1
定义?
$PS1
变量定义为[\u@\h \W]\$
。设定有问题吗?
/
当pwd =时只能得到一个/
。我想知道您是否正在做任何额外的工作来获取目录。被$PROMPT_COMMAND
设置?
echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"
。您能否详细解释一下?我对这两个变量不太熟悉。谢谢。