Sponsored Content
Top Forums Shell Programming and Scripting Banner causes scp to fail from script but not command line. Post 302544297 by DGPickett on Wednesday 3rd of August 2011 11:44:01 AM
Old 08-03-2011
Yes, having a .profile or env file to run first is always a good idea, so it runs like interactive in cron or other non-interactive milieu. I used to test using "ssh localhost command args" to see how it runs without a tty or built env.

If fd 2 was closed, nobody can enjoy writing to stderr or fd 2 until it is replaced with an open fd.

Short overview of files, fd, FD, FILE*, stdin, stderr, stdout. Programs written in languages such as C wake up with already established symbols stdin, stdout, stderr: FILE*, which are inside the process with buffers, for stderr set to 0 buffer, using fd # 0, 1 and 2, respectively. A fd is just an integer offset to an array in the Kernel Process Area, of pointers to actual FD in the kernel resulting from open(), socket(), pipe(), accept(). Thus, the same FD can be under many fd # in many processes. All those processes may have FILE* buffers, so it is a danger of scrambled lines if they all write (to the internal buffer) and do not fflush() the FILE* buffer to the fd with every line (an available option). Similarly, shared input can get read into a buffer by command 1 and not be found by command 2 reading a shared fd. This is why the 'line' command was coded -- reads one line from fd and stops. Since stderr is for errors, it is not buffered, and not a good place for volume. Exit() gracefully closes all FILE*, flushing them before close(). Excess input read into buffers is discarded, since you cannot push data back into a FD, generally. (You can push 1 byte back into a FILE*, but this within one process!)

A process can even open a file and send the pointer to another process to install into that process FD* array, which some web servers do to distribute incoming TCP connections to an army of child web servers. The master just listens, accepts and sends the connection FD to a child over a local pipe or socket. Of course, you cannot send a FD off host, different kernel, so I am not sure how clusters deal with this!

In shell, the inheritance of fd is great, and the subshell is a great way to use it. All the commands in (...) inherit the same input, output and error FD unless they are piped or redirected. You can pipe and redirect the whole (...) once for all. You can concatenate the output of many commands. This is both robust and fast, since nothing is actually happening but the sharing of common FD. For instance, if you want to sort lines 2-N of a huge file, do not run all lines through any command, just do this:
Code:
whatever|( line ; sort )|whatever_else

 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Banner command

Hey all, I want to use the banner/echo command to write messages on different console windows. I knew that before, but I completely forget how to do it ! I just remenber that /dev/pts/# is the number of the window. and it's useful. It would be great if someone knows how to solve my... (4 Replies)
Discussion started by: maxwell17
4 Replies

2. Linux

banner command

is there a similiar function to the solaris banner function in linux? (1 Reply)
Discussion started by: BG_JrAdmin
1 Replies

3. UNIX for Dummies Questions & Answers

banner command

can I use Banner command in Linux, if not, what is the similar command in linux then... (7 Replies)
Discussion started by: vasikaran
7 Replies

4. Shell Programming and Scripting

banner:command not found

hi, When i execute banner command the output is being displayed as banner:command not found When ever i give yum install banner the output is Loading "installonlyn" plugin Setting up Install Process Setting up repositories Parsing package install arguments Nothing to do what... (8 Replies)
Discussion started by: prakashreddy
8 Replies

5. Shell Programming and Scripting

doubt in banner command !!!

hello, I am using banner command in my shell.I used :- The problem is that the output is printed in 3 separate lines.I want to display it in a single line.If the size is not enough then at least 2 words should come in the same line. Can you tell me what is the option in banner that would help... (4 Replies)
Discussion started by: nsharath
4 Replies

6. Shell Programming and Scripting

regarding banner command

Iam a MCA student having some doubts about 1) different disk related commands 2) Banner command 3) Different file related commands 4) set eb (where it is used) (1 Reply)
Discussion started by: gururajbhat
1 Replies

7. UNIX for Dummies Questions & Answers

UNIX Banner Command

Hi, I am logging in into an UNIX environment with my user id and password. I want to display my name there , each time I login into the environment, for which I can use the banner command. Which file should I add the banner command to , so that I will get the desired result? Regards,... (7 Replies)
Discussion started by: Kishore_1
7 Replies

