如何使用 su 以该用户身份执行 bash 脚本的其余部分?

如何使用 su 以该用户身份执行 bash 脚本的其余部分?

我有一个以 root 用户身份创建的 bash 脚本my_script.sh,其中一部分必须切换到 sudo 用户。

我已经尝试过heredocs并且它正在工作,但问题是我无法在bash脚本中来回使用变量。

#!/usr/bin/bash
#Name of my Script is my_script

read -p "Enter hostname : " hostname
hostnamectl set-hostname $hostname
whoami
sudo -i -u my_username bash << 'EOF'
whoami
mkdir  ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
read -p "Enter Database Name : " dbname
echo "Database $dbname has been added to system!"
EOF

这种方法的问题是,如果我使用“EOF”,则我无法使用此处文档中的变量,$hostname如果我不使用“EOF”,那么我将无法使用其他变量,例如$dbname在此处文档中创建的变量。

我正在尝试提到的方法这里

#!/usr/bin/bash
if [ $(id -u) -eq 0 ]; then
  user=$1
  dir=$2
  cd "$dir"
  exec su "$user" "$0" -- "$@"
fi
whoami

在终端上:./my_script.sh my_username

错误: sh: 0: Can't open ./my_script.sh

my_username 具有 sudo 权限。
系统信息:Ubuntu 20.04

我该如何算出错误

答案1

无需在单个 shell 内运行它们。

您可以以 root 身份运行以下命令:

mkdir  ~my_username/.ssh
chmod 700 ~my_username/.ssh
nano ~my_username/.ssh/authorized_keys
chown -Rh my_username ~my_username/.ssh

一次调用 sudo 即可执行以下操作:

read -p "Enter Database Name : " dbname
echo "Database $dbname has been added to system!"

或者,尝试以 ${dbname} 格式指定变量

相关内容