The difference isnt that bad, given the read its timeout is limited only to 2nd position of post decimal indicator.
Code:
#
# Testing simple
#
declare -a ARRAY
if [ "$1" = "" ]
then while read -t 0.01 ARG
do ARRAY[${#ARRAY[@]}]="$ARG"
done
else ARRAY=( "${@}" )
fi
#
# Parsing input
#
for item in "${ARRAY[@]}"
do echo "something with $item"
done
Code:
0 ~/tmp $ time ./get-pipe.sh *
something with browser
something with get-pipe.sh
something with get-pipe-test.sh
something with test with spaces
real 0m0.002s
user 0m0.001s
sys 0m0.001s
0 ~/tmp $ time ls | ./get-pipe.sh
something with browser
something with get-pipe.sh
something with get-pipe-test.sh
something with test with spaces
real 0m0.002s
user 0m0.003s
sys 0m0.001s
Thank you and hope this helps
---------- Post updated at 06:29 ---------- Previous update was at 06:04 ----------
Now i tried to remove the array, and shorten it a bit, now it behaves weird.
Code:
[ -z "$1" ] && \
while read ARG
do set "$ARG"
done
for item in "${@}"
do echo "something with $item"
done
Code:
0 ~/tmp $ ./get-pipe.sh *
something with browser
something with get-pipe.sh
something with get-pipe-test.sh
something with test with spaces
0 ~/tmp $ ls | ./get-pipe.sh
something with test with spaces
0 ~/tmp $
Even with while IFS="$IFS\l" read ARG there was no difference.
Any ideas please?
(edit: Or should i better stay with the array?)
Last edited by sea; 06-03-2015 at 01:34 AM..
Reason: Code fix
I am writing script in c shell and using this script to read the command line arguments, but it is not working. Pl. someone let me know what is the problem.
#!/bin/csh -f
if ($#argv <> 2) then
echo "you must give exactly two parameters"
else
set name1 = $argv
... (1 Reply)
I have to write a C program using sys call (read, no fread) to read from shell all the parameters, without know how many are them.
I tryed in some ways, but I have no success.
Any Idea?
Can I use read to read from stdin? (1 Reply)
Hi,
What is the maximum number of arguments that could be passed to zsh ?
To find out that I tried a simple script.
And the maximum number of arguments that could be passed turned out to be 23394
#! /bin/zsh
arg=1
i=1
subIndex=23000
while
do
arg=$arg" "$i
i=$(($i + 1))... (9 Replies)
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
1. The problem statement, all variables and given/known data:
Your script must check for the correct number of arguments (one argument). If somebody tries to invoke the... (1 Reply)
I have trouble getting this logic to work
#!/bin/bash
function assign_var(){
while
do
read -p "$2 :" $3
done
}
assign_var '$IPADDRESS' ipaddress IPADDRESS
Basicly, i want to make sure that entry is made (i can add more sophisticated checks later), but the idea is to recycle... (11 Replies)
Hello,
I am trying to make a bash script that can pull data from a file and then change one part of said data.
I want to search by username and pull the full line. That way there is a way to replace just one part of that line then return it back to the file.
My Data is stored like:
... (1 Reply)
I am developing a script where 3 other scripts are included.
This is a graph related script.
COMPLETE IDEA:
-There are 3 different graph scripts. I would like to create a master graph with all 3 in one.
-User chooses the type of graph
-User is asked to enter the required auguments (... (7 Replies)
Hi,
I am having a bit of trouble writing this.
I have the script working if I only use 1 of these but it's not working the way i need it to.
Basically more above the script i may or may not have a 5th variable defined. if i do it does a process before getting to the rest of the script.... (2 Replies)
I need to declare a function, this function will contain a script, this script cannot be in a file but must be piped. and then, for the script to run, i need to pass arguments to it.
everything has to be on one line. so i'm basically looking for a one-liner
here's what i'm doing:
myfunc ()... (3 Replies)
suppose i have a perl script that is normally run this way:
./checkdisk.pl -H hostname -w 40 -c 80
but, for whatever reason, i cannot run the script directly as it should. But i can cat it through pipe. How can i pass the arguments "-H hostname -w 40 -c 80"?
so this is what i'm doing,... (6 Replies)
Discussion started by: SkySmart
6 Replies
LEARN ABOUT BSD
pipe
PIPE(2) System Calls Manual PIPE(2)NAME
pipe - create an interprocess communication channel
SYNOPSIS
pipe(fildes)
int fildes[2];
DESCRIPTION
The pipe system call creates an I/O mechanism called a pipe. The file descriptors returned can be used in read and write operations. When
the pipe is written using the descriptor fildes[1] up to 4096 bytes of data are buffered before the writing process is suspended. A read
using the descriptor fildes[0] will pick up the data.
It is assumed that after the pipe has been set up, two (or more) cooperating processes (created by subsequent fork calls) will pass data
through the pipe with read and write calls.
The shell has a syntax to set up a linear array of processes connected by pipes.
Read calls on an empty pipe (no buffered data) with only one end (all write file descriptors closed) returns an end-of-file.
Pipes are really a special case of the socketpair(2) call and, in fact, are implemented as such in the system.
A signal is generated if a write on a pipe with only one end is attempted.
RETURN VALUE
The function value zero is returned if the pipe was created; -1 if an error occurred.
ERRORS
The pipe call will fail if:
[EMFILE] Too many descriptors are active.
[ENFILE] The system file table is full.
[EFAULT] The fildes buffer is in an invalid area of the process's address space.
SEE ALSO sh(1), read(2), write(2), fork(2), socketpair(2)BUGS
Should more than 4096 bytes be necessary in any pipe among a loop of processes, deadlock will occur.
4th Berkeley Distribution August 26, 1985 PIPE(2)