bug-bash
[Top][All Lists]
Advanced

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

Re: I have a bash style question. Feedback request.


From: Joseph Fredette
Subject: Re: I have a bash style question. Feedback request.
Date: Fri, 20 Apr 2012 11:34:00 -0400

You may be interested in my
version<https://github.com/jfredett/scripts/blob/master/utilities/dirstack.sh>[1]
of a directory stack module. It alters the API a bit from pushd and popd (I
think for the better). And makes use of the subshell techique mentioned by
dethrophes.



[1]https://github.com/jfredett/scripts/blob/master/utilities/dirstack.sh

On Fri, Apr 20, 2012 at 11:13 AM, dethrophes <address@hidden> wrote:

> Am 20.04.2012 16:38, schrieb Steven W. Orr:
>
>  I manage a hefty collection of bash scripts. Sometimes, I make heavy use
>> of pushd and popd. When problems come up, the directory stack can make
>> debugging more complicated than I'd like. One thing I did to get better
>> control over things was to write a dstack module that provides pushd and
>> popd functions.
>>
>> The dstack module gives me simple flags that I can set through an
>> environment variable that allow me to dump the stack either before or after
>> a pushd or a popd, and to control their stdout and stderr. The default is
>> that they both redirect to /dev/null and that all calls are checked when
>> they return. e.g.
>> push somewhere || die 'Failed to pushd to somewhere'
>>
>> (I hope people are still reading...)
>>
>> Recently I discovered context managers in python and I had already
>> implemented a directory stack module there. I added a context manager so
>> that instead of saying
>>
>> ds.pushd(foo)
>> do_a_bunch_of_stuff
>> ds.popd()
>>
>> I can now say
>>
>> with ds(foo):
>>    do_a_bunch_of_stuff
>> # The popd is now automatic.
>>
>> Back to bash, I see that things like code readability are impacted by the
>> frequent use of pushd / popd. There could be lots (more than a screen full)
>> between the pair, and forgetting to put the popd in or losing track of
>> where you are can make things more complicateder. So, I thought: How can I
>> get the benefit of a context manager in bash? It came to mind that simple
>> curly braces might help.
>>
>> So now I'm thinking of two possible scenarios.
>>
>> Here's S1:
>>
>> pushd somewhere
>> {
>>    do_a_bunch_of_stuff
>> }
>> popd
>>
>> And S2 would be:
>>
>> {
>>    pushd somewhere
>>    do_a_bunch_of_stuff
>>    popd
>> }
>>
>> I'd like to get feedback. Some choices for reasonable feedback might be:
>> a. It doesn't matter and I'm clearly overthinking this. Just pick one.
>> b. I like S[12] and anyone who disagrees will be met with a jihad.
>> c. Here's a better solution that I didn't think of.
>>
>> If you got this far, have feedback and are in the Boston area, there's a
>> beer with your name on it.
>>
>> TIA :-)
>>
>>  Tried something like this?
>
>
> function RunCmdDir {
>    pushd "${1}" || return $?
>    "${@:2}"
>    popd
> }
> RunCmdDir "Work/Dir" do_a_bunch_of_stuff
>
> ok so you'd have to put the in between code in a function(if you want more
> than 1 instruction) but that would probably help code readability anyway.
>
>
> you could use a sub shell, if do_a_bunch_of_stuff doesn't need to modify
> the global context.
> (
>    cd "Path"
>    do_a_bunch_of_stuff
> )
>
>
>
>
>
>


reply via email to

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