What is with the '&'.

Hi Gurus,
I would appreciate if someone could enlighten this newbie as to how significant the '&' is to unix.
Currently I am getting around to writing a script which has to deal with a lot of these ampersands either as starting chars or between chars.
Please find below the simpliest way that I could find in getting this thread posted with the subject.

rose_pa--root::/data/connect>mkdir &Q2
[1] 29264
ksh: Q2: not found.
rose_pa--root::/data/connect>Usage: mkdir [-p] [-m mode] Directory ...

Would appreciate any input
thnx

Hello,
The & has several modes of significance on the Unix command line. The 2 most common forms I usually encounter are for running jobs in the background and for redirecting STDERR.

When & appears at the end of a command string, this usually signifies you want that command to run in the background. This returns control of your session back to you. If you submit a command that normally takes 5 minutes with no & on the end of it, you have to wait 5 minutes until the prompt returns. With & on the end, you get the command prompt back immediatly and your commmand continues to run.

The command that follows is actually interpretted by the shell as 2 commands.

rose_pa--root::/data/connect>mkdir &Q2

ksh thinks you are running a command called mkdir and a second command called Q2. mkdir is being put in the background. That is why you get this message:

[1] 29264

This is the process ID of mkdir.

Then the shell tries to run Q2 thinking it is another command. Then you get:

ksh: Q2: not found.

mkdir then completes and gives you the error:

rose_pa--root::/data/connect>Usage: mkdir [-p] [-m mode]
Directory ...

This is because no directory name appeared prior to the &.

I hope this makes sense. You may want to check the man pages for fg as well. This brings background jobs to the foreground.

TioTony

And if you really wanted to have a directory with an "&" in it, you would have to escape the special meaning of the character, like this:

$ mkdir \&Q2
$ cd \&Q2
$ ls
 &Q2

Another use of the ampersand "&" is to link commands in series..... typically best used as a double ampersand - which will only execute the subsequent commands if the preceeding one is successful

i.e.

cd /export/home/my_dir && ls -l && rm -i *old

This command will first change your directory - then list the contents - then remove files ending in 'old' (interactively prompting).

The difference of the double ampersand vs the single (cd /export/home/my_dir & ls -l & rm -i *old) is that if one of the preceeding commands failed (i.e there is no my_dir directory) then the subsequent command would still try to execute. With double when it fails the command doesn't try to do any more.

Maybe not related to your query re: directory or filenames - but will help to understand what it's useaeg can be.

Thank you very much indeed.