【发布时间】:2015-02-01 09:16:33
【问题描述】:
我想自动化构建 - 目前,在我的开发过程中,因此不涉及安全问题。
我创建了一个脚本,将库移动到/usr/local/lib 并发出ldd 命令。
这些东西需要 sudo。
从构建器(Qt Creator)运行脚本,我没有被提示输入我的 sudo 密码,我得到了错误
sudo: no tty present and no askpass program specified
Sorry, try again.
我已经找到了一些solutions,但它只是没有用......我错过了什么?
具体代码:
in myLib.pro
#temporary to make my life easier
QMAKE_POST_LINK = /home/me/move_libs_script
in move_libs_script:
#!/bin/bash
sudo cp $HOME/myLib/myLib.so.1 /usr/local/lib/
sudo ldconfig
我按照上面答案的建议做了:编辑了 visudo 并添加了脚本...甚至添加了 qmake...
sudo visudo
added at the end:
me ALL=NOPASSWD: /home/me/move_libs_script, /usr/bin/qmake-qt4
它保存了文件:/etc/sudoers.tmp(然后再次执行命令sudo visudo,我看到我的更改被保留了,所以我不确定 tmp 是什么)
还是一样的错误
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
编辑:在提出问题后,我发现了一个建议的类似问题: https://stackoverflow.com/a/10668693/1217150
所以我尝试添加自定义步骤...
结果:
09:50:03: Running build steps for project myLib...
09:50:03: Could not start process "ssh-askpass Sudo Password | sudo -S bash ./move_libs_script"
Error while building project myLib (target: Desktop)
When executing build step 'Custom Process Step'
(如果我从终端运行,我会被要求输入密码)
新编辑:所以我认为我可以超越系统并调用调用我的脚本的脚本...
myLib.pro
QMAKE_POST_LINK = /home/me/sudo_move_libs_script
sudo_move_libs_script:
#!/bin/bash
ssh-askpass Sudo Password | sudo -S bash $HOME/move_libs_script
知道了!!!我猜我会发布答案
新编辑作为评论的答案:
in mainExe.pro:
QMAKE_POST_LINK = ./link_lib
in link_lib:
#!/bin/sh
LD_LIBRARY_PATH=$HOME/myLib
export LD_LIBRARY_PATH
结果:可执行文件失败,因为找不到库(当然在测试之前我从 /usr/local/lib 删除了副本)
【问题讨论】:
-
您在
sudoers中列出的命令是可以与sudo一起使用的命令。不是命令/脚本/等。那将调用sudo。您是否安装了ssh-askpass程序? -
刚刚编辑了我从终端测试的,它可以从那里工作
-
自定义命令的环境可能没有正确设置
DISPLAY环境变量,无法显示窗口。 -
如何检查是否是这种情况,如果是,我该如何解决? (我刚刚尝试的另一种解决方法失败了)
-
env的自定义命令将向您吐出它所拥有的环境。如果没有,您只需将其设置为适当的值。终端中的echo $DISPLAY会告诉你。