当命令没有足够的权限时如何自动显示 sudo 提示

Eya*_*vin 1 permissions command-line bash sudo

如果我有一个文件

$ touch some_file.txt
Run Code Online (Sandbox Code Playgroud)

我想将它移动到需要sudo权限的目录

$ cp some_file.txt /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

cp: cannot create regular file ‘/usr/local/bin/some_file.txt’: Permission denied
Run Code Online (Sandbox Code Playgroud)

然后我必须在命令前加上前缀sudo才能使其工作

$ sudo cp some_file.txt /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

当我执行需要权限的命令时,如何自动获得 sudo 密码提示?

就像是:

$ cp some_file.txt /usr/local/bin
cp: cannot create regular file ‘/usr/local/bin/some_file.txt’: Permission denied
Please enter sudo password:
************ # Entering my password
# Command executed successfully
Run Code Online (Sandbox Code Playgroud)

ter*_*don 7

虽然这可能是可能的,但这是一个非常非常糟糕的主意。这将鼓励您只是盲目地运行,sudo而不是调查为什么您没有权限以及您实际尝试做什么。在某些情况下,这可能会导致您sudo在不必要的地方使用,例如,可能会导致您更改配置文件的所有权等。

而不是只是一味地要求的sudo密码,你可以使用bash的历史快捷方式和运行:

sudo !!
Run Code Online (Sandbox Code Playgroud)

!!扩展到您运行以前的命令。例如:

$ whoami
terdon
$ sudo !!
sudo whoami
root
Run Code Online (Sandbox Code Playgroud)

至少,通过这种方式,您可以看到正在发生的事情。它只比您要求的复杂一点,而且更安全一点。

  • @EyalLevin 我知道。我的观点是,这是不好的做法。如果你实现了这样的东西,那就意味着任何权限被拒绝的错误总是会自动询问你的 sudo 密码。我明白这有时会有什么帮助,我试图指出它有时也可能非常危险。您没有权限通常有一个很好的理由,所以简单地用 sudo 重复命令并不总是最好的方法。 (2认同)