J'ai un script qui fonctionne comme prévu dans bash
mais quand il est transféré à une boîte exécutant busybox
sous le shell ash
il ne fait pas ce que je voudrais. J'ai écrit 2 scripts simples. myscript1.sh:Existe-t-il un équivalent de exec 5>/BASH_XTRACEFD = "5"/set -x pour un shell de cendres de boîte occupé?
#!/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
et myscript2.sh:
#!/bin/bash
echo Currently in $0
echo
echo $0 :: var1 : $var1, var2 : $var2
var1=flop
var2=bleh
Je leur ai écrit que pour tester la fonctionnalité de journalisation. Les 3 premières lignes de myscript1.sh créent un fichier appelé debug_output.txt et possède la sortie du script lorsqu'il s'exécute. Ceci est la sortie de myscript1.sh:
(^)#(^)#(^)#(^)[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~
Comme vous pouvez le voir le fichier journal debug_output.txt a été créé et est ici la sortie:
(^)#(^)#(^)#(^)[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]tu:~/bashscripttutorial$
La chose à signaler c'est que je peux voir exactement ce qui se passe dans le script et sur quel numéro de ligne cela se passe. Dans busybox c'est une histoire différente. Voici 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
et ici myscript2.sh:
# cat myscript2.sh
: cat myscript2.sh
#!/bin/bash
echo Currently in $0
echo
echo $0 :: var1 : $var1, var2 : $var2
var1=flop
var2=bleh
Ceci est la sortie de l'exécution myscript1.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
debug .output.txt est creat ed mais c'est un fichier vide. Existe-t-il un moyen d'obtenir une sortie similaire à celle que je fais du côté bash
?
avez-vous changé la 'ligne shebang' (ligne 1) en '#!/bin/sh' quand vous l'avez lancé dans busybox? (Ne pas dire que ça va le réparer). Bonne chance. – shellter
Je l'ai fait comme vous l'avez suggéré et cela n'a pas fonctionné. –