Bash
debug
ksh

bash > debug > echo + redirectionにおいてredirectionの文字列がbash -xで表示されない > Link: 対処方法 (kshを使う)

More than 1 year has passed since last update.


動作環境

Xeon E5-2620 v4 (8コア) x 2

32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.9を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
ksh version sh (AT&T Research) 93u+ 2012-08-01

関連:bash > readonly > manとサンプルコード | bash -x実行時の表示


codeとdebug実行

#!/usr/bin/env bash 

set -eu # for safety

readonly DST_FILE='info_180119.txt'

echo "hello" > $DST_FILE

DST_FILE='dummy_180119.txt'

echo "hello" > $DST_FILE


run

$ bash -x debug_print_180119_exec 

+ set -eu
+ readonly DST_FILE=info_180119.txt
+ DST_FILE=info_180119.txt
+ echo hello
+ DST_FILE=dummy_180119.txt
debug_print_180119_exec: line 9: DST_FILE: readonly variable

上記の気になった点として、echo "hello" > $DST_FILEの部分は+ echo helloにデバッグ出力される。

どのファイルに書き出ししたのか、標準出力なのか、がデバッグ出力から分からない。


対処方法

https://stackoverflow.com/questions/15366570/bash-set-x-echo-redirects-as-well-as-commands/17479035#17479035

色々書かれているが、


answered Jul 4 '13 at 22:56

ack


による「You, ksh使っちゃいなよ」が気になった。


EDIT: If Bash-specific features are not required, and backwards compatibility with the Bourne shell will do, the Korn shell (ksh, tested with version 93u+ 2012-08-01) does a bit better on showing information for redirects:



run

$ ksh -x debug_print_180119_exec 

+ set -eu
+ DST_FILE=info_180119.txt
+ readonly DST_FILE
+ echo hello
+ 1> info_180119.txt
debug_print_180119_exec: line 9: DST_FILE: is read only

info_180119.txtへ出力されている様子が分かるようになった。

kshはどれくらいbashの互換があるかはよくわからない。

bash特有の機能がある場合は使えないでしょう、とのこと。

https://stackoverflow.com/questions/19112031/difference-between-korn-and-bash-shell