我有一个以 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} 格式指定变量