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.