`env <command>`는 무엇을하고 있습니까?


37

명령은 무엇입니까 env ls -al?

Linux 테스트를 받았고 "별명을 사용하지 않고 직접 명령을 실행하는 방법"이라는 질문이있었습니다.
특수 기호가있는 접두사 명령과 같은 솔루션이 있다는 것을 알고 있었지만 잊어 버렸습니다. 이제 나는 그것이라는 것을 안다 \. ( 이 게시물 에서 읽음 ).

그러나 나는 또한 어딘가에서 별칭을 제거하기 위해 명령 앞에 접두사를 붙일 수 있다는 것을 기억합니다 env. 나는 그것을했고 그것이 효과가있는 것처럼 보이지만 내 대답은 잘못되었다. 본인은 infomanenv,하지만 너무 많은 이해되지 않았다.

무슨 주장을하지 않고 env정확히 무엇을 하고 있습니까?env <command>env


메모, 나는이 생각 할 수있는이 일을 3 가지 방법으로 env <command>, command <command>등을 \<command>. 제 생각에는 일부 테스트 env <command>가 유효하지 않다고 말하면 테스트가 중단 된 것입니다.
Patrick

@Patrick : Chris가 말했듯이 별칭이 command있거나 env`\`를 유일한 대답으로 만들 수 있기 때문에 깨지지 않습니다 .
Pierre Arlaud

1
@ArlaudPierre 및`\`는 posix에 정의되지 않았으므로 (별칭 이스케이프로) 이식성이 없습니다. 따라서 다른 것보다 더 용납되지 않습니다.
Patrick

@ 패트릭 : 맞아요. 이제 우리는 테스트의 정확한 둘레를 알아야합니다. 그러나 어쨌든 "env"라는 대답이 받아 들일 수있는 것이 아니라는 것을 알 수 있습니다. 나는 그것에 대해 당신의 의견에 동의해야합니다.
Pierre Arlaud

얘들 아, 시험은 너무 인간에 의해 확인되었다 :) 내가 불평 (지금의 교육 다른 리눅스 LPI 인증 전 시스템 관리자는) 검증에 갔다하는 man어떤 이해되지 않았다 env정확하고. 이 게시물 이후-분명하고 내 답변이 검토되었습니다 (수락 됨). 모두 감사합니다!
ALZ December

답변:


38

이 명령

env name=value name2=value2 program and args

명령 실행 program and args에 의해 지정된 환경 변수 값을 갖는 현재의 환경으로 연장하여 형성되는 환경 name=valuename2=value2. 와 같은 인수를 포함하지 않으면 name=value현재 환경이 수정되지 않은 채 전달됩니다.

별명과 관련하여 발생하는 핵심 사항은 env 가 외부 명령이므로 별명에 대한 "지식"이 없다는 것입니다. 별명은 일반 프로세스 모델의 일부가 아니며 직접적으로 프로그램에 영향을 미치지 않는 쉘 구조입니다. 셸이 아닌 프로그램 (예 : env )으로 실행합니다. ENV 단순히 패스 program and arguments간부 (같은 전화 execvp는 경로를 검색합니다, program).

기본적으로 이와 같이 env를 사용 하면 별칭, 셸 함수, 셸 내장 명령 및 명령 위치 인수 (예 : 프로그램 이름)를 대체하거나 재정의 할 수있는 기타 셸 기능을 피하는 (대부분의) 셸 독립적 방법입니다. 물론, env별명 또는 쉘 함수입니다! env별칭 이 걱정 되는 경우 전체 경로를 입력 /usr/bin/env할 수 있습니다 (예 : 다를 수 있음).


24

env명령 별칭 조회를 피하는 것 외에 다른 중요한 용도는 명령을 검색한다는 것 PATH입니다. 절대 경로가 필요한 경우 중요하지만 시스템마다 다릅니다.

예를 들어, Bash 스크립트로 시작하는 #!/bin/bash것은 괜찮지 만 모든 합리적인 시스템에 포함되어 #!bash있음에도 불구하고 그렇지 않습니다 ./binPATH

나는 자주 일반적으로 시작 파이썬 프로그램,이 발생 #!/usr/bin/env python의 전체 시스템에 의존하는 경로 지정 피하기 위해 python이 여전히 필요로하지만, (실행 노트 env에 상주 /usr/bin여기까지하지만 파이썬의 위치보다 더 일반적이다, 이진).

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