Sunday 14 July 2019

Bash command output not saving to text file or variable




I am seeing strange behavior when trying to store the output of an SSH check to see if I have SSH access to an account. I tried the following:



ssh git@bitbucket.org > temp.txt


and I expect a string message telling me if permission was denied or not to be saved to temp.txt. But the output goes straight to the terminal and isn't saved to file. But, if I do



ls -l > temp.txt



that output is saved to file. What could be causing this difference in behavior? I'm ultimately going to be saving the output to a variable but see similar behavior for that case as well. I'm on Ubuntu 16.04 bash version 4.3.48(1).


Answer



Since "permission denied" is typically considered an error, is the output being routed to stderr instead of stdout? If so, you need to use 2> temp.txt or > temp.txt 2>&1.



More information:



On many systems, program output is broken up into multiple streams, most commonly stdout (standard output) and stderr (standard error). When you use >, that only redirects stdout, but 2> can be used to redirect stderr. (This is useful if you want normal output and errors to go to two different files.)




The syntax 2>&1 means "take all output on stderr and redirect it to stdout", so your file would contain output from both streams.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...