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.