スクリプト:
#!/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は違いにすぐに気づきました。乾杯!