должны определить все пользовательские корневые каталоги - проблема сценариев тильды

Предположите, что someuser имеет корневой каталог/home/someuser

NAME=someuser

В ударе - какое выражение я использую объединяющуюся тильду (~) и $NAME для возврата пользовательского корневого каталога?

HOMEDIRECTORY=~someuser
echo $HOMEDIRECTORY
/home/someuser
NAME=someuser
echo ~$NAME
~someuser

какие-либо предложения?

5
задан Paused until further notice. 15 January 2010 в 05:47
поделиться

5 ответов

Обработчик событий - это обратный вызов из системы.

-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 что-то» вместо удаления чего-либо.

16
ответ дан 18 December 2019 в 06:22
поделиться

Если у вас есть доступ к Getent :

getent passwd "$NAME" | cut -d: -f 6
6
ответ дан 18 December 2019 в 06:22
поделиться

Tilde (~) Это то же самое, что и $ домой, поэтому не все пользователь будет иметь в качестве root до дома каталог.

Но если вы настаиваете в использовании Tilde, это сделать работу:

echo ~/../$NAME

см.:

$ pwd
/home/oreyes
$ export NAME=john 
$ export DIRECTORYNAME=~/../$NAME
$ cd $DIRECTORYNAME
$ pwd
/home/john
1
ответ дан 18 December 2019 в 06:22
поделиться

Интересная разница между Bash и CSH, где ~ $ CARNAME на самом деле делает то, что вы буду ожидать!

Это уродливо, но, похоже, работает в Bash:

homedir=`eval "echo ~$USERNAME"`

сейчас $ homedir удерживает домашний каталог, связанный с $ username.

1
ответ дан 18 December 2019 в 06:22
поделиться

Один альтернативный путь

awk -F":" '{print "user: "$1", Home directory is: "$6}' /etc/passwd
0
ответ дан 18 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: