ディレクトリを変更してからコマンドをリンク( `exec`)しますか? [コピー]

ディレクトリを変更してからコマンドをリンク( `exec`)しますか? [コピー]

特定のディレクトリで任意のコマンドを実行できるコマンドはありますか?

Debian 10 では簡単に使用できますenv --chdir。ただし、env --chdirDebian 9インストールでは使用できません。

私が実行したいコマンドの一部は、スペースやその他の特殊文字を含めることができるシェル変数で構成されています。たとえば、私が実行したいコマンドが次のようになっているとします。

strace -- "$@"

したがって、以下は機能しません。

sudo -i sh -c 'cd my-directory && exec strace -- "$@"'

ええ、なぜこれを行うのですか?

sudo -i/を使ってsudo --loginコマンドを実行したいです。しかし、rootユーザーのホームディレクトリではなく、特定のディレクトリでコマンドを実行したいと思います。環境変数を設定できますが、sudoディレクトリを変更するオプションはないようです。

私は次の理由でこれを使用しますsudo -i:1)私は実行中のプログラム(私のAnsible Playbook)に行きたいですHOME=/root。これにより、プログラムが自分のホームディレクトリにルート所有ファイルを生成するのを防ぐことができます。 2)これはまったく新しい環境が私の​​問題を解決する最も原則的な方法のように聞こえますsudo-i

ベストアンサー1

これらの質問に対するあなたの要件が何であるかは明確ではないのでexec無視します。-i

しかしcdそれsudoまで

( cd «a directory»; sudo «a command» )

括弧は組み込み()サブシェルを生成し、コマンドなどを生成します。したがって、プロセスの数は同じです。また、環境変数を操作するため、必要ありません。cdsudoenvsudoenvsudo

おすすめ記事