suが実行するコマンドに引数を渡す

suが実行するコマンドに引数を渡す

他のユーザー(現在のユーザーはroot)でコマンドを実行したいと思います。だから私は

su newuser -c 'mkdir "/tmp/test"'

しかし、パラメータを渡すのに問題があります。

i="name"
su newuser -c 'mkdir "/tmp/$i"'

またはスクリプトから

su newuser -c 'mkdir "/tmp/$1"'

答え1

この動作の理由は、一重引用符内で変数拡張が無効になるためです。二重引用符内で有効になります。たとえば、参照してください。このQ&Aより多くの洞察を得るために。

suしたがって、次のように通話を変更できます。

i="name"
su newuser -c "mkdir '/tmp/$i'"

引数はsu二重引用符で囲まれているので、一重引用符$i(最終結果が渡される解釈シェルの場合su)は単に「テキスト」にすぎず、もはや特別ではないので拡張されます。

関連情報