Please reply to the list and not just me. There are a lot of helpful people out there. Perhaps a "reply all"?
On Sun, Mar 6, 2016 at 5:26 PM, Val Krem <valk...@yahoo.com> wrote: > Hi John, > Thank you very much! > I chose to put it as a function in my .bashrc. > what happened is that > if I dot give the the two arguments then > > ie., > > 1. if I type autil : it automatically closed the terminal > 2. if I give the two arguments > > ie., autil 10 *.txt I go this message > > Usage: find [-H] [-L] [-P] [-Olevel] [-D > help|tree|search|stat|rates|opt|exec] [path...] [expression] > > > ****************************** > > function autil() { > if [ $# -lt 2 ]; then > echo "Sorry, I need at least two parameters:" > echo "The first is the time- how far should I go?" > echo "The second is the name patternsuch as *txt or *csv" > exit 1 > You didn't notice in the function version that I changed this from "exit 1" to "return 1". BASH functions need the return command. > fi > time=$1 > shift #move all parameters over 1, dropping $1 > filetype="$2" > Oh, my, I made another mistake here. This line should be: filetime="$1" > shift #move all parameters over 1 again > > find -maxdepth 1 -type f -mtime ${time} -name "${filetype}" "$@" > } > > ************************** > > > > Is it possible to fix it?? > function autil() { if [ $# -lt 2 ]; then echo "Sorry, I need at least two parameters:" echo "The first is the time- how far should I go?" echo "The second is the name patternsuch as *txt or *csv" return 1 fi time=$1 shift #move all parameters over 1, dropping $1 filetype="$1" #error in original, it used "$2", BAD ME shift #move all parameters over 1 again find -maxdepth 1 -type f -mtime ${time} -name "${filetype}" "$@" } > 1. why it is closing the terminal? > The "exit" will, as you noticed, exit the BASH shell itself. Look closely at the following transcript: === $ps -f UID PID PPID C STIME TTY TIME CMD joarmc 15690 3701 0 19:49 pts/2 00:00:00 /bin/bash joarmc 16290 15690 0 19:50 pts/2 00:00:00 ps -f $echo $$ 15690 $cat t1.sh #!/bin/bash echo $$ ps -f $./t1.sh 16617 UID PID PPID C STIME TTY TIME CMD joarmc 15690 3701 0 19:49 pts/2 00:00:00 /bin/bash joarmc 16617 15690 0 19:52 pts/2 00:00:00 /bin/bash ./t1.sh joarmc 16618 16617 0 19:52 pts/2 00:00:00 ps -f $function t2() { > echo $$ > ps -f > } $t2 15690 UID PID PPID C STIME TTY TIME CMD joarmc 15690 3701 0 19:49 pts/2 00:00:00 /bin/bash joarmc 16711 15690 0 19:52 pts/2 00:00:00 ps -f $ === Notice the PID in the function example is the same as the /bin/bash. Also notice that when I run t1.sh, you see it in the list as "/bin/bash ./t1.sh". But notice when I run t2, the PID is the same as the top /bin/bash and there is _no_ sign of "t2" itself. That's because the current BASH program is running the function "in line". So an "exit" in the function is like typing "exit" at the prompt and "the terminal goes away" > -- > A fail-safe circuit will destroy others. -- Klipstein > > Maranatha! <>< > John McKown > -- A fail-safe circuit will destroy others. -- Klipstein Maranatha! <>< John McKown