我有一个脚本,当我将它手动放入/home/ubuntu
目录中并使用 sudo 权限手动执行它时,它可以正常工作(它必须从 $HOME 目录运行)。
脚本路径为:
/home/ubunt/script.sh
..看起来像这样
#!/bin/bash
sudo add-apt-repository -y ppa:maas/3.0-next
sudo apt update
sudo apt install -y maas jq markdown nmap traceroute git curl wget zfsutils-linux cloud-image-utils virtinst qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils whois
sudo maas createadmin --username ubuntu --password password --email [email protected] --ssh-import gh:wt-b
...
我想让它在登录时运行(一次),并且我需要查看发生了什么(可视命令行)。
我已经检查了/etc/init.d
文件夹的选项(以及/lib/systemd/system
我通过 systemctl 激活服务的文件夹),通过以下命令行调用脚本
#!/bin/bash
gnome-terminal -e '/home/ubuntu/script.sh'
或者没有可见的 cmd 界面
#!/bin/bash
source /home/ubuntu/script.sh
但它失败了并且只安装了一些组件。
有什么想法吗?谢谢
答案1
奇怪的需求,在登录时自动一次又一次地安装软件包。然而,你可能有充分的理由。
您可以使用“启动应用程序”在登录后自动启动终端,然后启动您的脚本。
- 修改脚本并删除
sudo
。您将以 root 身份运行整个脚本。 - 自动启动 Ubuntu 桌面的默认终端仿真器 Gnome Terminal,如下所示:
gnome-terminal -- sudo <path-to-your-script>
登录后,终端将启动,您将看到输入密码的提示sudo
。输入密码后,脚本将运行,输出将出现在终端中。
脚本完成后,终端将关闭。为了防止这种情况发生,您可以添加命令“bash”以保持 shell(和终端仿真器)打开,或者使用如下提示符
read -rsn1 =p $'Press a key to continue\n'
答案2
好的,我找到了 vanadium 提到的启动任务的解决方案。
但我想我应该说得更明确一些。
我使用 3 个文件:
两个位于/home/ubuntu/
文件夹中
/home/ubuntu/init.sh
其中包含
#!/bin/bash
gnome-terminal -- sudo '/home/ubuntu/script.sh'
/home/ubuntu/script.sh
其中包含我想要执行的实际代码
#!/bin/bash
sudo add-apt-repository -y ppa:maas/3.0-next
sudo apt update
sudo apt install -y maas jq markdown nmap traceroute git curl wget zfsutils-linux cloud-image-utils virtinst qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils whois
sudo maas createadmin --username ubuntu --password password --email [email protected] --ssh-import gh:wt-b
...
然后我们需要通过将配置文件放入文件/etc/xdg/autostart
夹 3)中来启用启动应用程序/etc/xdg/autostart/conf.desktop
其中包含以下信息:
[Desktop Entry]
Version=1.0
Name=LordofSpaghettis
Comment=Spaghettis are good
Exec=/home/ubuntu/init.sh
Path=/home/ubuntu/
Terminal=true
Type=Application
X-GNOME-Autostart-enabled=true
Categories=Utility;Development
然后当我重新启动计算机并注销并再次登录时,系统会提示我输入 sudo 密码。然后一切正常。感谢 vanadium 的帮助。