“sudo : source : 명령을 찾을 수 없습니다”


15
$ 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다른 쉘 indeeds 사용하는 이유는 무엇입니까? 나는 보았다 SLM의 대답을 하지만, 내 경우에는 이해가 안 돼요.


4
sourcesudo쉘 내장. 외부 명령처럼 쉘 내장을 실행할 수 없습니다 .
heemayl

파일을 읽을 수 없거나 파일에 정의 된 환경이 후속 sudo 명령에 적용되도록하려는 문제입니까?
Random832

@ Random832 : 파일에 정의 된 환경이 후속 sudo 명령에 적용
되기를 원함

답변:


23

source쉘 내장이므로 쉘 없이는 실행할 수 없습니다. 그러나 기본적으로 sudo쉘을 실행하지 마십시오. 에서sudo

공정 모델

sudo가 명령을 실행할 때 fork (2)를 호출하고 위에서 설명한대로 실행 환경을 설정하고 하위 프로세스에서 execve 시스템 호출을 호출합니다.

쉘을 명시 적으로 실행하려면 -s옵션을 사용하십시오 .

# sudo -s source /etc/environment

쉘이 종료 된 후 환경 변경 사항이 유실되므로 여전히 쓸모가 없습니다.


7

질문에 대답하기보다는 문제해결 하는 영역에서 루트 만 읽을 수있는 파일을 소스로 만드는 가장 확실한 방법은 다음과 같습니다.

source <(sudo cat /etc/environment)

이것은 프로세스 대체를 사용 합니다 . cat명령 의 출력을 가져와 의사 파일로 변환하여 전달할 수 source있습니다. 그런 다음 source는 현재 쉘에서 명령을 실행합니다.

대부분의 시스템에서,하는 것으로 /etc/environment세계 읽을 수있는, 당신이 그렇게 해야지 만이 실행할 수 있도록 :

source /etc/environment

1
이 작품은 받아 들여지지 않습니다
Claudiu Creanga

2

sudo명령이 필요하지만 쉘을 제공하므로 명령을 찾을 수 없습니다. 당신이 작성하는 경우 type source: 당신은 출력을 볼 수 있습니다 source is a shell builtin및 출력 which source빈입니다.

예를 들어 strace가 명령이기 때문에 sudo strace작동하고 which strace출력을 제공합니다.

편집 : 또한 sudo su;sudo source /etc/environment다른 쉘이 사용되지 않도록 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.