Предположите, что someuser имеет корневой каталог/home/someuser
NAME=someuser
В ударе - какое выражение я использую объединяющуюся тильду (~) и $NAME для возврата пользовательского корневого каталога?
HOMEDIRECTORY=~someuser
echo $HOMEDIRECTORY
/home/someuser
NAME=someuser
echo ~$NAME
~someuser
какие-либо предложения?
Обработчик событий - это обратный вызов из системы.
-121--977893- Пытались ли вы получить доступ через $ _ SERVER
superglobal?
print $_SERVER["HTTP_REFERER"];
-121--3526123- Safer :
eval HOMEDIRECTORY="$(printf "~%q" "$NAME")"
Здесь параметр % q
позволяет печатать кавычки
и избегать опасных символов.
Если $ NAME
является джо, вы получите что-то вроде /home/joe
. Для root можно получить /root
. Для «abc; rm что-то» вы бы получили «~ abc; rm что-то» вместо удаления чего-либо.
Если у вас есть доступ к Getent
:
getent passwd "$NAME" | cut -d: -f 6
Tilde (~) Это то же самое, что и $ домой, поэтому не все пользователь будет иметь в качестве root до дома каталог.
Но если вы настаиваете в использовании Tilde, это сделать работу:
echo ~/../$NAME
см.:
$ pwd
/home/oreyes
$ export NAME=john
$ export DIRECTORYNAME=~/../$NAME
$ cd $DIRECTORYNAME
$ pwd
/home/john
Интересная разница между Bash и CSH, где ~ $ CARNAME на самом деле делает то, что вы буду ожидать!
Это уродливо, но, похоже, работает в Bash:
homedir=`eval "echo ~$USERNAME"`
сейчас $ homedir удерживает домашний каталог, связанный с $ username.
Один альтернативный путь
awk -F":" '{print "user: "$1", Home directory is: "$6}' /etc/passwd