bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-bash] help


From: John McKown
Subject: Re: [Help-bash] help
Date: Sun, 6 Mar 2016 20:05:24 -0600

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 <address@hidden> 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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]