
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
単一のシェル内で実行する必要はありません。
ルートとして次のコマンドを実行できます。
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} 形式で変数を指定してみてください。