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

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
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
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
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
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
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
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
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
sarag
 
¿Es lo mismo cambiar que hacer SH o tcsh?
0
sarag
 
Quería decir: ¿es lo mismo que sh o tcsh?

Gracias
0
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
sarag
 
hola,

¿todavía no hay respuesta? :(
-1
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