우분투 : 다른 명령의 출력을 실행


13

예를 들어 다른 명령 줄을 출력하는 명령 줄이 있습니다.

> commandlineA param1 param2
  commandlineB param1

주어진 매개 변수로 commandlineB를 실행하는 단일 명령 줄 실행을 원합니다.

단일 명령 줄을 사용하여 간단한 방법이 있습니까? 아니면 출력을 변수에 저장 한 다음 실행하는 작은 bash 파일을 실행해야합니까?

감사


2
꽤 오랜 시간 동안 검색했지만 직접 찾아야 할 질문을 게시해야한다고 생각합니다.
Lior Ohana

답변:


17

이 문제를 직접 해결 한 것으로 보이지만 다음을 사용할 수 있습니다.

$(command parameter1 parameter2)

편집 편집 : 아래는 다소 잘못되었습니다. 서브 셸에서 명령을 실행하는 동안 환경 변수를 계속 사용할 수 있습니다. 오해의 소지가있는 분들 죄송합니다 ...

편집 : 하위 쉘에서 실행되며 내 보내지 않은 환경 변수는 사용되지 않습니다. 동일한 쉘에서 명령을 실행하려면 다음을 사용해야합니다.

eval $(command parameter1 parameter2)

주어진 또 다른 대답은 bash 자체를 통해 파이프하는 것입니다.

echo 'uname -a' | bash 

하위 쉘에서 실행되어 필요한 동일한 쉘에서 실행됩니다.

echo 'uname -a' | bash -c

또한 $ () 구문 대신 백틱을 사용할 수도 있지만 권장되지는 않습니다 .


(1)“서브 쉘에서 실행될 것”이 무슨 뜻인지 정확히 모르겠습니다. 내 보내지 않은 환경 변수 사용됩니다. (2) eval여기서 사용할 이유가 없습니다 . 이유가 있으면 설명해주세요. (3) 마지막 예제 (  -c)가 완전히 잘못되었습니다.
Scott

당신은 맞습니다, 나는 다시 확인하고 거기에 잘못되었습니다. 목록으로 실행할 때 bash 쉘 포크 및 환경 변수를 계속 사용할 수 있습니다. 그래서 당신은 맞습니다, 미안합니다.
Chris Sherlock

4

이것을 사용하십시오 :

commandlineA param1 param2 | bash

예:

echo "uname -a" | bash

산출:

Linux k1104 2.6.38-8- 일반 # 42- 우분투 SMP 월요일 4 월 11 일 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux

이것에는 아무런 문제가 없지만 다른 bash 쉘이 생성됩니다.
Chris Sherlock

그렇게 $(commandlineA param1 param2)
하세요

@tripleee : 오렌지와 호박을 비교하고 있습니다.  printf '\143\144\040\057\n' | bash명령은 새로운 별도 (및 일시적) 셸 프로세스에서 실행되기 때문에 궁극적으로는 아무런 문제가 없습니다. 대조적으로, $(printf '\143\144\040\057\n')현재 활성화 된 대화식 쉘이 디렉토리를 변경하게합니다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.