chroot com o diretório de trabalho especificado

0

Digamos que eu queira escrever o wrapper para o comando chroot com a possibilidade de definir o diretório de trabalho, caso contrário, preservando chroot semântica. Assim, a semântica deveria ser:

chroot.sh <chroot-dir> <working-dir> <command> [arg]...

Minha tentativa ingênua é:

#!/bin/sh

chroot_dir=$1
working_dir=$2

shift 2

chroot "$chroot_dir" sh -c "cd $working_dir; $*"

Mas isso não resolve corretamente:

chroot.sh /path/to/chroot /tmp touch 'filename with space'

Não consigo descobrir como isso deve ser implementado corretamente. É possível usar apenas o bash?

No meu sistema do CentOS 6, o comando chroot não suporta a configuração do diretório de trabalho. Provavelmente isso não é verdade em outros sistemas.

    
por reddot 02.11.2017 / 17:39

2 respostas

0

Isso parece fazer o que você procura:

#!/bin/bash

chroot_dir="$1"
shift

working_dir="$1"
shift

cmd="$@"

chroot "${chroot_dir}" sh -c "cd ${working_dir} ; ${cmd}"

Note que / tmp começa com apenas o script:

# ls /tmp
chroot.sh

Eu tenho um chroot em /mnt/foo , que é uma montagem de ligação para / :

# /tmp/chroot.sh /mnt/foo /tmp touch '"filename with spaces"'

Agora observe que existe um arquivo filename with spaces :

# ls -1 /tmp
chroot.sh
'filename with spaces'
    
por 02.11.2017 / 20:52
0

Finalmente, cheguei à seguinte solução:

#!/bin/sh

chroot_dir=$1
working_dir=$2

shift 2

printf -v CMDS " %q" "$@"

chroot "$chroot_dir" sh -c "cd \"$working_dir\";$CMDS"
    
por 03.11.2017 / 10:42