스크립트가 명령을 읽을 때 파이프 출력

스크립트가 명령을 읽을 때 파이프 출력

SecureToken을 생성하는 작은 스크립트(stc라고 함)가 있습니다.stoken

#!/bin/bash

# Read Password
read -p "Password " -s PASS

TOKEN=$(stoken --stdin <<< "$PASS")
xclip -sel c <<< "$TOKEN"

if [[ ! -t 1 ]]; then
  echo $TOKEN
fi

일반적인 상황에서는 토큰을 클립보드에 복사합니다. 파이프가 있으면 토큰을 작성해야 stdout하지만(유효함) 어떤 이유로 파이프의 다음 명령이 실행되지 않습니다. 이 문제와 관련이 있는 것 같은데 read어떻게 해결해야 할지 모르겠습니다.

예를 들어

$ stc | tee

밝혀지다

$ stc | tee
Password <token echo>
<hangs forever>

답변1

xclipCLIPBOARD 선택 요청을 처리하기 위해 백그라운드에서 실행되는 하위 프로세스를 포크합니다. 여기서 하위 프로세스는 파이프를 상속하고 클립보드 선택을 재활용할 때 다른 프로세스가 종료될 때까지 이를 열어 둡니다. 여기서는 다음을 수행하세요.

#! /bin/bash -
# Read Password
IFS= read -rsp "Password: " PASS

TOKEN=$(printf %s "$PASS" | stoken --stdin)
printf %s "$TOKEN" | xclip -sel c > /dev/null

[ -t 1 ] || printf '%s\n' "$TOKEN"

(너도 잊어버렸지IFS=, -r옵션read,게다가주위에 인용문$TOKEN그 다음에echo임의의 데이터와 함께 사용할 수 없습니다).

관련 정보