Set command

lok -  
 tisc0 -
Hello,

I used the set command in a script, the part of the script is as follows:

#! /bin/sh
#

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

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

But when I execute the script, I get nothing in the echo
Could someone help me
Thank you

10 answers

jipicy Posted messages 40842 Registration date   Status Moderator Last intervention   4 898
 
Hello,

The "set" command in the "sh" shell at least is used to set parameters and not to initialize parameters:
[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]$
Moreover, to initialize a variable, there should be no space between the variable name, the equal sign, and the variable value:
[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]$
To initialize your variables, simply give their name followed by the equal sign and their value without spaces, and optionally in quotes if the value contains spaces or special characters:
VAR="This is a variable"

--
Z'@+...che.
JP : Zen, my Nuggets ! ;-) Knowledge is only good if it is shared. 
8
sarag
 
but I want the variable $moi to be known not only inside the script but also elsewhere (exactly like an environment variable: $path, $user, ........)
that's why I used set
1
Anonymous user
 
so you can definitely forget about it

a variable defined in a subshell is never known by the parent shell, there is no way

if you want it to be known in the parent shell, instead of executing your file you need to source it in the parent shell

that is if your script is called torgnole you do

. torgnole

instead of

./torgnole or torgnole

--
blah blah blah
0
Anonymous user
 
I would like to add that not only will it need to be sourced but also, it will need to use export

Moreover, the variable will be defined ONLY in the shell where you source the file

Let's say you open two shells (in two virtual terminals) and you source the file in one of them, the variable will not be defined in the other anyway

--
gnagnagna
0
sarag
 
I used export but it didn't work,
I did:
export name=value

but it didn’t work, it gives me the following error:
name=value: is not an identifier

I don't know how I should fix this problem
1
jipicy Posted messages 40842 Registration date   Status Moderator Last intervention   4 898
 
In Bourne shell, it is not possible to initialize a variable in the command "export"; it must be done in two steps:
variable=valeur export variable
;-)
--
Z'@+...che.
JP : Zen, my Nuggets ! ;-) Knowledge is only valuable when it is shared.
0
sarag
 
I even tried with this little example:

#! /bin/sh
set moi=good evening
echo $moi

but it doesn't work
do you know where the error comes from?

Thanks in advance
0
jipicy Posted messages 40842 Registration date   Status Moderator Last intervention   4 898
 
I told you the set command is used to set parameters. Get rid of it!!!
[jp@Mandrake tmpfs]$ cat script.sh #! /bin/sh moi=good evening echo $moi [jp@Mandrake tmpfs]$ sh script.sh good evening [jp@Mandrake tmpfs]$
;-))

--
Z'@+...che.
JP : Zen, my Nuggets ! ;-) Knowledge is only good when shared. 
0
sarag
 
Ce n'est pas la même chose, bien que `sh` et `tcsh` soient tous deux des interpréteurs de commandes. `sh` est le shell Bourne, tandis que `tcsh` est une version améliorée de `csh`, qui offre des fonctionnalités supplémentaires comme l'édition de ligne de commande et l'auto-complétion.
0
sarag
 
Is it the same thing as sh or tcsh?

Thank you
0
tisc0
 
Make a variable "permanent": add the variable in .bashrc ?!

For this piece of code that is stubborn... you MUST REMOVE the set:

 #! /bin/sh # Comment that explains what we are doing if [ -f /home/prj/itsec/.prjrc ]; then echo " ftlog ftflag local-user site file" else echo "not found" fi # Comment that explains what we are doing PRJHOME="'echo $PWD | cut -d / -f 4-5'" echo $PRJHOME # Comment that explains what we are doing PRJNAME='grep "NAME" /home/.prjrc | cut -f2 -d=' echo $PRJNAME 
0
sarag
 
Hi,

still no response? :(
-1
sarag
 
Hello,

with the commands typed in the prompt like you showed me, it works, but in a file like the following:

#! /bin/sh
#

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

fi

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

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

it doesn't work!!!!!!
I don't know why?
-1