프롬프트를 사용하여 Diff 명령을 bash 스크립트로 변환하는 방법

프롬프트를 사용하여 Diff 명령을 bash 스크립트로 변환하는 방법

중복된 줄만 제공하기 위해 셸에 붙여넣고 싶은 복사된 목록이 있습니다.

1

1

2

bash 명령을 읽을 때 다음과 같이 했습니다.

cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)

위 명령을 작성할 때 목록을 붙여넣고 CTRL+Zstop cat을 누르면 중복된 행이 표시됩니다. 파일을 비교하고 싶지 않고 몇 줄의 입력만 붙여넣으면 됩니다.

이제 질문은: 이 명령을 스크립트로 변환할 수 있는 방법이 있습니까? 왜냐면 스크립트로 만들어서 CTRL+Z멈추려고 할 때거든요.

PS: 웃지 마세요. 처음 시도하는 것입니다. 지금까지 계속 공부하고 있어요. :)

답변1

#!/bin/bash

while :
do
  echo Paste some input, then press Control-D:
  cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
done

답변2

첫 번째 문제는 표준 설정에서 작업이 백그라운드에서 실행되지 않도록 일시 중지하는 Control Z입니다. 종료할 때 이를 알 수 있으며 이는 작업을 중지했음을 알려줍니다. (다른 작업 제어 명령도 가능합니다.) 원하는 것은 터미널에 입력할 때 파일 끝을 보내는 컨트롤 D입니다. 이는 dos 및 windows와 매우 다릅니다.

둘째, 스크립트에서 cat을 보면 90%의 경우에는 필요하지 않습니다. cat을 사용하지 않고 원하는 작업을 수행하는 세 가지 방법이 있습니다.

  1. tee tee /tmp/sortme | sort | diff - <(sort -u /tmp/sortme) 임시 파일을 이름이 지정된 링크로 바꿀 수도 있습니다.

  2. uniq -d를 사용하세요sort | uniq -d

  3. xclip을 사용하면 명령줄에서 클립보드에 액세스할 수 있으므로 EOF를 보낼 필요가 없습니다. 또한 이전 두 옵션과 결합하여 네 줄 모두 원하는 작업을 수행할 수 있습니다.

    xclip -o > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
    diff <(xclip -o|sort) <(xclip -o|sort -u)
    xclip -o|tee  /tmp/sortme | sort | diff - <(sort -u /tmp/sortme)
    xclip -o|sort | uniq -d
    

관련 정보