bash nie przetwarza deterministycznie znaku wieloznacznego gwiazdki


3

Przypadkowo dodałem użytkownika do mojego systemu bez katalogu domowego (zapomniałem umieścić flagi -d i -m w useradd). Zamiast usuwać użytkownika i zaczynać od nowa, próbowałem po prostu mkdir katalogu domowego i samodzielnie skopiować pliki z / etc / skel. Jednak otrzymałem następujący dziwny błąd:

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

Jednak następujące dwa polecenia działają zgodnie z oczekiwaniami:

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

Czy ktoś może rzucić nieco światła na to, dlaczego otrzymałem ten błąd początkowy.

Odpowiedzi:


3

Katalog / etc / skel zwykle zawiera tylko ukryte pliki, to znaczy te, których nazwa zaczyna się od kropki. Rozszerzenie powłoki *nie obejmuje ukrytych plików, chyba że ustawiono taką opcję. W przypadku bash ta opcja jest ustawiona za pomocą shopt -s dotglob.

W twoim przypadku /etc/skel/*nic się nie rozwija, więc powłoka pozostawia argument jako /etc/skel/*, ale nie ma pliku o tej nazwie.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.