
私は非常に怠惰で、ソフトウェアを自動的にコンパイルするスクリプトを書くことを好みます。私にとっては、これらのスクリプトはかなり長くなる可能性があるため、rootとして実行するのは簡単ですが、個々のソフトウェアを権限のないユーザーにコンパイルする方が簡単です(したがってsudo -u)。これまではこれを行うことができましたが、現在は条件が評価されていないため、問題が発生しています。だから、次のようになります。
sudo -u name if [ ! -f $HOME/file ];then echo "file not found";fi
本当に死んでいます...ただthen
...これをどのように修正できますか?
答え1
あなたはできます:
sudo -H -u name bash -c '[ -f "$HOME"/file ] || echo "file not found"'
[ -f "$HOME"/file ] || echo "file not found"
あなたが望むように正確にしてくださいif..then
。
からman sudo
:
-H、--ホームページ設定
セキュリティー・ポリシーが、HOME 環境変数をターゲット・ユーザーのパスワード・データベース項目に指定されたホーム・ディレクトリーに設定するように要求します。ポリシーによっては、これがデフォルトの動作である可能性があります。
答え2
現在のシェルはセミコロンを見て、sudo
そこでコマンドを終了します。したがって、sudoではセミコロンのみを見ることができますif [ ! -f $HOME/file ]
。
- 特殊文字を避ける
- 完全なsudoコマンドを引用するか(テストされていません)
- コマンドを(必要に応じて一時的に)シェルスクリプトに入れ、sudoをスクリプトに割り当てます。