우분투에서`setx`


10

Windows에는 setx사용자 또는 시스템 환경에서 환경 변수를 작성하거나 수정 하는 powershell 명령이 있습니다.

합니까 우분투는 이와 유사한 명령을 가지고 사용하지 즉 nano또는 vi추가하거나 다양한 환경 변수 시스템을 업데이트하기 위해, 하나 개의 라인을.

구현 된 솔루션

추가 / 업데이트 할 한 줄

grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment

답변:


12

명령 행에서 새 것으로 선언하거나 다시 선언하면됩니다. 예를 들어, ~/testfolder경로 변수 에 추가 하려면 현재 터미널에 간단히 입력하면됩니다 (이것은 단지 예일뿐입니다).

PATH="$HOME/testfolder:$PATH"

이것은 물론 터미널 세션이 열린 시간 동안에 만 변경됩니다. $여기 에서 사용법을 확인하고 선언을 위해 남겨 두십시오. 그러나 표시하려면 $내용을 확장 하기 위해 추가해야합니다 .

보다 오래 지속되고 일반적인 것으로 선언하려는 경우 ~/.bashrc파일을 /etc/bash.bashrc사용자 또는 모든 사용자에 대해 계산하려는 경우 (예 : 파일 만) 또는 시스템 전체에 추가 할 수 있습니다 . 다른 옵션은 .profile파일을 파일 에 추가하여 로그인 한 시점부터 파일을 실행할 수있는 위치에 추가하는 것입니다. echo예를 들어이 변수가 설정되어 있지 않은지 또는 새 변수를 만드는 경우 (예제 만) :

echo "variable=value" >> /path/filename

그러나 사용자 디렉토리 외부에서 파일을 편집하려면 편집 /etc/bash.bashrc해야 할 때 사용해야 sudo하므로 '여기 문서'를 사용할 수 없으므로 대신 다음과 같은 줄을 사용하십시오.

echo "variable=value" | sudo tee -a /path/filename

그러나 변수가 이미 존재하는 경우 다음 명령으로 변수를 변경할 수 있습니다 sed(예제 만 해당).

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

파일에서 변수를 편집하지만 편집 전에 변수를 백업합니다. sed를 사용하여 사용자 디렉토리 외부의 파일을 변경하면 sudo대부분의 경우 다음 행을 사용해야합니다.

sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename

파일에서 변수를 제거하는 것도 가능합니다 sed. 정규식의 두 번째 부분을 비워 두십시오.

sed -i.bak 's/variable=value//' /path/filename

관심있는 환경 변수가 설정되어 있으면 env명령을 사용하여 변수 를 나열 ( set -o posix ; set ) | less하거나 sh -c set. 세 가지 모두 다양한 양의 출력을 ( set -o posix ; set ) | less제공하며 실제로 설정된 최대 변수를 돌려줍니다.


1
대신에 ( set -o posix ; set )이 말을 간단합니다 sh -c set. 이것은 일반적으로 현대 우분투 버전에는없는 sh심볼릭 링크 인 경우에도 작동 bash합니다.
Ruslan

@ruslan sh -c set은 실제로 시스템에 설정된 모든 환경 변수를 보여주지 않습니다. 그러나 나는 그것들 중 일부를 보여주는 세 번째 방법으로 포함시킬 것입니다.
Videonauth

실제로 sh -c set모든 환경 변수를 보여줍니다 . 호출 쉘의 변수를 표시하지는 않지만 사용자가 쉘 쉘에서 실행하는 프로세스에 의해 상속되지는 않습니다 export.
Ruslan

거기에 지금까지 편집에 대한 타당한 이유 /etc/environment? 그것은 혼란의 지름길 인 것 같습니다.
Roger Lipscombe

@RogerLipscombe 감사합니다. 확실하지 않습니다. 변수를 편집 할 수있는 실용적인 장소이지만 혼동을 일으키지 않기 위해 제거했습니다.
Videonauth

11

와 직접 동등한 것은 setx /m없지만 무엇을 수행 할 수있는 방법 setx /m이 있습니다.

setx /m에 넣 variable=value습니다 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. 비 / m (즉 사용자 당)은 setx단순히 variable=valuein을 넣 습니다 HKCU\Environment.

구체적으로 '시스템 전체'를 요청했습니다. 이를 위해 변수 값 쌍을 /etc/environmentOR에 추가합니다 /etc/profile.d/<yourfile>. 전자는 pam으로 평가되고 후자는 pam으로 평가됩니다 /bin/sh. 따라서 /etc/profile.d/<yourfile>에을 추가 variable=value; export variable합니다. (bash는을 허용합니다 export variable=value). 들어 /etc/environment당신은 추가합니다 variable=value.

사용자 당 등가는 ~/.pam_environment~/.profile입니다.

참조 : https://help.ubuntu.com/community/EnvironmentVariables


7

명령 행에서 환경 변수를 내보낼 수 있지만 이미 시작된 프로세스의 유효 환경에는 영향을 미치지 않으며 현재 프로세스 및 해당 서브 프로세스에서만 영향을 미칩니다. 따라서 실제로 환경 변수를 변경할 때 종종 다시 로그인해야합니다.

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