How to check for Input Redirection in my script?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to check for Input Redirection in my script?
# 1  
Old 03-29-2010
How to check for Input Redirection in my script?

All,

I have a requirement to write a script where I check for Input redirection when the script was executed, based on which I handle my logic. Below is the example:

my.script
Code:
#! /bin/ksh
# Not sure how to frame the if condition below
if [ input_redir = "Y" ]; then
  echo "Input Redirected from a file"
  Do Processing.....
else
  echo "No Input Redirection"
  Do Processing....
fi

So once the script is written, the script could be executed in following 2 ways which i should handle:

Run 1
Executed as:
Code:
./my.script

Result:
Code:
No Input Redirection

Run 2
Executed as:
Code:
./my.script < test.file

Result:
Code:
Input Redirected from a file

Hope I made myself clear. Let me know for any questions.

Bharath
# 2  
Old 03-29-2010
Do you really need ? What is the real problem ?
You need input, you need input from stdin or from file like most of commands has done ?
If argument, it's the input file, if not then use stdin:
Code:
file=$1
cat $file | while read line
do
    some...
done

# 3  
Old 03-29-2010
Thanks kshji,

I did try that, below is the example where I tried to use the No. of arguments to find the redirection, but that does NOT work for me. And only so I did not post it in my first post.

my.script
Code:
#! /bin/ksh
numargs=$#
case $numargs in
0)
  echo "No. of Args : $numargs"
  echo "Parameter 0 = $0"
;;
*)
  echo "No. of Args : $numargs"
  i=1;
  for d in $@
  do
    echo "Parameter $i = `echo $d`"
    i=`expr $i + 1`
  done
;;
esac

Below are the different runs:
Run 1: Running with NO redirection

Code:
$ ./my.script
No. of Args : 0
Parameter 0 = ./my.script

Run 2: Running with redirection
Code:
$ ./my.script < test.file
No. of Args : 0
Parameter 0 = ./my.script

Run 3: Running with arguments
Code:
$ ./my.script Hi this is a test text
No. of Args : 6
Parameter 1 = Hi
Parameter 2 = this
Parameter 3 = is
Parameter 4 = a
Parameter 5 = test
Parameter 6 = text

Hope this helps! Let me know if you need any more information.

Thanks
Bharath
# 4  
Old 03-29-2010
What you have found out is common knowledge: input (or output) redirection is not part of any parameters because it is an OS service: every process has several I/O-channels and per default 3 of them are in use: <stdin>, <stdout> and <stderr>. It is only common default, but in no way necessary, that <stdin> is pointing to the keyboard and <stdout> and <stderr> are both pointing to the terminal screen.

A program is not (and should not be) aware which device or file its input or output points to. This indifference makes UNIX programs so versatile.

Again, would you please tell us what your original problem is, which you are trying to solve with this distinction between different sources of input. Maybe (i dare say probably) your design is flawed from the beginning and we can find a better one together?

I hope this helps.

bakunin
# 5  
Old 03-29-2010
Thanks bakunin for the detailed explanation. Below ismy requirement.

I currently have my script written only to accept user inputs (which obviously has many echoes and is constantly relying on the terminal input by user). Now i am trying to add the Input from file functionality also to it (where I would want the script to run with no echoes and terminal inputs, more like a script silently running on the background taking the inputs from the file). Which is why I need to find the rediection flag so that I can handle both of the scenarios differently.

The one way I could think of now, is using the filename as an argument and checking for argument count. Based ona rg count, I handle each case seperately.

Let me know if there is a better approach.

Sincerely appreciate your comments.

thanks again,
Bharath
# 6  
Old 03-29-2010
You could accept a specific option like "-f /path/to/inputfile" and act according to this option being set or not. Below is a sketch of the logic for better understanding. Use "getopts" instead of my construction for a production-grade script:

Code:
#! /bin/ksh

typeset inFile=""

while [ -n "$1" ] ; do
     case $1 in
          -f)
               shift
               inFile="$1"
               shift
               ;;

          -x)
               # some other option
               shift
               ;;

          *)
               print - "Error: unknown option"
               exit 1
               ;;

     esac
