我创建了一个名为 echo.sh 的简单 bash 脚本。它输出一个字符串。我已经确定它是可执行的。然后我通过 GUI 界面将其添加到“启动应用程序”程序中。但是,当我重新启动计算机时,它似乎没有被执行,因为终端中没有出现回声。
根据我的理解,脚本在执行时不应该自动打开终端,因为 STDOUT 是终端文件。但是,如果我自己从终端启动该脚本,则该脚本可以正常工作。
回声文件
#!/bin/bash
echo "hello this is a bash script talking"
使其可执行
chmod +x echo.sh
结果
但是,当我重新启动系统时,脚本不会按预期运行,并且不会出现带有回显消息的终端。我不确定为什么,我可能完全没有抓住重点,如果是这样,请告诉我。
只是要注意,我的所有其他 bash 脚本都可以工作,例如我的“cleanup.sh”脚本,它也在“启动应用程序”程序中。
尝试修复
我尝试将 STDOUT 重定向到终端文件 /dev/tty。然而这似乎不起作用。
#!/bin/bash
echo "hello this is a bash script talking" >/dev/tty
我还用一个简单的 rm 命令测试了 bash 脚本,只是为了检查是否只是 echo 命令有问题。但是,当添加到启动应用程序或 .bashrc 文件时,它不会删除与脚本同一目录中的 test.txt。但是,当我从终端手动执行时有效。
#!/bin/bash
rm ./test.txt
我还测试了启动应用程序本身,只需打开 Firefox,只需使用命令 Firefox。哪个工作没有问题。那么他们似乎不是启动应用程序本身的问题?
答案1
该脚本可能有效,但脚本的 STDOUT(无论输出定向到何处)连接到操作系统上与启动启动脚本有关的进程,如下所示,该脚本不在终端中运行,而是隐藏在用户中例如内核中的进程。要打开带有此消息的终端,您可能应该将其编辑为
#!/bin/bash
gnome-terminal -e 'echo "hello this is a bash script talking"'
(我现在不在 Ubuntu 上,所以无法测试这一点,但要点是显式打开一个您希望此消息显示在其中的终端)
答案2
您可以检查您创建的自动启动文件的配置文件
cat ~/.config/autostart/NAME.desktop
如果您想在终端中执行脚本,您应该添加
Terminal=true
到该文件中。
您还可以Hidden=false
根据自己想要实现的目标进行相应设置。
答案3
最简单的方法是使用 crontab ,如下所示;
crontab -e
将脚本添加到 contrab 文件的末尾
#
@reboot /path-to-your-script/your-script-name.sh
然后重启即可观察变化
答案4
你应该/bin/bash -c
在你的前面添加'/path/to/your/script.sh'
/bin/bash -c '/path/to/your/script.sh'
命令echo
输出将在您的系统日志中可见,而不是在终端中可见。
journalctl -b
将显示系统启动日志的输出,即脚本运行时的输出。