sudo bash で実行したときにコマンドが見つかりません

sudo bash で実行したときにコマンドが見つかりません

私は自分のマシンに ssh で接続し、いくつかのコマンドを実行するために、sudo bashまず最初に次の操作を行う必要があります。

対話型ターミナルセッションで、次のように実行します。

[vagrant@33 ~]$ sudo bash
[root@33 vagrant]# which bundle
/opt/upnxt/rbenv-0.4.0-7/shims/bundle

うまくいきます。しかし、これを 1 行で行う必要がある場合は、次のようになります。

[vagrant@33 ~]$ sudo bash -c "whoami; which bundle"
root
which: no bundle in (/sbin:/bin:/usr/sbin:/usr/bin)

動作が停止します。なぜこのようなことが起こるのでしょうか。また、最初のシナリオと同じように動作させるには、2 番目のシナリオで他に何を行う必要がありますか。

答え1

を呼び出すと、sudo bashbashの新しいインスタンスが実行されますuser root environment。ただし、を呼び出すと、sudo bash -c "whoami; which bundle"環境はユーザーのままになります。そうしたくない場合は、sudoオプションで最後の呼び出しを変更できます。-i

-私- ログイン

対象ユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、ログイン固有のリソースファイル(。プロフィールまたは。ログインシェルによって読み込まれます。コマンドが指定されている場合は、シェルの-cオプション。コマンドが指定されていない場合は、対話型シェルが実行されます。 須藤シェルを実行する前に、そのユーザーのホームディレクトリに変更しようとします。コマンドは、ユーザーがログイン時に受け取る環境と同様の環境で実行されます。コマンド環境セクションのsudo ユーザ(5)マニュアルでは、sudoersポリシーが使用されている場合に、-iオプションがコマンドが実行される環境にどのように影響するかを説明しています。

関連情報