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」を使用するとここで文書内の変数を使用できず、「$hostnameEOF」を使用しないと$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} 形式で変数を指定してみてください。

おすすめ記事