LoginSignup
0
3

More than 5 years have passed since last update.

GNU screen @MAC でUSBシリアルコンソール接続

Last updated at Posted at 2017-10-22

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 <<<
$
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3