マイコンピュータに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 bash
bashの新しいインスタンスが実行されますuser root environment
。ただし、環境を呼び出すと、sudo bash -c "whoami; which bundle"
ユーザーは環境を引き続き使用できます。これを望まない場合は、sudo
オプションで最後の呼び出しを変更できます。-i
-私、- ログイン
ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、特定のリソースファイルにログインすることを意味します。。輪郭または。ログインシェルから読み込まれます。コマンドが指定されると、シェルのコマンドを介して渡されます。-氏オプション。コマンドを指定しないと、対話型シェルが実行されます。 Sudoシェルを実行する前に、そのユーザーのホームディレクトリに変更してみてください。このコマンドは、ユーザーがログインしたときに受信するのと同様の環境で実行されます。コマンド環境一部sudoers(5) マニュアルには、sudoers ポリシーを使用するときに -i オプションがコマンドが実行される環境にどのような影響を与えるかが記録されています。