执行期间还有哪些其他bash变量可用,例如$ USER可以帮助我的脚本?

这与问题有关为什么绕过SUDO密码? 。 其中一个响应者以一种很棒的方式回答了这个问题,并且非常非常清楚任何新手。 现在这是一个我似乎无法想象的问题。

我写了一个用于启动vmware firefox插件的脚本(不用担心。我放弃了,现在非常高兴地运行vBox。我把vmware留给了我的服务器:))

我需要以sudo的身份启动插件,但我还需要向它传递一个参数(密码),这恰好是相同的。

所以,如果我的密码是Hello123 ,那么命令就是: sudo ./myscript.sh hi other Hello123

从命令行运行,脚本会询问我的sudo密码,然后运行。 我想捕获密码并传递它。 我也想以图形方式运行,所以我尝试了gksudo,并且有一个选项-p ,它返回变量赋值的密码。

嗯,这是一场噩梦,因为我仍然会被提示输入原始的sudo:见下文

 Find UserName vUser=$USER Find password (and hopefully enable sudo) vP=gksudo -p -D somedescriptiontext echo Execute command gksudo ./myscript.sh hi $vUser $vP 

而且我仍然会被提示两次。

所以我的问题是三方面的:

  1. 是否有可用于密码的变量,就像有一个用户, $USER

  2. 是否有不同的方式我应该分配我在$vP中的命令的结果值? 我想知道如果执行我拥有它的方式,它是在一个没有启动的会话而不是当前的会话,因为我在一些变量上得到一些额外的警告类型错误。

  3. 我尝试使用Zenity来捕获文本,但当然,我无法将该值传递给sudo,因此我只能将其用作参数,这使我回到2个提示中。

您可以指定某些命令运行,而无需使用sudo( man visudo )提供密码。 例如,如果您的用户名是psusi,则可能有这样的行:

 %psusi ALL = NOPASSWD: /usr/local/bin/myscript.sh 

在授予所有信任的sudo访问权限时要格外小心。

您正在寻找的程序称为expect 。 您编写了一个脚本,其中您告诉程序期望某些提示(例如密码提示),然后通过stdin提供一些响应,与键盘输入相同。 我过去用它来解决烦人的密码提示,我无法(轻松)摆脱。

 sudo aptitude install expect man expect 

1)不,因为这会将您的密码泄露给您系统上的任何人

2)gksudo的返回值是一个整数,表示它是否有错误。 -p开关将其密码打印到其标准输出。

3)为什么你甚至试图获取密码? 跳过对gksudo的第一次调用,然后使用第二次调用。