gpt4 book ai didi

bash - 在带有 'which' 的 bash 脚本中使用命令

转载 作者:行者123 更新时间:2023-11-29 09:23:47 24 4
gpt4 key购买 nike

在查看 bash 脚本时,有时我会看到这样的结构:

MYSQL=`which mysql`
$MYSQL -uroot -ppass -e "SELECT * FROM whatever"

在其他脚本中直接使用命令(在本例中为mysql)的地方:

mysql -uroot -ppass -e "SELECT * FROM whatever"

那么,为什么以及何时应该使用 which 以及用于哪些命令 – 我从未见过 echowhich 一起使用......

最佳答案

你可以通过 man which 获取详细信息:

DESCRIPTION

   which  returns the pathnames of the files (or links) which would be executed in the current environment,
had its arguments been given as commands in a strictly POSIX-conformant shell. It does this by search‐
ing the PATH for executable files matching the names of the arguments. It does not follow symbolic
links.

所以 which mysql 只是返回 mysql 命令的当前路径。

然而,在您的示例中使用 which 只是确保忽略当前环境中为 mysql 设置的任何别名

然而,还有另一个聪明的捷径可以避免shell中的which。您可以使用带反斜杠的 call mysql:

\mysql -uroot -ppass -e "SELECT * FROM whatever"

这将与您的 2 个命令所做的有效地相同

来自 OP: 使用 which 的唯一原因是避免自定义别名可能出现的问题(如 alias mysql="mysql -upeter -ppaula")。由于不太可能有人为 say echo 设置别名,因此我们不需要带有 echo 的这种构造。但是为mysql设置别名是很常见的(没有人愿意记住并输入24个字符长的密码)。

关于bash - 在带有 'which' 的 bash 脚本中使用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com