我编写了一个程序,需要访问我主板的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'变量(我的代码中没有这样的东西!在文件的末尾或类似的东西看起来像\ n!)!这两个文件与我的笔记本电脑文件完全相同,只更改了服务器的路径和密码,但为什么它无法在我的服务器上运行?我确信密码被修改为服务器密码,我测试了很多次。但我也不知道为什么它也会给密码带来错误:(
我还尝试将我的应用程序路径放在以root权限运行的rc.local中,但它也失败了。
我只想尝试这个作为解决方案,所以我很乐意为这种类型的启动处理提出解决方案。
提前感谢。
答案 0 :(得分:3)
您似乎在shell脚本中嵌入了Windows行结尾(\r\n
),您可以在文件上运行命令dos2unix
,并且应该修复它。如果您没有dos2unix
,则可以使用tr
之类的内容,
tr -d '\r' < askpass.sh > out.sh
然后
mv out.sh askpass.sh
答案 1 :(得分:1)
尝试将此添加为您脚本的第一行
#!/bin/bash
也许你在其他机器上设置了不同的shell。请尝试运行
进行检查env | grep SHELL