su - bashコマンドに変数を追加する方法

su - bashコマンドに変数を追加する方法

私は他のユーザーに代わっていくつかのパラメータ化されたコマンドを実行する必要があるルートとして実行される簡単なスクリプトを書いています。

たとえば、次の例では、「VER」変数から取得したバージョンを使用してディレクトリを作成したいのですが、いくら実行されません。VER変数値がVER変数値に渡されていませんコマンドが正しく実行されました(コマンドを引用符などで囲むなどの二重使用を試みました)。

VER='10.2.1'
su - other_user -c 'mkdir -p /home/other_user/$VER'

これを達成する方法についてのアイデアはありますか?

答え1

実行されたコマンドに変数を渡すことは、su -c変数をスクリプトに渡すのと同じです。sh -cbash -c

su other_user -c 'mkdir -p "/home/other_user/$1"' sh "$VER"

これら2つのパラメータとshは、それぞれ(エラーメッセージでシェルが使用する)とで始まるシェルに渡されます"$VER"su$0$1

関連:

答え2

二重引用符はトリックを実行する必要があります。当然負けなければなりませんecho

steve@DESKTOP-E197DDI:~$ VER='10.2.1'
steve@DESKTOP-E197DDI:~$ su - steve -c "echo mkdir -p /home/other_user/$VER"
Password:
mkdir -p /home/other_user/10.2.1
steve@DESKTOP-E197DDI:~$

関連情報