在启动时自动运行脚本:脚本无法正常工作。
在启动时自动运行脚本:脚本无法正常工作。
我想在我的Parallella板上的启动时运行一个bash脚本,它装有Ubuntu。我在Stack Overflow上搜索并在这里找到了指示:
我的bash脚本是test.sh
,只有一行代码:
echo "Hello World" &> /home/qsp/WIP/test/hello.txt
1) 我尝试的第一种方法是将脚本的绝对路径添加到/etc/rc.local
中:
/home/qsp/WIP/test/test.sh
2) 我尝试的第二种方法是按照上面接受的答案进行操作。
sudo mv test.sh /etc/init.d/ sudo update-rc.d test.sh defaults
在这两种情况下,脚本在启动后被执行,并且在文件夹中创建了一个名为hello.txt
的文件。然而,文件的内容为空(所有者为root)。我想知道是否有什么遗漏。谢谢。
======更新=======
根据Skynet的答案,我将我的脚本改为:
echo "Hello World" | tee /home/qsp/WIP/test/hello.txt
启动后,脚本正确地将内容写入文件。我还有一个问题,为什么我的原始带有&>
的脚本不起作用,尽管如果从命令行运行仍然有效。
问题的原因是脚本在自动启动时不能正常工作,解决方法是创建一个.desktop文件,并配置系统在登录时自动启动。
首先,创建一个.desktop文件,文件路径为~/.config/autostart/test_script.desktop。可以使用以下命令:
$ vim ~/.config/autostart/test_script.desktop
在文件中添加以下信息:
[Desktop Entry]
Type=Application
Name=Test script
Exec=~/test.sh
X-GNOME-Autostart-enabled=true
注意,其中的~/test.sh应该指向你创建的脚本。然后保存文件。
将.desktop文件设置为可执行:
$ chmod o+x ~/.config/autostart/test_script.desktop
重新启动电脑,下次登录时你的脚本应该会自动运行。
问题原因:脚本在启动时自动运行时没有正常工作。
解决方法:在编辑了/etc/rc.local
并添加了命令后,确保脚本总是以exit 0结束。同时,使用chmod
命令将其设置为可执行。
具体步骤如下:
1. 编辑/etc/rc.local
文件,在其中添加需要运行的命令。
2. 确保脚本以exit 0
结束。
3. 使用chmod
命令将脚本设置为可执行。例如:chmod 777 test.sh
4. 将输出行更改为echo "Hello World" | tee /home/qsp/WIP/test/hello.txt
。
关于为什么需要将&>
更改为| tee
,以及两者之间的区别,请参考以下解释:
tee
是一个命令,它的工作方式类似于shift
,但是有一些不同之处,使其可以在这种情况下在shell脚本中使用重定向。
在更改为tee
后,脚本成功将输出写入文件。关于为什么在启动后&>
不起作用,而在命令行中运行时仍然起作用的原因,可能是由于不同的环境变量或权限设置导致的。
问题原因:脚本没有正确地在启动时自动运行。
解决方法:按照第一个SO问题中引用的方式,将脚本编写成init脚本风格。例如:
case "$1" in start) #启动代码 ;; stop) #停止代码 ;; restart) #重启代码 ;; esac
同时,可以参考https://github.com/fhd/init-script-template/blob/master/template,了解更多关于init脚本的模板。