Допустим, я хочу написать оболочку для команды chroot
с возможностью установить рабочий каталог, в противном случае сохраняя chroot
семантика. Таким образом, семантика должна быть:
chroot.sh <chroot-dir> <working-dir> <command> [arg]...
Моя наивная попытка:
#!/bin/sh
chroot_dir=$1
working_dir=$2
shift 2
chroot "$chroot_dir" sh -c "cd $working_dir; $*"
Но это не удается правильно обработать:
chroot.sh /path/to/chroot /tmp touch 'filename with space'
Я не могу понять, как это должно быть правильно реализовано. Возможно ли использование только bash?
В моей системе CentOS 6 команда chroot
не поддерживает установку рабочего каталога. Возможно, это не так в других системах.
Наконец, я пришел к следующему решению:
#!/bin/sh
chroot_dir=$1
working_dir=$2
shift 2
printf -v CMDS " %q" "$@"
chroot "$chroot_dir" sh -c "cd \"$working_dir\";$CMDS"