私は他のユーザーに代わっていくつかのパラメータ化されたコマンドを実行する必要があるルートとして実行される簡単なスクリプトを書いています。
たとえば、次の例では、「VER」変数から取得したバージョンを使用してディレクトリを作成したいのですが、いくら実行されません。VER変数値がVER変数値に渡されていませんコマンドが正しく実行されました(コマンドを引用符などで囲むなどの二重使用を試みました)。
VER='10.2.1'
su - other_user -c 'mkdir -p /home/other_user/$VER'
これを達成する方法についてのアイデアはありますか?
答え1
実行されたコマンドに変数を渡すことは、su -c
変数をスクリプトに渡すのと同じです。sh -c
bash -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:~$