[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New utility suggestion: chdir(1)
From: |
Pádraig Brady |
Subject: |
Re: New utility suggestion: chdir(1) |
Date: |
Sat, 26 Aug 2017 16:00:11 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 |
On 26/08/17 11:10, Colin Watson wrote:
> I would like there to be an adverbial version of "cd", which takes a
> path followed by a command and optional arguments and executes the
> command with its working directory set to the given path. Its
> invocation would be similar to chroot(8), that is:
>
> chdir [OPTION] NEWDIR [COMMAND [ARG]...]
>
> This would allow these two commands to be synonyms aside from a
> different arrangement of processes:
>
> (cd /foo && ls -l)
> chdir /foo ls -l
>
>
> Why do I want this when there's a perfectly good shell builtin? Well, I
> often find that I want to write programs that take an argument list and
> run them in various different contexts, for example in a chroot (using
> "chroot") or in a container (using "lxc exec"). Unless the
> context-entering command has an option to set the current directory -
> neither of the two aforementioned examples does - I have to do this by
> writing something along the lines of:
>
> sudo chroot /path/to/chroot sh -c 'cd /foo && ls -l'
>
> This means dealing with shell quoting, which is tedious and error-prone.
> It would be much easier if I had something that composed nicely with
> other programs that use this kind of pattern for running a child process
> in some different context:
>
> sudo chroot /path/to/chroot chdir /foo ls -l
>
>
> If people think this is a reasonable idea then I'd be happy to write the
> code, although I'd have to faff around with getting my employer to sign
> a copyright assignment. I'm aware that (as far as I know) this is an
> innovation rather than something that other operating systems already
> implement; I think my suggested name is the most natural choice by
> analogy with the system call and chroot(8).
If we were to provide this I think chdir is a fine name.
It's a pity we have to have this heavy weight chaining of execs like this
to set each process attribute. This is more general though, than adding
--chdir to other "context" type programs like chroot etc.
Note GNU chroot has a --skip-chdir which nearly does what you want.
I.E. you could os.chdir("/chroot/build") before calling "chroot --skip-dir ...",
however that's currently restricted for greater protection to when
you're not actually changing the root directory. I suppose we could relax
the check to verify that getcwd() was _below_ the specified chroot path.
Of course none of this helps with jexec, lxc etc.
Another option to consider is to add --chdir to env(1) since they
would often be used together and could be done more efficiently with a single
exec?
cheers,
Pádraig.
- New utility suggestion: chdir(1), Colin Watson, 2017/08/26
- Re: New utility suggestion: chdir(1), Colin Watson, 2017/08/26
- Re: New utility suggestion: chdir(1),
Pádraig Brady <=
- Re: New utility suggestion: chdir(1), Colin Watson, 2017/08/27
- Re: New utility suggestion: chdir(1), Pádraig Brady, 2017/08/27
- Re: New utility suggestion: chdir(1), Bernhard Voelker, 2017/08/28
- Re: New utility suggestion: chdir(1), Pádraig Brady, 2017/08/28
- Re: New utility suggestion: chdir(1), Pádraig Brady, 2017/08/28
- Re: New utility suggestion: chdir(1), Jim Meyering, 2017/08/29
- Re: New utility suggestion: chdir(1), Pádraig Brady, 2017/08/29
- Re: New utility suggestion: chdir(1), Colin Watson, 2017/08/29
Re: New utility suggestion: chdir(1), Kaz Kylheku (Coreutils), 2017/08/26