モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

外部ターミナルにデバッグ情報などを表示してみた

当たり前なのかもですが (& よくわかってないので迂遠な使い方かもですが) 最近ようやくttyの使い方に気づいたのでメモっておきます。

ターミナルエミュレーターやコンソールでttyってやるとその端末のデバイスファイルが出るわけですが、当然、それに対してechoなどするとそっちに行くわけです。

これ便利だな〜と思いますがイマイチ使いドコロが分からなかったのです、というのも他の端末のウィンドウから特定の端末のウィンドウのttyを知る方法が無いような気がしたわけです。

そこで思いつきました!xfce4-terminalでは(あと他のターミナルでも)-eとかで起動時コマンドを受け付けるわけですよ。

だからデバッグ対象のソフトを立ち上げる前に、xfce4-terminalを立ち上げて起動時にtty > /tmp/ユニークなファイル名 して、それでそのファイルをcat ユニークなファイル名 で変数に受けて、

デバッグ対象のソフト > ユニークなファイル名 2&1

とするとそのソフトの出力が全部そっちにいってprintデバッグですごい便利じゃないですか?

さらにwmctrlを使って、自動でその端末の画面をサブモニタに飛ばしてしまえば超便利だ!!

こんな面倒なことをせず、最初から元のサブモニタに端末を置いて、そっちで起動するというのも最初に思いつきましたが、これだとターゲットのプログラムもサブモニタ側で起動しちゃうのでよろしくないわけです。WMにもよるんでしょうけど…

って今思ったけどターゲットのプログラムをwmctrlでプライマリに飛ばすのもアリか…(汗

そんなわけでMyPaint開発で使ってるシェルスクリプトがこちら

#!/bin/sh

branch="my_build"
std_err="2>&1"

#====================#
while [ "$1" != "" ];do

    case $1 in
    -b | --branch)
        branch=$2
        shift 1
        ;;
    -c | --current-branch)
        branch="CURRENT"
        ;;
    -e | --no-std-error)
        std_err=""
        ;;
    -o | --remain-open)
        remain_open=1
        ;;
    * )
        echo $1 is unrecognized option
        ;;
    esac

shift 1
done
#--------------------#


INSTALLDIR=$HOME/python/others/mypaint_src/mypaint
curdate=`date +"%y%m%d-%H%M%S"`

cd $INSTALLDIR
if [ "$branch" != "CURRENT" ];then
    result=`git branch | grep "\* ${branch}"`
    echo $result
        if [ "$result" = "" ];then
            shownotify -t mmypaint -m "mypaintのブランチが${branch}ではありません"
            exit 1
        fi
fi

ttyfile=/tmp/mypaint_${curdate}_tty
title=my_mypaint_${curdate}

# launch terminal emulator.
xfce4-terminal -e "bash -c \"tty > ${ttyfile}\";bash" -H --title="$title"

# move terminal window
wmctrl -r $title -e 0,1920,-1,-1,-1

./mypaint > `cat $ttyfile` 2>&1

rm $ttyfile

if [ "$remain_open" != "" ];then
    wmctrl -c $title
fi

なんか書き方がださいというか恥ずかしい気もしますがなんというか備忘録的なモノとして…

ちなみに、この手法では何故かpudbとかncurses使ったソフトは2>&1するとアカンっぽい?(なんで?)

それにしても…いや〜、LinuxってっていうかPC-UNIXってほんと素晴らしいですね!(シベリア超特急の人風)