「sudo:ソース:コマンドが見つかりません」

「sudo:ソース:コマンドが見つかりません」
$ source /etc/environment 

$ sudo source /etc/environment 
[sudo] password for t: 
sudo: source: command not found

bash実行中のシェルが実行中のシェルと異なるように見え、そのシェルの組み込み機能はsource /etc/environmentありません。source

しかし、私とルートのデフォルトシェルは両方ありますbash

$ echo $SHELL
/bin/bash

sudo別のシェルを使用している場合、その理由は何ですか?私は見たslmの返信しかし、私の場合は理解できません。

ベストアンサー1

sourceシェル組み込み関数なので、シェルがなければ実行できません。ただし、シェルはデフォルトでは実行されませんsudo。 ~からsudo

プロセスモデル

sudoは、コマンドを実行するときにfork(2)を呼び出し、上記のように実行環境を設定し、サブプロセスでexecveシステムコールを呼び出します。

シェルを明示的に実行するには、-s次のオプションを使用します。

# sudo -s source /etc/environment

シェルを終了すると、環境の変更が失われるため、まだ機能しません。

おすすめ記事