bash의 마지막 반환 값에 액세스하는 방법은 무엇입니까?


69

간단한 시나리오 : wsdl프로젝트 중간에 손실 된 파일을 찾고 있습니다.

$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl

이제 그것이 어디에 있는지 알았 으므로이 파일로 무언가를하고 싶습니다. 편집하십시오. 내 명령 뒤에 경로를 복사 / 붙여 넣는 대신 find이전에 반환 한 경로를 사용할 수 있습니까? 입력 한 마지막 인수 !$또는으로 마지막 명령 에 액세스 할 수있는 것처럼 !!.
에서 가능하다는 것을 읽었 $?지만 오류 만 반환합니다.0: command not found

$ echo $?
0: command not found

3
이것은 반환 값이 아니라 출력입니다!
— MirandaVeracruzDeLaHoyaCardina

자세히 설명하자면 "반환 가치"는 항상 숫자입니다. 일반적으로 0은 성공을 의미하고 0이 아닌 것은 어떤 종류의 실패를 의미합니다. 명령이 내뿜는 문자열 (또는 텍스트)을 "반환 값"이 아니라 "출력"이라고합니다.
— Michael Dorst

답변:


33

명령 대체에서 명령을 실행하십시오.

output=$( find -name '*.wsdl' )
echo "$output"

이제 출력이 output변수에 저장되어 원하는 만큼 여러 번 사용할 수 있습니다.


10
이것은 정답이 아닙니다. $? 입니다.
— mcmlxxxiii

@mcmlxxxiii : $?경로를 포함하지 않습니다.
— choroba

1
사과하면서, 나는 return그 질문 에서 용어의 오용으로 혼란 스러웠다 . 귀하의 답변은 위의 질문에 절대적으로 맞습니다.
— mcmlxxxiii

4
$?마지막 명령의 종료 상태를 포함
— Brett Wagner

이것이 내가 찾던 대답 이었습니다. 성공 / 실패 반환 값이 아닌 이전 명령의 출력에 관심이 있습니다. 감사합니다!
— Joshua Pinter

74

특별한 bash 변수는 없습니다.

$? 마지막 명령의 종료 코드를 포함합니다 (0 = 성공,> 0 = 오류 코드)

다음 find과 같이 -exec플래그로 출력을 사용할 수 있습니다 .

 find -name  '*.wsdl' -exec emacs {} \;

은 {}발견 파일 이름으로 대체됩니다 find. 찾은 모든 파일에 대해 명령을 실행합니다. 찾은 모든 파일을 인수로 사용하여 명령을 실행하려면 다음과 +같이 at을 사용 하십시오.

  find -name '*.wsdl' -exec emacs {} +

그러면 찾은 모든 .wsdl 파일이 열려있는 하나의 emacs 인스턴스가 열립니다.

보다 일반적인 해결책은 출력을 변수에 저장하는 것입니다.

result=$(find -name '*.wsdl')
emacs $result

이것은 찾기뿐만 아니라 모든 명령에서 작동합니다. 당신은 또한 사용할 수 있지만 xargs:

  find -name '*.wsdl' | xargs emacs {}

$?다른 명령의 종료 코드를 반환 할 수 있습니까? 예를 들어 핑 1.1.1.1 -w 10; $를 반환?
— twnaing

1
$?이전 명령의 종료 코드를 포함합니다. 대답은 '그렇다'입니다.
— ahilsend

43

마지막 명령이 두 번 실행되는 것을 신경 쓰지 않으면 최소한의 키 입력으로 원하는 작업을 수행하는 빠른 해킹이 있습니다.

백틱을 사용하십시오.

`!!`

예 :

$ 찾기. -name HardToFind.txt
some / crazy / path / to / HardToFind.txt
$ vim`!!`

* 편집 : 위의 링크 된 "가능하지 않은"질문 에도이 답변이 포함되어 있습니다. 여전히이 것과 직접 관련이 있으므로 남겨 두지 만 미안합니다.


2
매우 영리한. 나는 이미 명령을 실행할 때까지 출력이 필요하다는 것을 모르는 가장 일반적인 경우를 해결하기 때문에 이것이 받아 들여지는 대답이라고 생각합니다.
— Paul Ruane

1
나는 이것이 내가 여기에 왔던 것에 동의한다. 이전 줄에서 아무것도하지 않으면 마지막으로 반환 된 값으로 무언가를하고 싶다는 소급 결정을 내 목적을 무효화합니다. ( git br | grep내 경우에 찾은 지점을 확인하십시오 )
— Jack Casey

내가 좋아하는 것 중 하나입니다! 내가 매일 이렇게 생각합니다.
— MetalGodwin

나는 이것이 당신이 그렇게 할 수있는 매우 영리하다고 생각하지만 그것이 실제로 얼마나 유용한지는 확실하지 않습니다. !!위로 키를 누르는 것보다 타이핑 이 훨씬 쉬운가요? 그러면 여전히 명령을 볼 수 있습니다. 명령을 다시 실행할 수 있다면, 누르는 것만 큼 쉽고 이해하기 쉽고 투명하다고 생각합니다.
— Svend Hesselholt Henne Hansen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.