当たり前なのかもですが (& よくわかってないので迂遠な使い方かもですが) 最近ようやくttyの使い方に気づいたのでメモっておきます。
ターミナルエミュレーターやコンソールでttyってやるとその端末のデバイスファイルが出るわけですが、当然、それに対してechoなどするとそっちに行くわけです。
これ便利だな〜と思いますがイマイチ使いドコロが分からなかったのです、というのも他の端末のウィンドウから特定の端末のウィンドウのttyを知る方法が無いような気がしたわけです。
そこで思いつきました!xfce4-terminalでは(あと他のターミナルでも)-eとかで起動時コマンドを受け付けるわけですよ。
だからデバッグ対象のソフトを立ち上げる前に、xfce4-terminalを立ち上げて起動時にtty > /tmp/ユニークなファイル名 して、それでそのファイルをcat ユニークなファイル名
で変数に受けて、
デバッグ対象のソフト > ユニークなファイル名 2&1
とするとそのソフトの出力が全部そっちにいってprintデバッグですごい便利じゃないですか?
さらにwmctrlを使って、自動でその端末の画面をサブモニタに飛ばしてしまえば超便利だ!!
こんな面倒なことをせず、最初から元のサブモニタに端末を置いて、そっちで起動するというのも最初に思いつきましたが、これだとターゲットのプログラムもサブモニタ側で起動しちゃうのでよろしくないわけです。WMにもよるんでしょうけど…
って今思ったけどターゲットのプログラムをwmctrlでプライマリに飛ばすのもアリか…(汗
そんなわけでMyPaint開発で使ってるシェルスクリプトがこちら
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}
xfce4-terminal -e "bash -c \"tty > ${ttyfile}\";bash" -H --title="$title"
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ってほんと素晴らしいですね!(シベリア超特急の人風)