为什么这个Bash脚本在机器上运行,但在另一个上失败?

我写了一个程序需要访问我的主板的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