bash 脚本不在启动时运行

bash 脚本不在启动时运行

我创建了一个名为 echo.sh 的简单 bash 脚本。它输出一个字符串。我已经确定它是可执行的。然后我通过 GUI 界面将其添加到“启动应用程序”程序中。但是,当我重新启动计算机时,它似乎没有被执行,因为终端中没有出现回声。

根据我的理解,脚本在执行时不应该自动打开终端,因为 STDOUT 是终端文件。但是,如果我自己从终端启动该脚本,则该脚本可以正常工作。

回声文件

#!/bin/bash

echo "hello this is a bash script talking"

使其可执行

chmod +x echo.sh

添加到“具有正确的文件目录的启动应用程序” /home/sam/Documents/bash/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将显示系统启动日志的输出,即脚本运行时的输出。

相关内容