linuxBean14.04(116)BashEclipseでシェルスクリプトのデバッグ

linuxBean14.04(27)Geanyとシェルスクリプトのデバッグでやったbashdbのコマンドをすぐ忘れてしまうのでもっとGUIで操作できるものはないかと探したところEclipseのプラグインでBashスクリプトのデバッグができるものを見つけました。

前の関連記事:linuxBean14.04(115)pythonコマンドをpipコマンドとともに切り替える


BashEclipseプラグインをEclipse4.5にインストール


linuxBean14.04(46)Eclipse Modeling ToolsのインストールでインストールしたEclipse4.5.1にインストールします。

まずはシェルスクリプトエディタのShellEdをインストールします。

ShellEd download | SourceForge.netからnet.sourceforge.shelled-site-2.0.3.zipをダウンロードしました。

EclipseのメニューからHelp→Install New Software。


Work withの右側にあるAddボタンをクリックするとでてくるダイアログのArchiveボタンをクリックして先ほどダウンロードしたnet.sourceforge.shelled-site-2.0.3.zipを選択します。


Shell ScriptにチェックをつけてNextをクリック。

ShellEdのインストールが始まります。

結構いろいろダウンロードしていて時間がかかりました。

何やらlinuxBean14.04(52)Eclipse Modeling ToolsでJavaコードからUMLを生成:その1でインストールしたXtextなんかもアップデートされているように思えました。

次にBashEclipse - Browse Files at SourceForge.netからnet.sf.basheclipseV1_0_2.zipをダウンロードしました。

解凍してでてきたjarファイルを全て/opt/eclipse/pluginsに移動させました。

Eclipseを再起動します。

これでBashEclipseプラグインのインストールが完了しました。

ShellScriptのプロジェクトを作成する


シェルスクリプト用のパースペクティブが見つからなかったのでJavaのパースペクティブで作業します。

File→New→Other。

Shell Script→Shell Script Project。

Next。


Project nameはShellScriptにしました。

インタープリタはデフォルトでは/bin/shになっています。

linuxBean14.04(27)Geanyとシェルスクリプトのデバッグでみたようにこれはbashではなくdashになります。

linuxBean14.04(29)LibreOfficeDev5.0SDKの例を一括でmakeするでdashでは困ることもあったのでインタープリタを/bin/bashに変更しましたけど、この変更はデバッガの挙動に影響しないように思えました。


ちなみにデフォルトのインタープリタを変更するにはEclipseのメニューからWindow→Preferences、Shell Script→Interpreters、で変更します。

ところが既に作成したプロジェクトのインタープリタを変更する方法はわかりませんでした。

Finishボタンでプロジェクト作成ウィザードを終了します。

Package ExplorerにできたShellScriptプロジェクトを右クリック、New→File。

ファイル名には必ず拡張子shをつける必要があります。

net.sf.basheclipseV1_0_2.zipを解凍したときにでてきた_DEBUB.shファイルをShellScriptプロジェクトフォルダにコピーします。

fib.shのエディタ画面でlinuxBean14.04(27)Geanyとシェルスクリプトのデバッグと同じ例をペーストしました。


シンタックスハイライトもされています。

fib.shの1行目に. _DEBUG.shを挿入して保存します。

この. _DEBUG.shはshebangの次の行でもよいですが、先頭かこれ以外の場所に挿入するとデバッグできませんでした。


これでプロジェクトの準備が完了です。

bashデバッグサーバーを起動する


Debugパースペクティブに切り替えます。

WIndow→Perspective→Open Perspective→Other、Debug。

Run→Debug Configurations。


Bash script→New_configuration。

この名前は固有の名前に変更しておくとあとでデバッグボタンから選択するときにわかりやすいです。

今回はfib.shにしました。

MainタブのBash scriptにブレークポイントを設定したスクリプトをBrowseボタンで選択しました。

設定ができたらApplyボタンをクリック後Closeボタンをクリック。

(2017.4.29追記。このときDebugボタンをクリックするとデバッグサーバーがー起動します。他のタイプのプルジェクトのときにその中のシェルスクリプトをデバッグしたいときに便利です。)



デバッグボタンをクリックして先ほど作成したDebug Cofiguration名を選択します。


これでbashのデバッグサーバーが起動できました。

bashスクリプトをbashデバッグサーバーに接続する


Terminalを起動します。

cd ~/workspace/ShellScript
bash fib.sh

これでEclipseをみるとfib.shがブレークしていることがわかります。


あとはStep overボタンやStep intoボタンなどを使ってスクリプトを逐次実行できます。


Variablesのところは環境変数がすべて出力されています。

