Supongamos que tengo en main.sh:
$NAME="a string"
if [ -f $HOME/install.sh ]
. $HOME/install.sh $NAME
fi
y en install.sh:
echo $1
Se supone que esto tiene eco "a string", pero no hace eco de nada. ¿Por qué?
Supongamos que tengo en main.sh:
$NAME="a string"
if [ -f $HOME/install.sh ]
. $HOME/install.sh $NAME
fi
y en install.sh:
echo $1
Se supone que esto tiene eco "a string", pero no hace eco de nada. ¿Por qué?
Respuestas:
Michael Mrozek cubre la mayoría de los problemas y sus soluciones funcionarán ya que está utilizando Bash.
Puede interesarle el hecho de que la capacidad de generar un guión con argumentos es un bashismo. In sho dashyour main.shno reflejará nada porque los argumentos del script de origen se ignoran y $1se referirán al argumento paramain.sh.
Cuando ingresa la secuencia de comandos sh, es como si acabara de copiar y pegar el texto de la secuencia de comandos de origen en el archivo del que se obtuvo. Considere lo siguiente (nota, he hecho la corrección que Michael recomendó):
$ bash ./test.sh
A String
$ sh ./test.sh
$ sh ./test.sh "HELLO WORLD"
HELLO WORLD
Veo tres errores:
Su línea de asignación es incorrecta:
$NAME="a string"
Cuando asigna a una variable, no incluye el $ ; debería ser:
NAME="a string"Estás perdido then ; la línea condicional debería ser:
if [ -f $HOME/install.sh ]; thenNo estás citando $NAME, a pesar de que tiene espacios. La línea de origen debe ser:
. $HOME/install.sh "$NAME"[ -f $HOME/install.sh ] && . $HOME/install.sh $NAME; Probablemente no debería hacer cosas así cuando estoy buscando errores
¡simplemente configure sus parámetros antes de obtener el script!
#!/bin/bash
NAME=${*:-"a string"}
if [[ -f install.sh ]];
then
set -- $NAME ;
. install.sh ;
fi
exit;
#!/bin/bash
echo " i am sourced by [ ${0##*/} ]";
echo " with [ $@ ] as parametr(s) ";
exit;
u@h$ ./main.sh some args
i am sourced by [ main.sh ]
with [ some args ] as parametr(s)
u@h$
--argumentos de comando:set -- -v foo -l bar -j "${bin}"