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.

Kod: Zaznacz cały

echo `~`

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.