8. Shell Programming and Scripting

tr command fail to work in script

Hi, I has the following command in the script. This command works fine if I execute on command prompt. If I run the script, this is not working as expected (deleting CR). tr -d "\015" < ${FilePath}/${FileName} > ${FilePath}/${File_Prefix}.csv I could not figure out whats... (6 Replies)
Discussion started by: kavuri
6 Replies

9. Solaris

don't want banner displayed when using scp

:wall: Is there a way to prevent the banner from displaying from the remote host when using scp? I see from the man pages that the '-o' option passes args to ssh and I've tried several variations of: scp -o "-q" file remotehost: Anybody got this to work? Thanks in Advance (3 Replies)
Discussion started by: bluescreen
3 Replies

10. Shell Programming and Scripting

Banner command equivalent in Linux

Hi guys can i get banner equivalent command in linux. I am using Linux xcclx0619.target.com 2.6.18-308.11.1.el5xen #1 SMP Fri Jun 15 16:19:17 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux (1 Reply)
Discussion started by: mohanalakshmi
1 Replies
STDIN(3)						   BSD Library Functions Manual 						  STDIN(3)

NAME
stdin, stdout, stderr -- standard I/O streams SYNOPSIS
#include <stdio.h> extern FILE *stdin; extern FILE *stdout; extern FILE *stderr; DESCRIPTION
Under normal circumstances every Unix program has three streams opened for it when it starts up, one for input, one for output, and one for printing diagnostic or error messages. These are typically attached to the user's terminal (see tty(4)) but might instead refer to files or other devices, depending on what the parent process chose to set up. (See also the ``Redirection'' section of sh(1) .) The input stream is referred to as ``standard input''; the output stream is referred to as ``standard output''; and the error stream is referred to as ``standard error''. These terms are abbreviated to form the symbols used to refer to these files, namely stdin, stdout, and stderr. Each of these symbols is a stdio(3) macro of type pointer to FILE, and can be used with functions like fprintf(3) or fread(3). Since FILEs are a buffering wrapper around Unix file descriptors, the same underlying files may also be accessed using the raw Unix file interface, that is, the functions like read(2) and lseek(2). The integer file descriptors associated with the streams stdin, stdout, and stderr are 0, 1, and 2, respectively. The preprocessor symbols STDIN_FILENO, STDOUT_FILENO, and STDERR_FILENO are defined with these values in <unistd.h>. Note that mixing use of FILEs and raw file descriptors can produce unexpected results and should generally be avoided. (For the masochistic among you: POSIX.1, section 8.2.3, describes in detail how this interaction is supposed to work.) A general rule is that file descriptors are handled in the kernel, while stdio is just a library. This means for example, that after an exec, the child inherits all open file descriptors, but all old streams have become inaccessible. Since the symbols stdin, stdout, and stderr are specified to be macros, assigning to them is non-portable. The standard streams can be made to refer to different files with help of the library function freopen(3), specially introduced to make it possible to reassign stdin, stdout, and stderr. The standard streams are closed by a call to exit(3) and by normal program termination. SEE ALSO
sh(1), csh(1), open(2), fopen(3), stdio(3) CONSIDERATIONS
The stream stderr is unbuffered. The stream stdout is line-buffered when it points to a terminal. Partial lines will not appear until fflush(3) or exit(3) is called, or a newline is printed. This can produce unexpected results, especially with debugging output. The buffer- ing mode of the standard streams (or any other stream) can be changed using the setbuf(3) or setvbuf(3) call. Note that in case stdin is associated with a terminal, there may also be input buffering in the terminal driver, entirely unrelated to stdio buffering. (Indeed, nor- mally terminal input is line buffered in the kernel.) This kernel input handling can be modified using calls like tcsetattr(3); see also stty(1), and termios(3). CONFORMING TO
The stdin, stdout, and stderr macros conform to ANSI X3.159-1989 (``ANSI C89''), and this standard also stipulates that these three streams shall be open at program startup. Linux 2.0 March 24, 1998 Linux 2.0
All times are GMT -4. The time now is 05:16 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy