bash 명령 대체 없이 출력 문자열을 수행하는 방법은 무엇입니까?

bash 명령 대체 없이 출력 문자열을 수행하는 방법은 무엇입니까?

bash 명령 대체 없이 출력 문자열을 수행하는 방법은 무엇입니까?

예를 들어 Terminal 을 입력했는데 tshark프로그램이 아직 설치되지 않은 경우 다음과 같은 오류 메시지가 표시됩니다.

_some text_
sudo apt-get install tshark

이제 복사 붙여넣기나 복사 없이 마지막 줄을 실행하고 싶습니다.

내가 시도하면

$ tshark 2> >(tail -1)
sudo apt-get install tshark

실행하고 싶은 마지막 줄을 얻습니다.

이 문자열을 실행하려면 bash의 명령 대체가 물론 작동하고 모든 것을 올바르게 설치합니다.

$ $(tshark 2> >(tail -1))

하지만 bash의 명령 대체를 사용하지 않고 xargs로 파이프하면

$ tshark 2> >(tail -1) | xargs
sudo apt-get install tshark

xargs로의 파이핑이 왜 효과가 없는지 궁금합니다.

하지만 내가 시도하면

$ tshark 2> >(tail -1) | xargs xargs

sudo비밀번호가 올바른지 묻는 메시지를 표시한 다음 apt-get설치 후 중단됩니다.

파이프하면 동일한 결과가 발생합니다 bash.

어떤 답변이나 조언이라도 환영합니다.

답변1

답변

명령을 다시 실행하고 출력을 직접 캡처하지 않으면 명시적으로 캡처되지 않은 명령(파이프 등)의 출력을 재사용할 수 없습니다.

Bash는 명령을 저장하지 않습니다산출명령 종료 코드 및 명령 기록을 저장하는 방법과 다릅니다. 당신의단말기출력이 있고 bash는 자체적으로 복사본을 유지하지 않습니다.

따라서 명령 대체를 완전히 피하고 싶다면 여기서는 거기까지 갈 수 없다고 결론을 내릴 것입니다.

옵션

진짜 질문이 "어떻게 할 수 있니?용이하게터미널에서 위 줄에 표시된 출력을 가져와서 많은 입력을 하지 않고도 명령 프롬프트에 명령으로 입력하시겠습니까? "몇 가지 방법으로 이 문제를 해결할 수 있습니다.

  1. 단축키를 사용하면 readline편집 명령을 더 쉽게 만들 수 있습니다.

예를 들어, 다른 곳에서 @choroba의 좋은 조언에 대한 귀하의 반응은 마지막 명령을 편집하려면 너무 많은 입력이 필요하다는 것입니다. readline 단축키를 사용하면 마지막 명령( 오른쪽의 waaaay 대신 사용하여 도달)을 더 빠르게 편집 CTRL-a할 수 있습니다 .CTRL-eCTRL-pUP

  1. screen또는 와 같은 터미널 멀티플렉서를 사용하십시오 tmux. 나는 선호한다 tumx. 복사 및 붙여넣기는 매우 쉽습니다. CTRL-a CTRL-[복사 모드로 간단히 전환하고 몇 개의 VI 키를 사용하여 원하는 라인을 다음 프롬프트에 복사할 수 있습니다(선행 키를 사용하여 tmux설정) CTRL-a.

이것이 추가적인 관점을 제공해주기를 바랍니다.

답변2

xargs표준 입력에서 읽은 인수를 사용하여 지정한 명령을 실행합니다. 명령이 지정되지 않으면 echo.

를 사용하면 xargs xargs첫 번째 xargs가 명령을 읽고 실행됩니다.

xargs sudo apt-get install tshark

하지만 더 이상 표준 입력이 없으므로 더 이상 매개변수가 추가되지 않습니다. 그러나 표준 입력이 없기 때문에 대화형 질문에 대한 응답이 없습니다. 이제 소진된 파이프에 연결된 표준 입력에서 읽고 있습니다. 를 사용하여 apt-get을 실행해 볼 수 있습니다 --yes. (비밀번호를 묻는 메시지는 비밀번호와 동일하게 작동합니다.아니요보안상의 이유로 표준 입력에서 읽습니다.

관련 정보