GNU screen で USB シリアルコンソール接続をする時、毎回「どうやって接続するんだっけ?」となってたのでシェルスクリプトを書いた。
ちなみに、複数USBシリアルコンソールを接続してる場合にも対応してます。(数字を入力して、どのUSBシリアルに接続するか選択する)
自分が、複数個USBシリアル接続して作業することがあるもんでして。
スクリプト本体
connect-usbserial.sh
#!/usr/bin/env bash
##########################################
# Update history
# 2017-05-02 first commit
# 2017-10-22 コメントを追記
#
##########################################
# 終了方法 : control + z を押して k
function usage_exit() {
cat <<_EOT_
Usage:
$0 [-b 9600] [-h]
Description:
Connect USB serial console @ MAC
Options:
-b Baud rate (default : 9600)
-d debug mode
-h help
screenrc memo:
escape ^z^z
bind ^e encoding eucJP UTF-8
bind ^u encoding UTF-8 UTF-8
bind ^w encoding SJIS UTF-8
_EOT_
exit 1
}
# 引数が 0 個だとエラー
# if [ $# = 0 ]; then
# usage_exit
# exit 1
# fi
# setting
BAUD_RATE="9600"
SCREENRC=~/tmp/connect-usbserial.screenrc
if [ "$OPTIND" = 1 ]; then
while getopts :b:dh OPT
do
case $OPT in
b)
BAUD_RATE=$OPTARG
;;
d)
FLAG_DEBUG="on"
echo ">>> Debug mode on <<<"
;;
h)
usage_exit
;;
\?)
usage_exit
;;
esac
done
else
echo "No installed getopts-command." 1>&2
exit 1
fi
shift $((OPTIND - 1))
# screen の設定ファイル作成
cat <<_EOF_ > $SCREENRC
autodetach off
startup_message off
# key bindings
escape ^z^z
# character code
# defutf8 on
# defkanji UTF-8
# defencoding UTF-8
# encoding UTF-8 UTF-8
bind ^e encoding eucJP UTF-8
bind ^u encoding UTF-8 UTF-8
bind ^w encoding SJIS UTF-8
# logfile
logfile "$HOME/logs/%H_%Y%m%d-%02c-%s.log"
deflog on
logtstamp on
logtstamp string "\n----- SCREEN [%Y/%m/%d %02c %s] %n:%t -----\n"
_EOF_
# ls の結果を配列に入れる
ttyList=(`ls -1 /dev/tty.usbserial*`)
#echo "${ttyList[@]}"; # 配列全て
#echo "${ttyList[0]}"; # 配列の1個目
# usbserial が1個もなかったらエラー
if [ -z "${ttyList[@]}" ]; then
echo ">>>"
echo ">>> There is no USB serial tty."
exit 1
fi
# 接続する usbserial を選択
count=0
for elem in "${ttyList[@]}" ; do
echo $count : $elem
count=`expr $count + 1`
done
echo ">>>"
echo ">>> Select the USB serial console."
echo -n ">>> Input the number : "
read line
# 入力された数字に対応する usbserial があるか確認
if [ -z "${ttyList[$line]}" ]; then
echo ">>> Input error --> ${line}"
exit 1
fi
if [ "$FLAG_DEBUG" = "on" ]; then
echo '>>> screen -c' $SCREENRC "${ttyList[$line]}" $BAUD_RATE
echo ">>> sleep 3"
sleep 3
fi
# usbserial へ接続
screen -c $SCREENRC "${ttyList[$line]}" $BAUD_RATE
# screen の設定ファイル削除
rm $SCREENRC
echo ">>> ${0} finish <<<"
実行例
$ connect-usbserial.sh
0 : /dev/tty.usbserial-FTFLHK8K
1 : /dev/tty.usbserial-FTXUZ1QS
>>>
>>> Select the USB serial console.
>>> Input the number : 1 <-- 1を入力して Enter 押してる
<-- ここで、コンソール接続されている状態(記載は省略)
<-- Ctrl z + k --> y(yes) を入力して終了
[screen is terminating]
>>> /Users/xxxxx/bin/connect-usbserial.sh finish <<<
$