Solved

In the Unix bash shell script, how to capture who the user running the script is?

Posted on 2013-01-30
10
833 Views
Last Modified: 2013-01-30
Hi, in the Unix bash shell script I am trying to capture who the user running the script is.

Question:
What would be a Unix bash shell script/commands so that "me007" (Unix user name) can be replaced with a name of the user running this script?

By the way, this script is called from the .bash_profile

Below is a working Unix script which is intended to delete those unneeded SAS* directories without asking a user too many questions but all files in those directories will be deleted automatically as well. I would like any user to be able to run this script from their .bash_profile file but as you see right now it is not possible to do that because there is a specific user name (me007) hardcoded in the script.

Note:
me007 - a user name on Unix server.
/directory1/tmp - a directory where all these processes will occur.
 
for dir in $(find /directory1/tmp -type d -a -user me007 -a  -name "SAS*")
do
   echo "Remove $dir (y/n)?  "; read YN
   [[ $YN = Y || $YN = y ]] && rm -r $dir 
done

Open in new window

0
Comment
Question by:labradorchik
10 Comments
 
LVL 4

Assisted Solution

by:AnthonyHamon
AnthonyHamon earned 150 total points
Comment Utility
The currently logged on user is in the environment variable $LOGNAME
echo You are logged on as $LOGNAME

You may need to export it first:
export LOGNAME
0
 
LVL 19

Accepted Solution

by:
n2fc earned 200 total points
Comment Utility
instead of "me007" use "$USER" or "$LOGNAME" environment variable to pick up logged on user id
0
 

Author Comment

by:labradorchik
Comment Utility
Sorry, but I am not sure if I understand you correctly. How can $LOGNAME be implemented within this script?
 
Should I just place export $LOGNAME before this script and that is all?
In that case, what should I exchange "me007" with?
0
 
LVL 19

Expert Comment

by:n2fc
Comment Utility
Try this script to see how the variables react in YOUR system!

echo " LOGNAME: "
echo $LOGNAME
echo "*********"
echo " USER: "
echo $USER
echo "*********"

Open in new window

0
 
LVL 19

Expert Comment

by:n2fc
Comment Utility
The export may or may not be necessary...
If needed, it will be the first line in the script...

Try the script sample above... Your system will react properly either with $LOGNAME or $USER instead of "me007"...
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:labradorchik
Comment Utility
Oh, just like this?

export $LOGNAME

for dir in $(find /directory1/tmp -type d -a user $LOGNAME -a  -name "SAS*")
do
   echo "Remove $dir (y/n)?  "; read YN
   [[ $YN = Y || $YN = y ]] && rm -r $dir 
done

Open in new window

0
 
LVL 19

Expert Comment

by:n2fc
Comment Utility
You forgot - before -user $LOGNAME...

Otherwise OK...
Try each way... $USER and $LOGNAME
0
 
LVL 68

Assisted Solution

by:woolmilkporc
woolmilkporc earned 150 total points
Comment Utility
LOGNAME is in the environment anyway, so no need to export it.

Further, the shell will expand $LOGNAME before "find" will see it, another reason why it doesn't have to be exported.

Next, the statement, if used anyway, must read "export LOGNAME" without "$" in front.

Lastly, please note that $USER and $LOGNAME will not change to "newuser" after issuing "su newuser", but $(whoami)  and $LOGIN will.
After "su - newuser" all four variables will change to "newuser", but $(who am i | cut -f1 -d" ") will not.
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
Comment Utility
change the username to:
`whoami`
0
 

Author Comment

by:labradorchik
Comment Utility
Thank you everyone for your comments and suggestions!!
I just replaced user with $LOGNAME and it worked fine! :)
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

In this tutorial I will show you how to provide a dynamic RTF document on your website generated with data from your database. For this tutorial you will need Microsoft Word or WordPad, WhizBase and Microsoft Access. In this tutorial I will show …
Using libpcap/Jpcap to capture and send packets on Solaris version (10/11) Library used: 1.      Libpcap (http://www.tcpdump.org) Version 1.2 2.      Jpcap(http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/index.html) Version 0.6 Prerequisite: 1.      GCC …
Learn the basics of if, else, and elif statements in Python 2.7. Use "if" statements to test a specified condition.: The structure of an if statement is as follows: (CODE) Use "else" statements to allow the execution of an alternative, if the …
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now