我想自动化构建 - 现在,在我的开发过程中,所以不涉及任何安全性问题。
我创建了一个脚本,将库移动到/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
结果:可执行文件失败,因为找不到lib(当然在测试之前我已经从/usr/local/lib
移动了副本)
答案 0 :(得分:0)
解决方案1:
使用来自Qt的sudo运行我需要的命令,并要求输入密码
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
move_libs_script:
#!/bin/bash
cp $HOME/myLib/myLib.so.1 /usr/local/lib/
ldconfig
解决方案2
避免使用sudo:从Qt Creator运行自定义可执行文件(就像部署项目时一样) - 我可以使用正确的依赖项执行我的程序。不幸的是,它不适用于调试。
在运行配置中,放置一个脚本" dummy_executable"而是app可执行文件:
dummy_executable:
#!/bin/sh
LD_LIBRARY_PATH=$HOME/myLib
export LD_LIBRARY_PATH
$HOME/myExec/myExec "$@
这个方法非常适合运行程序......遗憾的是gdb失败了...我认为它试图调试shell脚本?因此,如果我试图完成我的计划,它将无法工作。
选择解决方案1,因为它具有优势:允许我构建和调试程序,这是我真正需要的,并且通过依赖集设置我在运行程序之前构建了库 - 这是完美的。
谢谢Etan Reisner