以下は簡単なスクリプトです。a.sh
#name: a.sh
user=$(whoami)
sudo runuser -l test2 -c 'touch /home/test2/$user.file'
test1
現在のユーザーのユーザー名を変数に保存しuser
、ディレクトリに/home/test2
userとしてファイルを作成しようとしています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"