![프롬프트를 사용하여 Diff 명령을 bash 스크립트로 변환하는 방법](https://linux55.com/image/65929/%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20Diff%20%EB%AA%85%EB%A0%B9%EC%9D%84%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C%20%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
중복된 줄만 제공하기 위해 셸에 붙여넣고 싶은 복사된 목록이 있습니다.
1
1
삼
2
bash 명령을 읽을 때 다음과 같이 했습니다.
cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
위 명령을 작성할 때 목록을 붙여넣고 CTRL+Z
stop 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을 사용하지 않고 원하는 작업을 수행하는 세 가지 방법이 있습니다.
tee
tee /tmp/sortme | sort | diff - <(sort -u /tmp/sortme)
임시 파일을 이름이 지정된 링크로 바꿀 수도 있습니다.uniq -d를 사용하세요
sort | uniq -d
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