NAJLEPSZY SPOSÓB
Wymagane: nic (nbJest to ta sama technika jak getent bez konieczności getent)
home() { # returns empty string on invalid user
grep "^$1:" /etc/passwd | cut -d ':' -f 6
}
# grep "^$user:" /etc/passwd | cut -d ':' -f 6
/var/lib/memcached
NICE METODA głównej systemu Linux
Wymagane Linux, korzeń (lub sudo)
home() { # returns errorlevel 1 on invalid user
su "$1" -s '/bin/sh' -c 'echo $HOME'
}
# su memcached -s '/bin/sh' -c 'echo $HOME'
/var/lib/memcached
ROZWIĄZANIE DLA dokończenia ekspansji
magic() { # returns unexpanded tilde express on invalid user
local _safe_path; printf -v _safe_path "%q" "$1"
eval "ln -sf $_safe_path /tmp/realpath.$$"
readlink /tmp/realpath.$$
rm -f /tmp/realpath.$$
}
Przykład wykorzystania:
$ magic ~nobody/would/look/here
/var/empty/would/look/here
$ magic ~invalid/this/will/not/expand
~invalid/this/will/not/expand
metoda wykorzystanie CSH
Jest to skrypt powłoki, to po prostu wywołuje csh.
Wymagane: csh
home() { # return errorlevel 1 on invalid user
export user=$1; csh -c "echo ~$user"
}
$ export user=root; csh -c "echo ~$user"
/var/root
$ export user=nodfsv; csh -c "echo ~$user"
Unknown user: nodfsv.
METODA desperacji
Wymagane: palec (przestarzałe)
home() {
finger -m "$1" |
grep "^Directory:" |
sed -e 's/^Directory: //' -e 's/ .*//'
}
# finger -m "haldaemon" |
> grep "^Directory:" |
> sed -e 's/^Directory: //' -e 's/ .*//'
/home/haldaemon
można łączyć z grep operacja w sed, ale ponieważ ta metoda jest sucky, nie zawracałbym sobie głowy.
Nie powiedzie się, jeśli np. Użyto autoryzacji LDAP. –
Chcesz użyć 'getent passwd'. To spowoduje, że wszystkie bazy danych Switch Switch zostaną skonfigurowane w pliku /etc/nsswitch.conf (np .:/etc/passwd, nis, ldap, etc). –