Duda con script en bash

Hola buenas tardes.

Estoy tratando de realizar un script que escriba la salida de una serie de cosas en un fichero.

El script funciona correctamente, pero quisiera solventar un pequeño problema.

Os comento

El script debe de funcionar al ser ejecutado desde cualquier sitio.

Por ejemplo:

El script está en /home/daniel/secuencia.sh

Si lo ejecuto desde ese directorio /home/daniel talq ue ./secuancia.sh funciona correctamente, ya que se hace referencia a dos ficheros que están en el mismo nivel

Pero si ejecuto el script desde /home de la siguiente manera daniel/secuencia.sh los achivos a los que hace referencia el script no los encuentra ya que intenta buscarlos en /home/daniel, y ahi no están.

Os dejo el script por si me podeis decir que falla.

No puedo utilizar rutas absolutas.

#!/bin/sh

SEC_ACT=`cat sec`

typeset -i SEC_ACT
echo Secuencia Actual: $SEC_ACT

SEC_NUEVA=$((SEC_ACT += 1))

typeset -i SEC_NUEVA

if (($SEC_NUEVA < 10))
then
        SEC_NUEVA_PET=00$SEC_NUEVA

elif (($SEC_NUEVA > 9 & $SEC_NUEVA < 100))
then
        SEC_NUEVA_PET=0$SEC_NUEVA
else
        SEC_NUEVA_PET=$SEC_NUEVA
fi

echo $SEC_NUEVA_PET > secp
echo $SEC_NUEVA > sec

echo  Secuencia nueva: $SEC_NUEVA
y los archivos que crea o lee, han de estar en tu directorio actual, no?
si los creas/abres con ./comosellamen, va?
Si los archivos que creo abro, deben estar en el mismo directorio que el script de ahi la > sec y > secp si ejecuto el script desde eld irectorio en el que está todo, funciona correctamente :P
y sobre mi segunda linea? XD
Jan@work escribió:y sobre mi segunda linea? XD



Funciona de la misma manera XD esa fue la primera idea que se me ocurrió :)
cambiando los "secp" por "./secp" y los "sec" por "./sec"? Porque a mi algo como eso me va bien
Jan@work escribió:cambiando los "secp" por "./secp" y los "sec" por "./sec"? Porque a mi algo como eso me va bien



Si, si cambio como lo dices (que es como dije antes XD) me busca en el directorio desde dónde ejecuto el script no en el directorio en el que se encuentra :P
Vamos a ver, que debe haber algo que no he entendido.

Esta chorrada (cosa.sh):

#!/bin/sh

echo "Test"
echo "testing" >> ./cosa.test
echo "written"
cat ./cosa.test
echo "Done"


a mi me solventa tu problema, usada asi:

laboratorio@lab1:~$ cd test/
laboratorio@lab1:~/test$ ls
total 0
laboratorio@lab1:~/test$ ../cosa.sh
Test
written
testing
Done
laboratorio@lab1:~/test$ ls
total 4
-rw-r--r-- 1 laboratorio 8 2009-10-15 15:07 cosa.test
laboratorio@lab1:~/test$ mkdir a
laboratorio@lab1:~/test$ cd a
laboratorio@lab1:~/test/a$ ~/cosa.sh
Test
written
testing
Done
laboratorio@lab1:~/test/a$ ls
total 4
-rw-r--r-- 1 laboratorio 8 2009-10-15 15:07 cosa.test




EDIT: releyendo un poco el primer post, igual te refieres (como habia pensado al principio, de hecho) a que quieres los archivos esos en el mismo directorio en el que este el script, lo llames desde donde lo llames. Dices que rutas absolutas no, pero y si usas ~/archivo ?
Utiliza "$0" para obtener la ruta completa de la ubicacion del script y dirname para quedarte solamente con el directorio donde se encuentra el script:

SCRIPT_PATH=`dirname "$0"`
comandoquenecesites "${SCRIPT_PATH}"/nombredelarchivo
También existe otra manera con la cual se puede ejecutar por consola:

[nintux@geofront ~]$ path_actual=`pwd`
[nintux@geofront ~]$ echo $path_actual
/home/nintux
comandoquenecesites "${path_actual}"/nombredelarchivo
[nintux@geofront ~]$


Sin asignar variable:
comandoquenecesites `pwd`/nombre del archivo


Saludos.
capitanquartz escribió:También existe otra manera con la cual se puede ejecutar por consola:

[nintux@geofront ~]$ path_actual=`pwd`
[nintux@geofront ~]$ echo $path_actual
/home/nintux
comandoquenecesites "${path_actual}"/nombredelarchivo
[nintux@geofront ~]$


Sin asignar variable:
comandoquenecesites `pwd`/nombre del archivo


Saludos.

El problema de eso es que te quedas con el path actual donde te encuentras, no donde esta el script y no puedes acceder a los ficheros que se encuentran en el directorio del script.
codestation escribió:Utiliza "$0" para obtener la ruta completa de la ubicacion del script y dirname para quedarte solamente con el directorio donde se encuentra el script:

SCRIPT_PATH=`dirname "$0"`
comandoquenecesites "${SCRIPT_PATH}"/nombredelarchivo


Gracias, esto me ha servido sin problemas.

Si lo hacía con pwd para obtener el path me cogía el path desde el que ejecutaba el escript y no funcionaba :P
11 respuestas