以不将其值保存到 bash 历史记录中的方式设置环境变量(密码)

Ale*_*sky 8 bash

当我以 root 身份登录 MySQL 时,我通常设置 MROOTPASS 环境变量

export MROOTPASS=my-secret-password
Run Code Online (Sandbox Code Playgroud)

然后做

mysql -u root -p$MROOTPASS
Run Code Online (Sandbox Code Playgroud)

这消除了每次我以 root 身份连接到 MySQL 时重新输入密码的需要,但显然它是不安全的,因为密码已保存到 bash 历史文件中。是否可以防止密码被保存?

Chr*_*ard 15

$ read -rs PASSWORD
$ export PASSWORD
Run Code Online (Sandbox Code Playgroud)


jot*_*tbe 10

您可以使用输入变量

read -s -p "Enter password:" MROOTPASS 
Run Code Online (Sandbox Code Playgroud)

这样它也不会出现在任何地方而不必将其保存在文件中。相反,您只需输入一次。-s 选项告诉 read 不要回显输入的字符,因此在您输入时没有人可以查找它。

编辑:在这个答案被接受很久之后,有人说,这没有定义系统变量,而是定义了 shell 变量。如果您需要您的变量在子 shell 中可见,您只需要通过在 read 语句 (bash) 下方添加以下行来重新导出变量:

export MROOTPASS 
Run Code Online (Sandbox Code Playgroud)