파이프 읽기 명령?

파이프 읽기 명령?

특수 문자가 포함된 문자열(예: HG@eg3,l'{TT\"C!다른 명령(termux 클립보드 세트) 및 read절차. 임시 변수(예: )를 만든 다음 이를 다른 명령(예: )에 전달 read하도록 설계된 것 같습니다 .read temptermux-clipboard-set $temp

파이프를 사용하여 이 작업을 수행하는 더 빠른 방법이 있는지 궁금합니다. 예를 들면 다음과 같습니다 read | termux-clipboard-set.

업데이트: 죄송합니다. bash(termux)에서 실행될 것을 찾고 있다는 것을 언급하는 것을 잊어버렸습니다.

답변1

의 경우 bash프로그램 read이 아닙니다. read내장되어 있습니다. 단순화한 후 입력을 read읽고 stdin변수에 할당합니다. 내장 read함수는 에서 출력을 생성하지 않으므로 stdout파이프를 시도하면 stdout결과가 생성되지 않습니다.

문제는 이유입니다. man페이지 표시 에 따르면 ,

용법termux-clipboard-set [text]

표준 입력 또는 명령줄 인수에서 텍스트를 읽습니다.

에서 텍스트를 읽으면 stdin앞에 뭔가를 넣을 이유가 무엇입니까? 물론 할 수 있지만 cat | termux-clipboard-set그냥 termux-clipboard-set하세요.

답변2

에는 cho 옵션 이 zsh기본적으로 지원됩니다 .read-ee

termux-clipboard-set "$(IFS= read -re)"

시스템에 여전히 line명령이 있고(아직 하나 있지만 util-linux요즘에는 일반적으로 포함되지 않음) POSIX와 유사한 셸을 사용하는 경우:

termux-clipboard-set "$(line)"

line명령은 다음과 같이 sh 함수로 작성할 수 있습니다.

line() (
  IFS= read -r line; ret=$?
  printf '%s\n' "$line"
  exit "$ret"
)

head -n 1터미널에서 읽지 않을 때를 제외하면 비슷한 작업을 수행합니다. 대부분의 구현에서는 한 줄만 출력하더라도 입력에서 한 줄 이상을 읽을 수 있습니다. read그리고 그렇지 않다는 것이 보장됩니다(비록 옵션을 line사용해야 하지만 ).-rread

터미널로부터의 입력으로,

termux-clipboard-set "$(head -n1)"

하지만 작동해야합니다. 대부분의 head구현은 여전히 ​​더 이상 사용되지 않는(그러나 더 짧은) 버전을 지원합니다 head -1.

tcsh의 경우 다음과 같습니다.

termux-clipboard-set $<:q

1 또한 터미널 장치에서 청크로 읽지만 read()모드의 터미널 장치에서는 icanon한 줄 이상을 반환하지 않습니다.

관련 정보