从启动新 shell 的命令调用脚本

从启动新 shell 的命令调用脚本

使用Ubuntu 20.04。我可以通过手动调用创建 shell 的命令,然后从这个新 shell 中调用第二个脚本来禁用覆盖文件系统。不过我希望能够编写脚本,这样我就可以自动更新电脑。

以下是我运行来禁用 OverlayFS 的两个脚本:

脚本1:打开一个允许永久更改的shell(overlayroot-chroot创建一个新的shell)

#!/bin/bash
# Enter chroot mode, which allows one to make permanent changes to / parition

echo "Enter mood to make permanent changes"
echo "Press CTRL+D to exit when finished editing"
sudo overlayroot-chroot

脚本 2:进行更改

#!/bin/bash
# Disable OverlayFS

echo "Disable overlayfs (read only file system at /)"
FILE=/etc/overlayroot.conf
cat << EOF | sudo tee $FILE
overlayroot_cfgdisk="disabled"
overlayroot=""
EOF

echo "COMPLETE."
echo "Press CTRL+D to exit chroot mode."
echo "Then 'sudo reboot' for the changes to take effect."

脚本 2 需要在脚本 1 创建的 shell 内运行。

但是如何传递命令来运行到新创建的 shell 中呢?

答案1

那是行不通的。每个脚本都会生成一个具有自己 PID 的新 shell。
我将在 script2.sh 中创建一个 bash 函数,并在 script1 中创建源 script2。
在 script1 中调用 script2 中的函数。

脚本1

source ./script2.sh
# call the function
do_stuff

脚本2

do_stuff() {
  echo "hello world"
}

答案2

通过简单地回显命令来运行overlayroot-chroot(我之前没有成功过)来解决这个问题:

echo "source /home/path/to/overlayfs/disable.sh" | sudo overlayroot-chroot

相关内容