登录主目录后以 sudo 身份执行可见的 shell 脚本

登录主目录后以 sudo 身份执行可见的 shell 脚本

我有一个脚本,当我将它手动放入/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

奇怪的需求,在登录时自动一次又一次地安装软件包。然而,你可能有充分的理由。

您可以使用“启动应用程序”在登录后自动启动终端,然后启动您的脚本。

  1. 修改脚本并删除sudo。您将以 root 身份运行整个脚本。
  2. 自动启动 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/文件夹中

  1. /home/ubuntu/init.sh

其中包含

#!/bin/bash
gnome-terminal -- sudo '/home/ubuntu/script.sh'
  1. /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 的帮助。

相关内容