스크립트:
#!/bin/bash
interface=enp4s0
mac_address=$(ip link show $interface | grep ether | awk '{print $2}')
cat > /dev/usb/lp0 <<EOF
SIZE 30 mm,90 mm,CLS,TEXT 200,40,0,90,2,2,"MAC Address of $interface:",TEXT 140,40,0,90,2,2,"$mac_address",PRINT 1,END
>EOF
TSPL 언어를 사용하여 문자 장치로 인쇄하고 있습니다. 문제는 인쇄되는 내용을 큰따옴표로 묶어야 한다는 것입니다. 예를 들어 TEXT 200,40,0,90,2,2,"Some text to be printed"
. 또한 텍스트에 변수를 포함하고 싶습니다.
echo "SIZE 30 mm,90 mm,CLS,TEXT 200,40,0,90,2,2,"MAC Address of $interface:",TEXT 140,40,0,90,2,2,"$mac_address",PRINT 1,END > /dev/usb/lp0
중첩된 큰따옴표가 TSPL의 명령을 중단시키기 때문에 작동하지 않습니다.
heredoc에서 발생하는 오류는 다음과 같습니다.
warning:here-document at line 8 delimited by end-of-file (wanted `EOF')
답변1
@thrig가 제안한 대로 >EOF
이렇게 변경하면 EOF
문제가 빠르게 해결됩니다.
cat > /dev/usb/lp0 <<EOF
SIZE 30 mm,90 mm,CLS,TEXT 200,40,0,90,2,2,"MAC Address of $interface:",TEXT 140,40,0,90,2,2,"$mac_address",PRINT 1,END
EOF
앞으로는 좋은 구문 강조 기능을 갖춘 IDE에서 bash 스크립트를 작성하는 것이 좋습니다. VS Code는 차이점을 빠르게 알아차렸습니다. 건배!