进一步阅读

进一步阅读

例如,如果ls作为输入传递,它应该告诉我如果在命令行上/bin/ls运行它将会运行。ls

答案1

所使用的命令因 shell 而异。

只有 shell 内置命令才能正确地告知 shell 将针对给定的命令名执行什么操作,因为只有内置命令才能完全了解别名、shell 函数、其他内置命令等等。请记住:并非所有命令都与可执行文件相对应。

  • 对于 Bourne Again shell bash内置type命令是:

    $ type '['
    [ is a shell builtin
    
  • 对于 Fish shell,fishtype内置命令的工作方式与 bash 类似。若要获取可执行文件的路径,请使用command -v

    $ type cat
    cat is /bin/cat
    $ command -v cat
    /bin/cat
    
  • 对于 Korn Shell ksh内置命令是whencetype最初设置为 的普通别名whence -vcommand内置选项-v相当于whence

    $ whence -v ls
    ls is a tracked alias for /bin/ls
    
  • 对于 Z Shell zsh内置命令是whencecommand内置命令的选项-v相当于whence,内置命令typewhich和分别where相当于whence选项-v-c-ca

    $ whence ls
    /bin/ls
    
  • 对于 TC Shell tcsh内置命令是which——不要与任何同名的外部命令混淆:

    > which ls
    ls: aliased to ls-F
    > which \ls
    /bin/ls
    

进一步阅读

答案2

你可以使用which以下方法:

aix@aix:~$ which ls
/bin/ls

它通过搜索PATH与参数名称匹配的可执行文件来工作。请注意,它不适用于 shell 别名:

aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin    dev   initrd.img      lib32   media  proc  selinux  tmp  vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$

type但是,确实有效:

aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'

答案3

which不是(必然)返回可执行文件。它返回第一个匹配的文件姓名它在 $PATH 中找到(或使用时找到多个类似命名的文件which -a)...实际的可执行文件可能需要经过多个链接。

  • which locate
    /usr/bin/locate
    `
  • file $(which locate)
    /usr/bin/locate: symbolic link to /etc/alternatives/locate'

查找命令实际的可执行文件是readlink -e
(与 结合which

  • readlink -e $(which locate)
    /usr/bin/mlocate

要查看所有中间链接

f="$(which locate)"             # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do  # follow links to executable
    printf "# %s\n" "$f"
done

# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate

答案4

你可以试试:

whereis ls

它给了我:

ls: /bin/ls /usr/share/man/man1/ls.1.gz

相关内容