我写了一个程序需要访问我的主板的I / O端口,所以它需要root权限。 我想在系统启动时运行这个程序,但是由于Ubuntu系统启动时无法运行具有root权限的应用程序,我写了这两个简单的文件:
askpass.sh
export SUDO_ASKPASS="/var/www/Bash/mits/getpass.sh"; sudo -A -E /home/mits/QtProjects/HandST/HandST // this is the address of my application
getpass.sh
echo 'P54_99**' //this is my password
因为它出现在askpass.sh文件中,所以我使用sudo手册中提到的SUDO_ASKPASS来运行我的应用程序,其中sudo密码位于另一个文件中。
当我在我的笔记本电脑上调用askpass.sh时,它工作正常,应用程序将启动,但是当我在位于我的办公室的PC服务器上运行此脚本时,出现以下错误(我使用远程访问来访问我的服务器)
./askpass.sh **./askpass.sh: line 5: $'\r': command not found** sudo: unable to run /var/www/Bash/mits/getpass.sh: Exec format error Sorry, try again. sudo: unable to run /var/www/Bash/mits/getpass.sh: Exec format error Sorry, try again. sudo: unable to run /var/www/Bash/mits/getpass.sh: Exec format error Sorry, try again. sudo: 3 incorrect password attempts
这个$'\ r'variables是什么(在我的代码中,我没有这样的东西!看起来\ n在文件末尾或类似的东西!!!)! 这两个文件是完全一样的我的笔记本电脑文件只有path和密码已更改为服务器,但为什么它无法在我的服务器上运行? 我相信密码被修改为服务器密码,我testing了很多次。 但我不知道为什么它也给密码错误:(
我也尝试把我的应用程序path在rc.local中运行的根权限,但也失败了。
我只想尝试这一个作为解决scheme,所以我会很乐意提出你的解决scheme,这种types的启动处理。
提前致谢。
你似乎在你的shell脚本中嵌入了windows行尾( \r\n
),你可以在这个文件上运行命令dos2unix
,并且应该修复它。 如果你没有dos2unix
你可以使用tr
和类似的东西,
tr -d '\r' < askpass.sh > out.sh
然后
mv out.sh askpass.sh
尝试添加这个脚本的第一行
#!/bin/bash
也许你在其他机器上设置了不同的shell。 尝试通过运行检查
env | grep SHELL