如果内置命令,则检入bash和csh

Nat*_*lin 15 bash shell csh

如果内置命令,我如何检查bash和csh?有没有与大多数贝壳兼容的方法?

Jon*_*Lin 12

您可以尝试which在csh或typebash中使用.如果有东西是内置命令,它就会说出来; 否则,您将获得PATH中命令的位置.

在csh中:

# which echo
echo: shell built-in command.

# which parted
/sbin/parted
Run Code Online (Sandbox Code Playgroud)

在bash中:

# type echo
echo is a shell builtin

# type parted
parted is /sbin/parted
Run Code Online (Sandbox Code Playgroud)

type 也可能会显示如下内容:

# type clear
clear is hashed (/usr/bin/clear)
Run Code Online (Sandbox Code Playgroud)

...这意味着它不是内置的,但是bash已将其位置存储在哈希表中以加快对它的访问; (一点点)更多关于Unix和Linux的帖子.


pax*_*blo 10

在bash中,您可以使用type带有该-t选项的命令.完整的详细信息可以在bash-builtins手册页中找到,但相关的位是:

输入 -t名称

如果-t选项时,类型打印一个字符串,它是一个alias,keyword,function,builtin,或file,如果名字是分别别名,壳保留字,功能,内置,或磁盘文件,.如果找不到名称,则不打印任何内容,并返回退出状态false.

因此,您可以使用以下检查:

if [[ "$(type -t read)" == "builtin" ]] ; then echo read ; fi
if [[ "$(type -t cd)"   == "builtin" ]] ; then echo cd   ; fi
if [[ "$(type -t ls)"   == "builtin" ]] ; then echo ls   ; fi
Run Code Online (Sandbox Code Playgroud)

这将导致输出:

read
cd
Run Code Online (Sandbox Code Playgroud)