如何允许特权命令失败但响应?

如何允许特权命令失败但响应?

我正在阅读几个命令,其中一些是特权命令,一些可能会或可能不会安装。当程序在系统中时,我的系统(gentoo)有时会响应命令未找到。我如何匹配诸如emerge之类的行为?

我想要的行为示例:

$ emerge -av mypackage
This action requires superuser access...

我目前拥有的:

$ lspci
bash: lspci: command not found
$ sudo lspci
00:00.0 Host bridge: ...

我什至更喜欢“权限被拒绝”消息,所以我知道我应该尝试使用 sudo。当然,我不想尝试以 root 身份运行。

答案1

包含的目录lspci可能不在您的 PATH 中。

您可以使用找到它的位置sudo -i which lspci并将目录添加到您的路径中。

可能的地点是/sbin/usr/sbin

要将它们添加到当前的 PATH 中,您可以运行(在基于 Bourne 的 shell 中)export PATH="$PATH:/usr/sbin:/sbin"

要使更改永久生效,请将导出命令添加到您的.bashrc.bash_profile(假设您用作bashshell)

答案2

lspci找不到,因为它不在普通用户的命令搜索路径上。非 root 用户很少或永远无法有效使用的命令放置在目录 或 之一中,/sbin这些目录位于 root 的命令搜索路径中,但不在其他用户的命令搜索路径中。/usr/sbin/usr/local/sbin

您可以通过定义一个名为的函数来配置 bash 在未找到命令时执行的操作command_not_found_handle。所以你可以把这样的东西放在你的.bashrc

command_not_found_handle () {
  if [[ -x "/sbin/$1" || -x "/usr/sbin/$1" || -x "/usr/local/sbin/$1" ]]; then
    echo 1>&2 "bash: $1: command not found, but can be executed as root"
  fi
  return 127
}

相关内容