No actualice la pregunta por favor. De esta manera no podemos ver qué estuvo mal con su pregunta inicial. Lo acabo de enrollar.
Valentin Bajrami
Respuestas:
20
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
"En sh o dash, su main.sh no hará eco de nada porque se ignoran los argumentos del script de origen y $ 1 se referirá al argumento de main.sh" Eso es exactamente lo que está sucediendo. Gracias por responder.
Alguien todavía te usa MS-DOS el
Marqué su respuesta como aceptada, porque el problema real no era con errores en mi script, sino principalmente porque equiparaba sh con bash, y bash hace un mal trabajo al emular sh en esta situación. Su respuesta me iluminó sobre este tema, gracias;
Alguien todavía te usa MS-DOS
2
Técnicamente, es más un kshismo aquí (ya está allí en ksh86, probablemente antes). @ SomebodystillusesyouMS-DOS, la especificación "sh" no dice qué debería suceder si pasa argumentos adicionales, por lo que el comportamiento de guión o bash no es más "sh" que el otro y son igualmente válidos.
Stéphane Chazelas
16
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 ];then
No estás citando $NAME, a pesar de que tiene espacios. La línea de origen debe ser:
También tiene algunos otros errores, pero no creo que esa sea necesariamente la fuente del problema que plantea.
Steven D
@ Steven Tienes razón, había un par más que no mencioné; funciona para mí con las soluciones que he enumerado ahora
Michael Mrozek
@ Steven Cuando estaba juntando el script para probarlo, lo abrevié a [ -f $HOME/install.sh ] && . $HOME/install.sh $NAME; Probablemente no debería hacer cosas así cuando estoy buscando errores
Michael Mrozek
Parece que el otro problema que pensé era que en realidad no es un problema, ya que menciona específicamente a BASH.
Steven D
5
¡simplemente configure sus parámetros antes de obtener el script!
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
sh
odash
yourmain.sh
no reflejará nada porque los argumentos del script de origen se ignoran y$1
se 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ó):fuente
Veo tres errores:
Su línea de asignación es incorrecta:
Cuando asigna a una variable, no incluye el
$
; debería ser:Estás perdido
then
; la línea condicional debería ser:No estás citando
$NAME
, a pesar de que tiene espacios. La línea de origen debe ser:fuente
[ -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!
main.sh
install.sh
prueba
fuente
--
argumentos de comando:set -- -v foo -l bar -j "${bin}"