[+] bash - Tworzenie katalogów dla wybranego użytkownika

Potrzebujesz pomocy z C, C++, perl, python, itp.
Nerus87
Posty: 6
Rejestracja: 25 września 2016, 13:25

[+] bash - Tworzenie katalogów dla wybranego użytkownika

Post autor: Nerus87 » 25 września 2016, 13:35

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.
Ostatnio zmieniony 25 września 2016, 15:14 przez Nerus87, łącznie zmieniany 3 razy.

Awatar użytkownika
dedito
Moderator
Posty: 2959
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: [BASH] Tworzenie katalogów dla wybranego użytkownika

Post autor: dedito » 25 września 2016, 13:45

Zamiast znaczka ~ użyj /home/$USER

Nerus87
Posty: 6
Rejestracja: 25 września 2016, 13:25

Re: [BASH] Tworzenie katalogów dla wybranego użytkownika

Post autor: Nerus87 » 25 września 2016, 15:12

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.

Awatar użytkownika
dedito
Moderator
Posty: 2959
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: [SOLVED] bash - Tworzenie katalogów dla wybranego użytkownika

Post autor: dedito » 25 września 2016, 15:16

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.

Kod: Zaznacz cały

echo `~`

Awatar użytkownika
lizard
Beginner
Posty: 257
Rejestracja: 08 lutego 2016, 18:47

bash - Tworzenie katalogów dla wybranego użytkownika. Uzupełnienie.

Post autor: lizard » 25 września 2016, 17:36

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.

Awatar użytkownika
dedito
Moderator
Posty: 2959
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: [+] bash - Tworzenie katalogów dla wybranego użytkownika

Post autor: dedito » 25 września 2016, 17:56

Od siebie dodam, że printenv wylistuje nam obecne zmienne środowiskowe.

ODPOWIEDZ