sudo -iコマンドが現在のディレクトリを変更するのを防ぐ方法は?

sudo -iコマンドが現在のディレクトリを変更するのを防ぐ方法は?

sudo -i COMMANDCOMMANDルートディレクトリで実行します$HOME

現在のディレクトリでスクリプトを実行しようとするとエラーが発生します。

$ sudo -i ./myscript.sh
-bash: ./myscript.sh: No such file or directory

私の場合、sudo -iコマンドは現在のディレクトリを/ rootに移動したため、/home/user/myscript.shを見つけることができません。

sudo -iコマンドに現在のディレクトリを保持させるにはどうすればよいですか?

sudoさまざまな環境とsudo -iそれに必要な環境があります。sudo -i

ベストアンサー1

ディレクトリを変更することはその一部ですsudo -i。ただし、前の位置に戻って次のコマンドを実行できます。

sudo -i sh -c "cd '$PWD'; ./myscript.sh"

$PWD一重引用符が含まれると失敗します。(一方で、知る $PWDスペースやシェルに特別な内容を含めないでください。一重引用符も削除できます。 )

より安全な方法は次のとおりです。

sudo -i sh -c 'cd "${1}"; ./myscript.sh' sh "$PWD"

(ユーザーのログインシェルが途中で実行され、別の拡張ラウンドが発生するため、通常のコマンドは期待"$1"どおりに機能しません。これらの拡張を防ぐためにコマンドをエスケープしようとしますが、失敗します(など)。sudo -i$1$foo「sudo --login」で「sh -c」を実行すると、位置パラメータは拡張されません。解決策はありますか?血まみれの詳細を取得します。 )


とにかく、スクリプトが通常ルートによって実行されるツールである場合は、ルートがあるディレクトリにスクリプトを配置するのがPATH妥当です。そしてでのみ書くことができますroot。通常、root以外のユーザーが実行を台無しにする可能性を避けるのが最善ですが、通常のアカウントのrootホームディレクトリにある場合、問題の可能性はおそらく最小限に抑えられます。

おすすめ記事