他のユーザーのシェルに変数値を渡す

他のユーザーのシェルに変数値を渡す

以下は簡単なスクリプトです。a.sh

#name: a.sh
user=$(whoami)
sudo runuser -l test2 -c 'touch /home/test2/$user.file'

test1現在のユーザーのユーザー名を変数に保存しuser、ディレクトリに/home/test2userとしてファイルを作成しようとしていますtest2。スクリプトはエラーなしで返されますが、ビルドはありませんtest1.file/home/test2ツアー結果.fileという変数があることがわかりました/home/test2。これはtest2、シェル環境に入った後に$user変数が解析されないことを意味します。

どうやって解決しますか?

ベストアンサー1

$userコマンドライン拡張は、コマンドが実行される前にsudo発生します。touchその時点でアクティブな環境(おそらくクリアsudo)では、その値は定義されていないため、空の文字列に展開されます。ここから呼び出しファイルを取得できます.file

正しい名前でファイルを生成するには、touchコマンドの周囲に二重引用符を使用します。これにより$user拡張が保証されます。今後 sudo呼び出されます:

sudo runuser -l test2 -c "touch /home/test2/$user.file"

runuser注:それが何であるかわかりません。私は使用します

sudo -u test2 touch "/home/test2/$user.file"

おすすめ記事