run-cgi

提供: Personal Tukubai for Academic
2021年6月7日 (月) 08:37時点におけるPt4a editor (トーク | 投稿記録)による版 (Batch Update)
ナビゲーションに移動 検索に移動

名前

run-cgi:CGIシェルスクリプトの特定範囲だけを実行するデバッガ。

書式

使い方とオプション

Usage

run-cgi [option] <対象SHELL> <NAMEFILE> [<開始行>-<終了行>]

Option

--log <ファイル名>   ログ出力先を変える。
--var <変数名>=<値>  変数代入値を差し替える。
--break <行数>       ブレークポイントを入れる。
--debug              run-cgi自身のdebug情報を出力する

説明

run-cgiはrunをcgiスクリプトでも使えるようにしたコマンドです。

多くのオプションや使い方はrunと同じなので、基本的な使い方はrunのマニュアルをご覧下さい。本マニュアルではrunと使い方が異なる点に絞って説明をします。

使い方:

run-cgi CGI-SCRIPT namefile
run-cgi CGI-SCRIPT namefile 4-6                           # CGIの4~6 行目を実行。
run-cgi --log ./errlog CGI-SCRIPT namefile                # 出力ログを"errlog"に保存しつつ実行。
run-cgi --var tmp=/tmp/okada/tmp CGI-SCRIPT namefile      # 変数tmpに 値を設定して実行。
run-cgi --var dir=/home/usp,tmp=./tmp CGI-SCRIPT namefile # 複数の変数に代入して実行。

例(その1)

簡単なCGIの例として、以下のようなCGI,HTMLとnamefileを用意した。

---------------------------------------------------------------
$ cat TOUROKU.CGI
#!/bin/bash -vx
#
# TOUROKU.CGI 名前と年代を登録する。
#
# written by Hoge (hoge@hogehoge.com) Sep. 15, 2011

exec 2> /dev/null

LANG=ja_JP.UTF-8
PATH=/home/UTL:/home/TOOL:$PATH

apld=.
tmp=/tmp/tmp_$$

dd bs=$CONTENT_LENGTH |
cgi-name -n_ -s_      > $tmp-name

echo "Content-type: text/html"
echo ""

cat $apld/TOUROKU.HTML

# </html>の後であるが、
# cat すればブラウザに文字が表示される。
# デバッグに便利
cat $tmp-name |
sed -e 's/$/<br>/g'

rm -f $tmp-*
exit 0

$ cat TOUROKU.HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-type" content="text/css" />
<title>フォーム</title>
</head>
<body>
下のフォームにご記入ください。
<form action="./TOUROKU.CGI" method="POST" style="border:1px solid black">
姓
<input type="text" name="FAMILY_NAME" />
<br />
名
<input type="text" name="GIVEN_NAME" />
<br />
年齢
<select name="AGE">
<option value="20">20 代</option>
<option value="30">30 代</option>
<option value="40">40 代</option>
</select>
<input type="submit" />
</form>
</body>
</html>

$ cat namefile
place tokyo
country japan
---------------------------------------------------------------

以下はシンプルに実行した例です。

---------------------------------------------------------------
$ run-cgi TOUROKU.CGI namefile
---------------------------------------------------------------

標準出力には出力が、エラー出力にはログが出力されます。

以下はエラー出力を捨てる例です。

---------------------------------------------------------------
$ run-cgi TOUROKU.CGI namefile 2>/dev/null
---------------------------------------------------------------

以下はエラー出力を errlog に保存する例です。

---------------------------------------------------------------
$ run-cgi --log errlog TOUROKU.CGI namefile
---------------------------------------------------------------

以下は18行目まで実行する例です。(実行後 tmp-name が作成されるので、中身が確認できる)

---------------------------------------------------------------
$ run-cgi --log errlog --var tmp=tmp TOUROKU.CGI namefile 1-18
$ cat tmp-name
place tokyo
country japan
---------------------------------------------------------------

以下は20~23行目まで実行する例です。tmp-nameは既に存在してるので、直前の –var で設定した tmp を変えなければ、次の処理を続けて実行できます(runを使った一般的な開発手順)。

---------------------------------------------------------------
$ run-cgi --log errlog --var tmp=tmp TOUROKU.CGI namefile 20-23
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
.......
---------------------------------------------------------------

以下は、CGIスクリプトの最後まで実行した例です。

---------------------------------------------------------------
$ run-cgi --log errlog --var tmp=tmp TOUROKU.CGI namefile 20-32
---------------------------------------------------------------

なお、run-cgiがどのように動いているか疑問に感じたら、–debug オプションを使って下さい。 run-cgiは実行前に引数のシェルスクリプトを編集して(例えばオプションに「20-23」を付けたら20~23行目以外は無効化したシェルスクリプトを/tmpに作成します)、それを実行しています。–debug オプションを付けるとスクリプトは実行されず、run-cgi が書き換えたそのスクリプトが表示されます。

$ run-cgi --log errlog --var tmp=tmp --debug TOUROKU.CGI namefile

Version and Edition

Version : Thu Jan 16 19:24:23 JST 2020

Edition : 1


© 2021 Universal Shell Programming Laboratory site