Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在OS X上使用expect以管理员身份运行shell脚本_Bash_Shell_Expect_Osx Yosemite - Fatal编程技术网

Bash 在OS X上使用expect以管理员身份运行shell脚本

Bash 在OS X上使用expect以管理员身份运行shell脚本,bash,shell,expect,osx-yosemite,Bash,Shell,Expect,Osx Yosemite,我试图让非管理员用户在需要root权限的共享环境中运行脚本。我打算构建一个调用expect的AppleScript或Automator应用程序来传递登录凭据(是的,我知道其中的危险,它将只执行)。然而,我让登录工作,但我试图运行的shell脚本似乎没有执行,因为它会立即返回。我是新来的,我相信我的剧本中有一个错误。有人吗 #!/usr/bin/expect set timeout 60 set password "MyPass" set command "bash /Applications/m

我试图让非管理员用户在需要root权限的共享环境中运行脚本。我打算构建一个调用expect的AppleScript或Automator应用程序来传递登录凭据(是的,我知道其中的危险,它将只执行)。然而,我让登录工作,但我试图运行的shell脚本似乎没有执行,因为它会立即返回。我是新来的,我相信我的剧本中有一个错误。有人吗

#!/usr/bin/expect
set timeout 60
set password "MyPass"
set command "bash /Applications/mampstack-5.4.36-0/ctlscript.sh start"
eval spawn login admin
expect "assword:"
send "$password\n"
expect "$"
send  "$command\n"
expect "$"
send exit
expect "$"
send exit

不要那样做。相反,编辑
/etc/sudoers
以添加以下行(或者,在MacOS的默认配置中,您可以在
/etc/sudoers.d
中创建一个包含以下内容的文件):

…然后,运行AppleScript或Automator代码:

sudo -u admin /Applications/mampstack-5.4.36-0/ctlscript.sh start

…完全不需要密码。

expect确实不是此项工作的合适工具。如果您有root用户,则可以在
/etc/sudoers
中添加一行,以允许用户以所需用户的身份运行此脚本,而无需任何密码。否则,您将以明文形式向世界公开您的密码,除非您跳过一个单独的权限提升环,以使用户无法读取脚本的文本。如果您真的需要expect答案,那么--expect脚本使用TCL语法,而不是bash语法,因此应将其标记为
TCL
,不是
bash
…但一般来说,做事情时不需要密码总比自动输入密码好。我认为这是最伟大的(简单而优雅的)想法!但是,我得到消息“不允许根用户执行”,它需要由具有管理员权限的用户运行,但不是根用户。我仍然需要以管理员身份登录。@Arana,然后使用
sudo-u用户名/Applications/mampstack-5.4.36-0/ctlscript.sh start
,将实际目标用户名替换为
用户名
。太棒了!现在一切都好了。我甚至添加了status和stop,然后将它们放入Automator Applescript选择器,并将它们传递给运行shell脚本,现在用户可以选择如何与脚本交互!非常感谢查尔斯!!
sudo -u admin /Applications/mampstack-5.4.36-0/ctlscript.sh start