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

执行期间还有哪些其他 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 个提示。

答案1

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

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

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

答案2

您要查找的程序名为expect。您编写一个脚本,告诉程序要等待某些提示(例如密码提示),然后通过 stdin 提供一些响应,就像键盘输入一样。我过去曾用它来避开那些我无法(轻易)摆脱的烦人的密码提示。

sudo aptitude install expect
man expect

答案3

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

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

3) 你为什么还要尝试获取密码?跳过第一次调用 gksudo 并直接使用第二次。

相关内容