Strona 1 z 1
[+] bash - Tworzenie katalogów dla wybranego użytkownika
: 25 września 2016, 13:35
autor: Nerus87
Witam,
Aktualnie chcę napisać skrypt generujący nowego użytkownika z SSH, itd. niestety trafiłem na problem którego nie umiem przeskoczyć, wcześniej coś pisałem w bash'u ale było to bardzo dawno.
Problem polega na tym że nie umiem
tworzyć folderów w katalogu domowym danego użytkownika poprzez skrypt.
Przykładowy kod:
Kod: Zaznacz cały
#!/bin/bash
echo "Name of the user"
read USER
mkdir "~$USER/temp" && echo "Folder temp created in home of the $USER"
Wynik:
./test
Name of the user
test
mkdir: nie można utworzyć katalogu „~test/temp”: Nie ma takiego pliku ani katalogu
Pozdrawiam,
Nerus.
Re: [BASH] Tworzenie katalogów dla wybranego użytkownika
: 25 września 2016, 13:45
autor: dedito
Zamiast znaczka ~ użyj /home/$USER
Re: [BASH] Tworzenie katalogów dla wybranego użytkownika
: 25 września 2016, 15:12
autor: Nerus87
dedito pisze:Zamiast znaczka ~ użyj /home/$USER
Tak znam to podejście dzięki,
pytanie dlaczego nie rozróżnia znaków tego typu.
Pozdrawiam,
Nerus.
Re: [SOLVED] bash - Tworzenie katalogów dla wybranego użytkownika
: 25 września 2016, 15:16
autor: dedito
Nie tak się oznacza wątki ->
viewtopic.php?f=15&t=34136
Znaczek ~ oznacza katalog domowy bieżącego użytkownika.
Posprawdzaj logując się na różnych użytkowników.
bash - Tworzenie katalogów dla wybranego użytkownika. Uzupełnienie.
: 25 września 2016, 17:36
autor: lizard
Zmienna USER zawiera bieżącego użytkownika i jej zmiana nie jest najlepszym pomysłem. Chcąc uniknąć konfliktów nazw ze zmiennymi środowiskowymi nie należy we własnych używać nazw składających się tylko z dużych liter i ew. podkreślenia lub cyfr. O zmiennych, których lepiej nie zmieniać traktuje ten
dokument.
Poza tym, kto powiedział, że katalogi użytkowników muszą być w /home? Drobna zmiana w /etc/default/useradd lub /etc/adduser.conf (w przypadku Debiana i jemu pokrewnych) i mamy katastrofę.
Katalog użytkownika najlepiej oddaje wyrażenie "~username"., chyba że ktoś woli: awk '{FS=":"} /^username:/ {print $6}' /etc/passwd.
Jak można przeczytać w The Open Group Base Specifications Issue 7, Shell & Utilities, w podrozdziale:
2.6.1 Tilde Expansion tylda wraz z następującymi po niej znakami powinna być traktowana jako nazwa logowania z bazy użytkowników.
Jeszcze jedno rozwiązanie problemu opisanego we wspomnianym na początku wątku:
Kod: Zaznacz cały
#!/bin/bash
User=''
while [ -z "${User}" ] || ! id "${User}" > /dev/null 2>&1; do # warto sprawdzić, czy podany użytkownik w ogóle istnieje w systemie
echo "Name of the user"
read User
done
mkdir "$(eval ~"${User}")/temp" && echo "Folder temp created in home of the $User"
Post przeniosłem. Temat odblokowałem, słuszna uwaga o zmiennej $USER.
Re: [+] bash - Tworzenie katalogów dla wybranego użytkownika
: 25 września 2016, 17:56
autor: dedito
Od siebie dodam, że printenv wylistuje nam obecne zmienne środowiskowe.