私はbash
で期待通りに動作するスクリプトを持っていますが、ash
シェルの下でbusybox
を実行しているボックスに転送されたとき、それは私がしたいことをしません。私は2つの簡単なスクリプトを書いた。 myscript1.sh:ビジーボックスのashシェルには、exec 5>/BASH_XTRACEFD = "5"/set -xと同等の機能がありますか?
#!/bin/bash
exec 5> debug_output.txt
BASH_XTRACEFD="5"
set -x
PS4='$LINENO: '
var1=blah
var2=foo
echo Currently in $0
echo
echo $0 :: var1 : $var1, var2 : $var2
export var1
echo
echo Entering myscript2.sh
./myscript2.sh
echo
echo Back in $0
echo $0 :: var1 : $var1, var2 : $var2
echo
とmyscript2.sh:
#!/bin/bash
echo Currently in $0
echo
echo $0 :: var1 : $var1, var2 : $var2
var1=flop
var2=bleh
私は唯一のロギング機能をテストするためにそれらを書きました。 の最初の3行myscript1.shは、というデバッグ出力ファイルというファイルを作成し、それが実行されるときにスクリプトの出力を持ちます。あなたは debug_output.txtログファイルを見ることができるように
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ ./myscript1.sh
Currently in ./myscript1.sh
./myscript1.sh :: var1 : blah, var2 : foo
Entering myscript2.sh
Currently in ./myscript2.sh
./myscript2.sh :: var1 : blah, var2 :
Back in ./myscript1.sh
./myscript1.sh :: var1 : blah, var2 : foo
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ ls
debug_output.txt myscript1.sh myscript1.sh~ myscript2.sh myscript2.sh~
作成し、ここに出力されました:これはmyscript1.shの出力である
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ cat debug_output.txt
+ PS4='$LINENO: '
8: var1=blah
9: var2=foo
11: echo Currently in ./myscript1.sh
12: echo
13: echo ./myscript1.sh :: var1 : blah, var2 : foo
15: export var1
16: echo
17: echo Entering myscript2.sh
18: ./myscript2.sh
19: echo
20: echo Back in ./myscript1.sh
21: echo ./myscript1.sh :: var1 : blah, var2 : foo
22: echo
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$
指摘するもの私はスクリプト内で何が起きているのか、そして何が起こっているのかを正確に見ることができます。 ビジーボックスでは別の話です。ここでmyscript1.shです:
# cat myscript1.sh
#!/bin/bash
exec 5> debug_output.txt
BASH_XTRACEFD="5"
set -x
PS4='$LINENO: '
var1=blah
var2=foo
echo Currently in $0
echo
echo $0 :: var1 : $var1, var2 : $var2
export var1
echo
echo Entering myscript2.sh
./myscript2.sh
echo
echo Back in $0
echo $0 :: var1 : $var1, var2 : $var2
echo
、ここmyscript2.shです:
# ./myscript1.sh
: ./myscript1.sh
+ PS4=$LINENO:
: var1=blah
: var2=foo
: echo Currently in ./myscript1.sh
Currently in ./myscript1.sh
: echo
: echo ./myscript1.sh :: var1 : blah, var2 : foo
./myscript1.sh :: var1 : blah, var2 : foo
: export var1
: echo
: echo Entering myscript2.sh
Entering myscript2.sh
: ./myscript2.sh
Currently in ./myscript2.sh
./myscript2.sh :: var1 : blah, var2 :
: echo
: echo Back in ./myscript1.sh
Back in ./myscript1.sh
: echo ./myscript1.sh :: var1 : blah, var2 : foo
./myscript1.sh :: var1 : blah, var2 : foo
: echo
デバッグ:これはmyscript1.shを実行しているからの出力は
# cat myscript2.sh
: cat myscript2.sh
#!/bin/bash
echo Currently in $0
echo
echo $0 :: var1 : $var1, var2 : $var2
var1=flop
var2=bleh
です.output.txtはcreatですそれは空のファイルです。 bash
側と同様の出力を得る方法はありますか?
busyboxで実行すると、 'shebang line'(行1)が '#!/ bin/sh'に変更されましたか? (それはそれを修正するつもりはない)。がんばろう。 – shellter
私はあなたが示唆したように、それは動作しませんでした。 –