3

Я случайно добавил пользователя в свою систему без домашнего каталога (я забыл поставить флаги -d и -m в useradd). Вместо того, чтобы удалить пользователя и начать заново, я попытался просто mkdir домашний каталог и сам скопировать файлы из /etc /skel. Однако я получил следующую странную ошибку:

user@host:~$ sudo cp -rv /etc/skel/* /home/newuser/
cp: cannot stat `/etc/skel/*': No such file or directory

Однако следующие две команды работают как положено:

user@host:~$ sudo cp -rv /etc/skel/.bashrc /home/newuser/
user@host:~$ cp -rv ~/testfolder1/* /testfolder2/

Может кто-нибудь пролить свет на то, почему я получил эту первоначальную ошибку.

2 ответа2

5

Если выражение glob (/etc/skel/*) раскрывается без файлов, то по умолчанию выражение остается в команде в виде простой строки. В этом случае он расширяется без файлов, потому что все файлы в /etc /skel являются точечными файлами. Итак, вы пытались скопировать буквальный файл "*" в /etc /skel, и этот файл не существует.

См. Http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion.

3

Каталог /etc /skel обычно содержит только скрытые файлы, то есть те, чье имя начинается с точки. Расширение оболочки * не включает скрытые файлы, если для этого не установлена опция. Для bash эта опция установлена с shopt -s dotglob .

В вашем случае /etc/skel/* не расширяется ни к чему, поэтому оболочка оставляет аргумент как /etc/skel/* , но файла с таким именем не существует.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .