02-25-2007
You don't say what os you're using, what language you're trying to use, or give much info on how the script is used (always for one particular user? for everyone on the system?). I will assume that you're using Solaris 10, trying to program in ksh, and running the script for every user on the box. If these assumptions are wrong, your mileage may vary.
There are several problems with your code. I see the comment where you claim the mailfile is always blank. But the code which is present to handle a non-blank mailfile is guaranteed to fail and should be removed. Leaving broken remnants of old code in a script is asking for trouble down the road. I have never seen syntax like:
while ( [ $mailstat -eq 0 ] )
I think that may be legal. It might even be useful with a much more complex test. The normal syntax is:
while [ $mailstat -eq 0 ]
Your parentheses are demanding that the test be preformed in a subshell. The exit code of the subshell should be the exit code of the [ command in this case. But you are starting an extra process for no good reason. More to the point, the loop is not useful. You should be doing:
1) check for existence of mail, exit if none
2) save any mail present
There is a concurrency issue here... mail may be present during step 1 and absent during step 2. Step 2 needs to accept that...it is not an error. Step 2 should be a one shot deal, not a loop. If new mail arrives immediately after the save, your script will get to it the next time it is launched. You are looping, probably not to handle newly arrived mail, but rather to handle one message at a time. That is not efficient. "save * filename" will grab all of the mail at once. It is more efficient and eliminates most of your problem.
mailx initializes itself by processing a system-wide startup script. Then it processes a user specific startup script. A -n will inhibit the former but not the latter. The mailx man page says the save command "Save the specified messages in the given file. The file is created if it does not exist. The file defaults to mbox. The message is deleted from the mailbox when mailx terminates unless keepsave is set (see also Internal Variables and the exit and quit commands). If a user has a .mailrc that sets keepsave, your script will not empty his mailbox. This is my best guess as to why you have your current problem and I don't know what to suggest. I don't think you should override a user's wishes without consulting with the user in question.
10 More Discussions You Might Find Interesting
1. HP-UX
When I try to connect to databse from HP box using the following command
sqlplus <username>@<databasename>
I get this error message:
ksh: <database name> : not found
I can connect to the database outside the UNIX box using sqlplus though.
Looks like the problem is the way HP Unix is... (4 Replies)
Discussion started by: dtonse
4 Replies
2. Shell Programming and Scripting
Hi all,
i have a perl script one server. I am running a cronjob to execute my perl script.
#! /usr/bin/perl
...
...
...
#call a shell script on another server How can i accomplish #?
Do i have to issue a system (" ssh -l username server | shellscript.sh") in my shell script? or is there a... (1 Reply)
Discussion started by: new2ss
1 Replies
3. Shell Programming and Scripting
Hi,
I have one situation. I am developing a shell script to which parameters will be passed from a Web based User Interface using some Business Process(BP).There are some 6 parameters for which user will enter the values in UI. These values will be passed to script by BP in the form -... (2 Replies)
Discussion started by: The Observer
2 Replies
4. Shell Programming and Scripting
I am not able to access the aliases in my environment within a Python script. If I pass the alias to os.system(), I get a message saying "sh: x: not found". I've tried sourcing my .bashrc file in the script, but this does not work. I would perfer not to source my or any rc file because this... (9 Replies)
Discussion started by: cooldude
9 Replies
5. UNIX for Dummies Questions & Answers
rshstatus=`rsh -n lilo /db/p2/oracle/names9208/restart_names.sh`
if $rshstatus <>0 then
errstatus=1
mailx -s "xirsol8dr" ordba@xxx.com >> $log_dr
else if errstatus=0
echo "status to xirsol8dr successful"
can anyone provide if this is t he correct way to do this or is there a better way? (1 Reply)
Discussion started by: bpm12
1 Replies
6. Shell Programming and Scripting
Hello all !
I'm trying to write a shell script (bash) to ftp a file starting with particular name like "Latest_" that is present on a Windows box to UNIX server. Basically I want to set this script in the cron so that daily the new build that is posted on the Windows box can be downloaded to the... (2 Replies)
Discussion started by: vijayb4u83
2 Replies
7. Web Development
Hi Everybody,
I was wondering if it was possible for someone to gain access to my Perl CGI scripts before they are interpreted by Perl (mod_perl on apache2) i.e. getting a hold of my raw scripts and not the html output?
Let's say I use the DBI module where I have the hostname, user and... (2 Replies)
Discussion started by: z1dane
2 Replies
8. Solaris
Hi, I wanted to configure a mail system on my UNIX box.
For that I read a document Sun Internet Mail Server 3.5 Advanced Installation Guide: Contents which is actually quite useful document but I am not sure from where can I bring patch? Is this patch will come in any CD form which I need to run... (1 Reply)
Discussion started by: Dhruvak
1 Replies
9. Shell Programming and Scripting
Hi,
I would like to clean up by unix mail mail box thru some script command.. I do know how to delete from mail box ...
e.g.
$ mail
? d*
? quit
But I need to clean up thru some command which I can use in my script before sending any email..
Thanks in advance! (1 Reply)
Discussion started by: pareshkp
1 Replies
10. Open Source
Hi All,
I have a current Process that runs "windows script " for the file movement that needs to changed to a "DataStage Process (Using shell script )"
Source :Text file is getting generated as part of Datastage Jobs processes and resides in a shared drive (Unix server)
Target :ftp... (2 Replies)
Discussion started by: developer.dwh9
2 Replies
LEARN ABOUT SUNOS
thr_setconcurrency
thr_getconcurrency(3C) Standard C Library Functions thr_getconcurrency(3C)
NAME
thr_getconcurrency, thr_setconcurrency - get or set thread concurrency level
SYNOPSIS
cc -mt [ flag... ] file...[ library... ]
#include <thread.h>
int thr_setconcurrency(int new_level);
int thr_getconcurrency(void);
DESCRIPTION
These functions are obsolete and maintained for compatibility only. The thr_setconcurrency() function updates the desired concurrency
level that libthread maintains for the calling process. This value does not affect the behavior of the calling process.
The thr_getconcurrency() function returns the current value for the desired concurrency level.
RETURN VALUES
The thr_getconcurrency() function always returns the current value for the desired concurrency level.
If successful, the thr_setconcurrency() function returns 0. Otherwise, a non-zero value is returned to indicate the error.
ERRORS
The thr_setconcurrency() function will fail if:
EAGAIN The specified concurrency level would cause a system resource to be exceeded.
EINVAL The value for new_level is negative.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|MT-Level |MT-Safe |
+-----------------------------+-----------------------------+
SEE ALSO
thr_create(3C), attributes(5), standards(5)
SunOS 5.10 11 May 1998 thr_getconcurrency(3C)