文字デバイスを処理するには、bashスクリプトでheredocを使用します。 EOFエラー

文字デバイスを処理するには、bashスクリプトでheredocを使用します。 EOFエラー

スクリプト:

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

関連情報