spu*_*der 40 shell fhs bash cd-command
在 bash 子 shell 中,运行 cd 时出现以下错误
sudo: cd: command not found
Run Code Online (Sandbox Code Playgroud)
这是意料之中的,因为我没有路径。通常要解决这个问题,我只提供完整路径,如下所示:(/usr/local/bin/foo)
令我惊讶的是,cd
它似乎不在任何正常的地方。
which cd
whereis cd
ls /bin | grep cd
Run Code Online (Sandbox Code Playgroud)
相比之下,ls
正是我所期望的。
which ls
/bin/ls
Run Code Online (Sandbox Code Playgroud)
cd
命令位于何处?为什么与所有其他命令不同?
更新
另一个有趣的花絮,cd 没有出现在 hash
hash
0 /bin/ls
2 /usr/bin/find
2 /sbin/ip
1 /usr/bin/updatedb
1 /usr/bin/apt-get
Run Code Online (Sandbox Code Playgroud)
slm*_*slm 51
如果你在 Bashcd
是一个内置的。type 命令甚至证明了这一点:
$ type -a cd
cd is a shell builtin
cd is /usr/bin/cd
cd is /bin/cd
Run Code Online (Sandbox Code Playgroud)
系统将使用此列表中的第一项,因此内置选项将是首选选项,并且是唯一有效的选项(请参阅下面关于什么是 /bin/cd 的部分))。
我喜欢将内置函数视为 Bash 知道如何自己做的函数。基本上,您经常使用的任何东西都已移入 Bash“内核”,这样它就不必每次都执行一个进程。
您始终可以使用如下builtin
命令明确告诉 Bash 您想要一个内置函数:
$ builtin cd
Run Code Online (Sandbox Code Playgroud)
请参阅有关以下内容的帮助builtin
:
$ help builtin
Run Code Online (Sandbox Code Playgroud)
散列仅用于“散列”(又名“保存”在键/值对中)文件的位置,而不是用于内置函数或关键字。的主要任务hash
是省去$PATH
每次查找常用可执行文件的过程。
这些命令通常是 Bash 编程语言功能的一部分。
$ type while
while is a shell keyword
$ type for
for is a shell keyword
$ type !
! is a shell keyword
Run Code Online (Sandbox Code Playgroud)
有些事情以多种方式实现,例如[
:
$ type -a [
[ is a shell builtin
[ is /usr/bin/[
[ is /bin/[
Run Code Online (Sandbox Code Playgroud)
......cd
正如你所发现的。
在我的 Fedora 19 系统/bin/cd
上实际上是一个 shell 脚本:
$ more /bin/cd
#!/bin/sh
builtin cd "$@"
Run Code Online (Sandbox Code Playgroud)
但它并不像你想的那样。有关更多详细信息,请参阅这些其他 U&L 问答:
底线:
POSIX 要求它在那里,在此实现中,它充当测试,确认您能够将目录更改为 X,然后返回一个返回码,确认或否认这是可能的。
归档时间: |
|
查看次数: |
41290 次 |
最近记录: |