How to ignore STDERR when nesting commands?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to ignore STDERR when nesting commands?
# 1  
Old 04-30-2009
Question How to ignore STDERR when nesting commands?

I have a pel script running as root that needs to read the contents of a file on a remote system, I have an ssh trust relationship as a particular user but not as root.

I then need to write back out to that file again to change it's content a bit.

On the surface this seemed really easy but I'm getting tangled up in all the layers required to actually do this.

I'm tryint to do the following:
Code:
su - <username of this side trust relationship> -c \"ssh <username of far-side trust>@<target server> cat <filename>\"

This seems to work pretty well but it's including the login banner at the top of the "file" returned and I can't seem to get it to ignore it.

I've tried including '2> /dev/null' at various points in the line to no avail.

In order to get to the bottom of this, I've abstracted that part out into a shell script called 'remote-cat.sh:
Code:
#!/bin/sh
su - $1 -c "ssh -q -n $2 cat $3"

Which returns the login header followed by the file contents:
Code:
bash-3.00# ./remote-cat.sh username otheruser@remotehost ace.cfg.text
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
Started interactive bash shell
<AceConfig>
   <LU62>
      <Locale>ENG</Locale>
   ...

If I change my script to be:
Code:
#!/bin/sh
su - $1 -c "ssh -q -n $2 cat $3 >/dev/null"

I only see the header:
Code:
bash-3.00# ./remote-cat.sh username otheruser@remotehost ace.cfg.text
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
Started interactive bash shell
bash-3.00#

But if I change the script to use 2> /dev/null:
Code:
#!/bin/sh
su - $1 -c "ssh -q -n $2 cat $3 2>/dev/null"

I just get the header and text combined again like before.

So, where am I going wrong here? Or is there better way to do this in perl without having to do all the su, ssh, cat rubbish?
# 2  
Old 04-30-2009
try adding the ssh -o BatchMode=yes option.

your initialization files think your coming in with an interactive session.

a better solution would be to use scp to copy the file locally and then operate on it.
# 3  
Old 04-30-2009
Quote:
Originally Posted by frank_rizzo
try adding the ssh -o BatchMode=yes option.
No joy there, just got the same behaviour as without it.
Quote:
Originally Posted by frank_rizzo
a better solution would be to use scp to copy the file locally and then operate on it.
I was hoping not to have to in order to have fewer temp files kicking round, but I think that might be the way to do it and it actually makes my life easier when trying to write the change back afterwards.

Cheers!
# 4  
Old 04-30-2009
another thing you can try on the remote side is to modify the .profile or whatever .file your shell uses and wrap the commands in this


Code:
if tty -s
then
   echo starting shell blah blah
fi


another thought is that the first two lines are actually being printed from the local machine when you run the su command but before ssh starts to execute. try the tty -s solution there first.

Last edited by frank_rizzo; 04-30-2009 at 11:17 PM.. Reason: forgot code tags
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Issue nesting variables in csh.

The variables given are already defined ($file1-$file3, $obsid1-$obsid3, and $n=3). When I go to run the code, the terminal outputs "Missing }." I believe the error is with the nesting of variables. It would save a lot of time getting this while loop working. set i = 1 while (${i} <=... (5 Replies)
Discussion started by: ojdefdidit
5 Replies

2. Shell Programming and Scripting

Bash - Nesting if statement in for loop

I have the basic command written in bash for element in 1 2 do if ]; then set el = "t" else set el = "p" fi done but i get the following error syntax error near unexpected token `for' ` for element in 1 2' What should i do differently? (3 Replies)
Discussion started by: ncwxpanther
3 Replies

3. Shell Programming and Scripting

Nesting backticks

I'm trying to make a dialog window that prints the output of grep that takes the output of find. Unfortunately my nested backticks don't work. Here is the dialog window: dialog --stdout --title "test" --backtitle "test" --msgbox "Test:\n `grep -l "${tablica}" `find $string``" 16 60I think I... (2 Replies)
Discussion started by: Starting_Leaf
2 Replies

4. UNIX for Dummies Questions & Answers

how to get stderr

Hello I try to store stderr into a variable, then if this var is not empty i send an email and stop my script. I think my problem is due of "<$dump" into my command line. my bad command line (see samples below on this post) if ! $returnedStr ; then echo ERROR READING DUMP: ... (8 Replies)
Discussion started by: giova
8 Replies

5. Shell Programming and Scripting

BASH Varible nesting and user input

Well, I think I've managed to take two different issues and conglomerate them into and embarrasing mess. #!/bin/bash # Set some variables dir1=/path/that/isnt/variable/$variabledir/dir/ dir2=/path/that/isnt/variable/$variabledir/important/"$variabledir"-subdirectory/path/ echo "Gimme... (7 Replies)
Discussion started by: karlp
7 Replies

6. Google Chrome OS

Case Nesting

sdfdefgsrg (2 Replies)
Discussion started by: frankycool
2 Replies

7. UNIX for Dummies Questions & Answers

Isn't a shell found on a beach? Need help nesting if's or loops.

As of a week ago i thought a shell was somthing found on a beach. I'm a virgin when it comes to scripting and i'm having a really bad time here. What i need to do is prompt for a group number grep the /etc/groups to get the GID and name if it exists i want to prompt the user for... (3 Replies)
Discussion started by: switchkill
3 Replies

8. UNIX for Dummies Questions & Answers

zip nesting empty folders

I'm using the following command to zip a project file, but when it finishes, the resulting zip file contains all the directories above the file I wanted zipped, myapp.app, each one empty until you get to the actual app. zip -r myapp.app.zip ... (0 Replies)
Discussion started by: groundlevel
0 Replies

9. Shell Programming and Scripting

how to ignore control commands

hi, while we writing shell script, i want to ignore interrupts likes - "control + C" or "control + \" coz I just print out the message. how can i do this? thanks min (3 Replies)
Discussion started by: myoeminn
3 Replies

10. Programming

stderr

in fprint(stderr, "lkjalsdi\n"); what does stderr mean? thanks (1 Reply)
Discussion started by: dell9
1 Replies
Login or Register to Ask a Question