Busco una manera algo más elegante de hacer esto
Publicado por Oscar (4 intervenciones) el 24/04/2012 22:24:21
Hola,
Tengo el siguiente problema, estoy creando varios shell script que tienen que utilizarse de manera anidada, para ello utilizo el comando source que me permite hacer leer código de otro fichero, el problema que tengo es que necesito saber el nombre del segundo fichero al que llamo, en el ejemplo que pongo sería 2.sh, pero al haber pasado el source $0 devuelve el nombre de 1.sh.
La "ñapa" que he probado y que funciona bien es forzar un comando que no existe el cual al provocar un error me dice en que fichero esta el error y aprovecho esto volcandolo a un fichero y luego leyéndolo ya que no puedo pasarlo a una variable al tratarse de un error.
Estoy convencido que tiene que existir una manera más elegante de hacer esto pero no se me ocurre como, de antemano, muchas gracias por vuestra ayuda.
./1.sh
./2.sh
Ejecución
~/bin$ ./1.sh
Estamos en 1.sh
./1.sh
Llamamos a 2.sh
Estamos en 2.sh
./1.sh
/home/oscar/bin/2.sh: line 3: thne: command not found
/home/oscar/bin/2.sh
Tengo el siguiente problema, estoy creando varios shell script que tienen que utilizarse de manera anidada, para ello utilizo el comando source que me permite hacer leer código de otro fichero, el problema que tengo es que necesito saber el nombre del segundo fichero al que llamo, en el ejemplo que pongo sería 2.sh, pero al haber pasado el source $0 devuelve el nombre de 1.sh.
La "ñapa" que he probado y que funciona bien es forzar un comando que no existe el cual al provocar un error me dice en que fichero esta el error y aprovecho esto volcandolo a un fichero y luego leyéndolo ya que no puedo pasarlo a una variable al tratarse de un error.
Estoy convencido que tiene que existir una manera más elegante de hacer esto pero no se me ocurre como, de antemano, muchas gracias por vuestra ayuda.
./1.sh
1
2
3
4
echo "Estamos en 1.sh"
echo $0
echo "Llamamos a 2.sh"
source 2.sh
./2.sh
1
2
3
4
5
echo "Estamos en 2.sh"
echo $0
thne
thne 2> ficherotemporal.txt
cat ficherotemporal.txt |cut -d ":" -f 1
Ejecución
~/bin$ ./1.sh
Estamos en 1.sh
./1.sh
Llamamos a 2.sh
Estamos en 2.sh
./1.sh
/home/oscar/bin/2.sh: line 3: thne: command not found
/home/oscar/bin/2.sh
Valora esta pregunta


0