Comando set

lok -  
 tisc0 -
Hola,

he utilizado el comando set en un script, la parte del script es la siguiente:

#! /bin/sh
#

if [ -f /home/prj/itsec/.prjrc ]; then
echo " ftlog ftflag local-user site file"
else
echo "no encontrado"

fi

set PRJHOME = `echo $PWD | cut -d / -f 4-5`
#set PRJHOME = `echo $PWD | awk -F / '{ print "/"$4"/"$5 }'`
echo $PRJHOME
#x = `echo "/"$PRJHOME1`
#echo $x

set PRJNAME = `grep "NAME" /home/gmira/*/.prjrc | cut -f2 -d=`
echo $PRJNAME

mais lorsque j'exécute le script, je n'obtiens rien dans le echo
et que quelqu'un peut m'aider
Merci

10 respuestas

  1. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
     
    Hola,

    El comando "set" en shell "sh" al menos sirve para posicionar parámetros y no para inicializar parámetros :
    [jp@Mandrake tmpfs]$ set moi = bonsoir [jp@Mandrake tmpfs]$ echo $* moi = bonsoir [jp@Mandrake tmpfs]$ echo $2 = [jp@Mandrake tmpfs]$ echo $3 bonsoir [jp@Mandrake tmpfs]$
    Además para inicializar una variable no debe haber espacio entre el nombre de tu variable, el signo igual y el valor de tu variable :
    [jp@Mandrake tmpfs]$ set moi = bonsoir [jp@Mandrake tmpfs]$ echo $moi [jp@Mandrake tmpfs]$ moi=bonsoir [jp@Mandrake tmpfs]$ echo $moi bonsoir [jp@Mandrake tmpfs]$
    Para inicializar tus variables basta con darles su nombre seguido del signo igual y de su valor sin espacios, y eventualmente entre comillas si el valor contiene espacios o caracteres especiales :
    VAR="Ceci est une variable"

    --
    Z'@+...che.
    JP : Zen, mis Nuggets ! ;-) El saber solo es bueno si se comparte. 
    8
  2. sarag
     
    pero yo quiero que la variable $moi sea conocida no solo dentro del script sino también en otros lugares (exactamente como una variable de entorno: $path, $user, .........)
    es por eso que he utilizado set
    1
    1. Usuario anónimo
       
      entonces ahí sí puedes hacer definitivamente una cruz sobre ello

      una variable definida en un subproceso nunca es conocida por el shell padre, no hay forma

      si quieres que sea conocida en el shell padre, en lugar de ejecutar tu archivo debes *sourcerlo* en el shell padre

      es decir, si tu script se llama torgnole haces

      . torgnole

      en lugar de

      ./torgnole o torgnole

      --
      gnagnagna
      0
    2. Usuario anónimo
       
      agregaré que no solo hará falta la fuente sino que además habrá que usar export

      además la variable solo estará definida EN el shell en el que se fuente el archivo

      pongamos que abres dos shells (en dos vt) y fuentes el archivo en uno de ellos, la variable no estará definida en el otro

      --
      gnagnagna
      0
  3. sarag
     
    Utilicé export pero no funcionó,
    lo hice:
    export nom=valeur

    pero no funcionó, me da el siguiente error:
    nom=valeur: is not an identifier

    No sé cómo debo hacer para resolver este problema
    1
    1. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
       
      En Bourne shell no es posible inicializar una variable en el comando "export"; hay que hacerlo en dos pasos: variable=valor export variable ;-) -- Z'@+...che. JP : Zen, ¡mis Nuggets! ;-) El saber no es bueno si no se comparte.
      0
  4. sarag
     
    Intento incluso con este pequeño ejemplo:

    #! /bin/sh
    set moi=bonsoir
    echo $moi

    pero no funciona
    ¿sabes de dónde viene el error?

    Gracias de antemano
    0
  5. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
     
    Te dije que el comando set sirve para posicionar parámetros. ¡Bórralo!
    [jp@Mandrake tmpfs]$ cat script.sh #! /bin/sh moi=bonsoir echo $moi [jp@Mandrake tmpfs]$ sh script.sh bonsoir [jp@Mandrake tmpfs]$
    ;-))

    --
    Z'@+...che.
    JP : Zen, mis Nuggets ! ;-) El saber sólo es bueno si se comparte.
    0
  6. tisc0
     
    Hacer que una variable sea "permanente": ¿agregar la variable en .bashrc?

    Para este fragmento de código que recalcitra... hay QUE QUITAR el set :

     #! /bin/sh # Comentario que dice lo que hacemos if [ -f /home/prj/itsec/.prjrc ]; then echo " ftlog ftflag local-user site file" else echo "no encontrado" fi # Comentario que dice lo que hacemos PRJHOME="'echo $PWD | cut -d / -f 4-5'" echo $PRJHOME # Comentario que dice lo que hacemos PRJNAME='grep "NAME" /home/.prjrc | cut -f2 -d=' echo $PRJNAME 
    0
  7. sarag
     
    hola,

    con comandos que escribes en el prompt como te mostré, funciona, pero en un archivo como el siguiente:

    #! /bin/sh
    #

    if [ -f /home/prj/itsec/.prjrc ]; then
    echo " ftlog ftflag local-user site file"
    else
    echo "non trouve"

    fi

    set PRJHOME="`echo $PWD | cut -d / -f 4-5`"
    echo $PRJHOME

    set PRJNAME=`grep "NAME" /home/.prjrc | cut -f2 -d=`
    echo $PRJNAME

    ca marche pas!!!!!!
    je sais pas pk?
    -1