help-bash
[Top][All Lists]
Advanced

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

Re: i dont see my code error there ...


From: Alex fxmbsw7 Ratchev
Subject: Re: i dont see my code error there ...
Date: Thu, 31 Mar 2022 21:52:08 +0200

mate very cool

On Thu, Mar 31, 2022 at 9:42 PM Greg Wooledge <greg@wooledge.org> wrote:

> On Thu, Mar 31, 2022 at 08:25:15PM +0200, Alex fxmbsw7 Ratchev wrote:
> > <xmb> # t() { TIMEFORMAT=%Rs time { &>/dev/null eval "$@" ; } ; }
>
> Bash's 'time' command isn't a regular command.  It's a keyword.  It has
> special rules, and is magical.
>
> When you do "FOO=bar time", you force bash to use a regular command
> instead of the magical keyword.  Because "FOO=bar cmd" is only permitted
> for regular commands.  It's part of the "simple command" syntax.


 i did think that when writing actually seeing a bug when typing, the those
two parts, var as' and time special cmd

>
>
unicorn:~$ t() { TIMEFORMAT=%Rs time eval "$*"; }
> unicorn:~$ t sleep 1
> time: cannot run eval: No such file or directory
> Command exited with non-zero status 127
> 0.00user 0.00system 0:00.00elapsed 81%CPU (0avgtext+0avgdata
> 1096maxresident)k
> 0inputs+0outputs (0major+40minor)pagefaults 0swaps
>
> "time: cannot run eval:" comes from the /usr/bin/time command in the
> file system, not from the bash keyword.
>
> Also, using "$@" here doesn't make any sense.  You want to pass the
> command string along to eval untouched, so use "$*" instead.
>
> This will work:
>
> unicorn:~$ t() { local TIMEFORMAT=%Rs; time eval "$*"; }
> unicorn:~$ t sleep 1
> 1.002s
> unicorn:~$ t 'if false; then echo nonsense; else echo ok; fi'
> ok
> 0.000s
>
> Or, with the redirections:
>
> unicorn:~$ t() { local TIMEFORMAT=%Rs; time eval "$*" >/dev/null 2>&1; }
> unicorn:~$ t 'if false; then echo nonsense; else echo ok; fi'
> 0.000s
>
> In fact, if the whole purpose of this exercise is to add the redirections
> when you're using time, maybe what you really want is a magic alias.
>
> unicorn:~$ t_helper() { local TIMEFORMAT=%Rs cmd; read -r _ _ cmd <
> <(history 1); time eval "$cmd" >/dev/null 2>&1; }
> unicorn:~$ alias t='t_helper # '
> unicorn:~$ t if sleep 1; then echo zzzz; fi
> 1.002s
>
> You're a big alias fan, so that should be right up your alley.  It lets
> you skip adding the quotes around the "argument" of t, because it's not
> really an argument at that point.
>
> i .. completly dont understand .. the what
what does history 1 there in a read

okay now i halfway understood
and # is the alias'es name heh ?


reply via email to

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