我正在阅读几个命令,其中一些是特权命令,一些可能会或可能不会安装。当程序在系统中时,我的系统(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
(假设您用作bash
shell)
答案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
}