gpt4 book ai didi

linux - 从 sudo-ed 环境启动 bash shell

转载 作者:太空宇宙 更新时间:2023-11-04 10:37:52 26 4
gpt4 key购买 nike

为令人困惑的问题标题道歉。我正在尝试从 shell 脚本(比如 shel2.sh)启动交互式 bash shell,该脚本已在 sudo-ed 环境中由父脚本(shel1.sh)启动。 (我正在创建一个引导式部署我的软件的脚本需要作为 super 用户安装,因此需要 sudo,但可能需要用户访问 shell。 )

这里是 shel1.sh

#!/bin/bash
set -x
sudo bash << EOF
echo $?
./shel2.sh
EOF
echo shel1 done

这里是 shel2.sh

#!/bin/bash
set -x
bash --norc --verbose --noprofile -i
echo $?
echo done

我希望这会启动一个交互式 bash shell,它会在返回 shel1.sh 之前等待我的输入。这是我看到的:

+ ./shel1.sh
+ sudo bash
0
+ bash --norc --verbose --noprofile -i
bash-4.3# exit
+ echo 0
0
+ echo done
done
+ echo shel1 done
shel1 done

bash-4.3# 自动调用 exit 并退出。有趣的是,如果我使用 -l(或 --login)调用 bash shell,自动输入是 logout !

有人可以解释这里发生了什么吗?

最佳答案

当您使用 here 文档时,您将 shell 及其派生的子进程的标准输入绑定(bind)到 here 文档输入。

在许多情况下,您可以避免使用此处文档。例如,将此处的文档替换为单引号字符串。

#!/bin/bash
set -x
sudo bash -c '
# Aside: How is this actually useful?
echo $?
# Spawned script inherits the stdin of "sudo bash"
./shel2.sh'
echo shel1 done

如果没有更多的细节,很难看出你到底想用它去哪里,但大多数现代 Linux 平台都有包管理器,它允许各种安装 Hook ,所以你通常不需要做这种事情.你调查过这个吗?

关于linux - 从 sudo-ed 环境启动 bash shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36564176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com