如何返回给定可执行文件的目录?

Ben*_*rel 4 shell which

如果我想返回给定可执行文件的路径,我可以运行:

which mysql
Run Code Online (Sandbox Code Playgroud)

例如返回:

/usr/bin/mysql
Run Code Online (Sandbox Code Playgroud)

我只想返回:

/usr/bin
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Sté*_*las 7

executable=mysql

executable_path=$(command -v -- "$executable") &&
  dirname -- "$executable_path"
Run Code Online (Sandbox Code Playgroud)

不要使用which)。

当然,如果$executable是 shell 内置、函数或别名,那将不起作用。我不知道任何mysql内置的外壳。除非您之前定义过它们,否则它不会是函数或别名,但是您应该了解它。一个例外可能是bash支持导出的函数。

$ bash -c 'command -v mysql'
/usr/bin/mysql
$ mysql='() { echo test;}' bash -c 'command -v mysql'
mysql
Run Code Online (Sandbox Code Playgroud)