done

# if $inFile is empty the user has not specified any input file
if [ -n "$inFile" ] ; then
     # interactive operation goes here
else
     # batch operation goes here
fi

exit 0

Now "script -f /some/file" would lead to batch operation whereas "script" would lead to interactive operation.

I hope this helps.

bakunin
# 7  
Old 03-30-2010
I guess you are looking for something like this??

test.sh
Code:
exec 6<&0
while read line
do
echo $line
done<&6

exec 6<&-

And now, you can call like below..

Code:
sh test.sh < file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Input redirection within bash script

Hi, when I try to redirect input and the command is described as a string within an array redirection does not work. why? #!/bin/bash dir=("tail < ./hello.txt") tail < ./hello.txt #works ${dir} #does not work (2 Replies)
Discussion started by: heinzel
2 Replies

2. Shell Programming and Scripting

Input redirection script

Hi, #!/bin/bash while ; do rm -f /tmp/pipe mkfifo /tmp/pipe ./yuv4mpeg_to_v4l2 < /tmp/pipe & mplayer tom_and_jerry.mp4 -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe sleep 65; done When I run this - after mplayer finishes playing video it says - Exiting... (End of... (2 Replies)
Discussion started by: ashokvpp
2 Replies

3. UNIX for Dummies Questions & Answers

When do I use input redirection?

Can someone please explain when input redirection is necessary? For example, "cat filename" and "cat< filename" produce the same result. I was told that if I need to bunzip a file that I should type "bunzip2<filename.bz2." However, if I omit the "<" I still get the same result. Can someone... (4 Replies)
Discussion started by: PTcharger
4 Replies

4. Shell Programming and Scripting

How to check the user input to be valid using shell script?

How to check the user input to be valid using shell script? The valid input is in the format like as follows. 1. It can only have r,w,x or a hyphen and nothing else. 2. ensure the r, w, x are in the correct order. for example: rwxr-xr-x is a valid format. Thanks (5 Replies)
Discussion started by: hyeewang
5 Replies

5. Shell Programming and Scripting

Read input and output redirection filename within a script

Hello everyone, My requirement is that within a script I need to construct the command line exactly that it was invoked with. For example : sh a.sh arg1 arg2 arg3 < input.txt > output.txt Now within a.sh, I construct a file which has these contents " sh a.sh arg1 arg2 arg3 < input.txt >... (8 Replies)
Discussion started by: hedonist12
8 Replies

6. Shell Programming and Scripting

Input redirection and for loop

Hello, I need help with a bash script that I try to improve. I could not find answer so far, maybe because I'm not to familiar with the terminology so feel free to correct my language. I have a script that looks like: NODES="node_a node_b node_c" for NODE in $NODES do ... (4 Replies)
Discussion started by: pn8830
4 Replies

7. Shell Programming and Scripting

permanent redirection of standard input

while running a user inter-active program how can we get the commands from a file instead of the user? is there anyway to permanently redirect content of a file to standard input? (6 Replies)
Discussion started by: gfhgfnhhn
6 Replies

8. Shell Programming and Scripting

Asking about shell script input output redirection

Hi, Can anyone please tell me what these lines do? ls >& outfile ls outfile 2>&1 Thanks. (1 Reply)
Discussion started by: trivektor
1 Replies

9. Shell Programming and Scripting

input redirection question

Hi, in my script I need to execute the following command: query $id 456 432 but it waits for a RETURN character from keyboard and therefore, it fails. I tried something like: query $id 456 432 << '\n' but, i'ts clear it is not correct. Is there any way to do this? Thxs. (0 Replies)
Discussion started by: luistid
0 Replies

10. UNIX for Dummies Questions & Answers

Input Redirection

Hi everybody, first of all i am a new member in UNIX.com and this is my first post. I am impressed with the amount of information a person can ever have in this forum, it is really great having something similiar; anyways let me tell you about the problem I am having, hope you will answer me.... (6 Replies)
Discussion started by: majeed73
6 Replies
Login or Register to Ask a Question