bash não está processando deterministicamente o curinga asterisco

3

Eu acidentalmente adicionei um usuário ao meu sistema sem um diretório inicial (esqueci de colocar os sinalizadores -d e -m no useradd). Ao invés de deletar o usuário e começar de novo, eu tentei simplesmente mkdir o diretório home e copiar os arquivos eu mesmo do / etc / skel. No entanto, recebi o seguinte erro estranho:

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

No entanto, os dois comandos a seguir funcionam conforme o esperado:

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

Alguém pode esclarecer por que recebi esse erro inicial?

    
por curios 04.02.2014 / 19:40

2 respostas

3

O diretório / etc / skel geralmente contém apenas arquivos ocultos, ou seja, aqueles cujo nome começa com um ponto final. A expansão do shell de * não inclui arquivos ocultos, a menos que uma opção esteja configurada para isso. Para o bash, essa opção é configurada com shopt -s dotglob .

No seu caso /etc/skel/* não está expandindo para nada, então o shell deixa o argumento como /etc/skel/* , mas não há arquivo com esse nome.

    
por 04.02.2014 / 20:03
5

Quando uma expressão glob ( /etc/skel/* ) é expandida para arquivos no , por padrão, a expressão é deixada no comando como uma string simples. Neste caso, ele se expande para nenhum arquivo porque todos os arquivos em / etc / skel são arquivos de pontos. Então você estava tentando copiar o arquivo literal "*" em / etc / skel, e esse arquivo não existe.

Veja link

    
por 04.02.2014 / 20:02