fib.shに新たにでてくる変数だけの表示をしたいのですが、やり方はわかりませんでした。

dashで起動したシェルスクリプトはデバッグできない


bashデバッガということだけあって、sh、つまりdashではデバッグできません。
pq@pq-VirtualBox:~/workspace/ShellScript$ sh fib.sh
fib.sh: 1: .: _DEBUG.sh: not found
pq@pq-VirtualBox:~/workspace/ShellScript$ . fib.sh
bash: read: 読み込みエラー: 33: 接続が相手からリセットされました
i=1 result=1
i=2 result=1
i=3 result=2
i=4 result=3
i=5 result=5
i=6 result=8
i=7 result=13
i=8 result=21
i=9 result=34
i=10 result=55
sh fib.shや. fib.sh、source fib.shはダメです。

プロジェクトのインタープリタが/bin/shやshebangが#!/bin/shであることは支障ありませんでした。

_DEBUG.shはフルパスを指定すればシェルスクリプトと別のディレクトリにあってもよい


bash ~/workspace/ShellScript/fib.sh

これはダメです。
pq@pq-VirtualBox:~$ bash ~/workspace/ShellScript/fib.sh
/home/pq/workspace/ShellScript/fib.sh: 行 1: _DEBUG.sh: そのようなファイルやディレクトリはありません
ところがfib.shに. _DEBUG.shではなく、. /home/pq/workspace/ShellScript/_DEBUG.shというように_DEBUG.shのフルパスを指定するとデバッグできました。


ただしその時はSource not foundと言ってくるのでSelect Bash scriptでfib.shを教えてあげる必要がありました。

fib.shを選択すると同じようにブレークしてくれます。

ということはフルパスで指定すれば_DEBUG.shはどこにあっても良いはずと思ってやってみるとうまくいきました。


これで毎回_DEBUG.shをコピペしなくてもよくなりました。

nvm.shをデバッグしてみる


linuxBean14.04(9)node.jsとBracketsのインストールのnvmはシェルスクリプトです。

~/.nvmにあるnvm.shに. /home/pq/Source/bash/_DEBUG.sh(_DEBUG.shのフルパス)を挿入して保存します。
# Node Version Manager
# Implemented as a POSIX-compliant function
# Should work on sh, dash, bash, ksh, zsh
# To use source this file from your bash profile
#
# Implemented by Tim Caswell <tim@creationix.com>
# with much bash help from Matthew Ranney
. /home/pq/Source/bash/_DEBUG.sh
{ # this ensures the entire script is downloaded #
8行目に挿入しました。

EclipseのJavaパースペクティブでFile→New→Other、Shell Script→Shell Script Project。

Next。


linuxBean14.04(93)Eclipse4.5にPyDevをインストールのPyDevのプロジェクト作成ウィザードのようにCreate links to existing sourcesという選択肢を期待したのですが、なかったのでCreate project at existing location (from existing source)を選択してDirectoryに/home/pq/.nvmを入力しました。

.nvmは隠しフォルダなのでBrowseボタンからは選択できません。

これでFinishボタンをクリックすると/home/pq/.nvmフォルダがEclipseのworkspaceになるので.buildpathと.projectの2つのファイルが作成されます。

root権限にあるシェルスクリプトをデバッグするときはsudo /opt/eclipse/eclipseでEclipseを起動しないといけないと思います。(未確認)

nameはnvm_Bashにしました。

Finish。


nvm_Bashというプロジェクトができました。

Debugパースペクティブに切り替えてRun→Debug Configurations。

Bash Scriptを右クリック→New。


Nameはnvm.shにしました。

Browseボタンをクリックしてnvm.shを選択します。

Debugボタンをクリックするとbashデバッグサーバーが起動します。

bash ~/.nvm/nvm.sh

Terminalからこれを実行してEclipseをみるとSelect Bash scriptボタンがでてくるのでnvm.shを選択します。


おお、ちゃんとブレークできました。

. /home/pq/Source/bash/_DEBUG.shをnvm.shに残したままにしてもnvmは普通に使えそうな感じです。

一応コメントアウトしておきました。

参考にしたサイト


ShellEd download | SourceForge.net
Eclipseのシェルスクリプトエディタプラグイン。BashEclipseプラグインに必要です。

BashEclipse download | SourceForge.net
BashシェルスクリプトをEclipseでデバッグできるBashEclipseプラグイン。

Eclipseデバッガを活用するための31のtips
Eclipseでデバッグするときの便利な方法が紹介されています。

次の関連記事:linuxBean14.04(117)NetBeans8.1でnvmのNode.jsを使うための工夫

PR

1 件のコメント: