2011-09-28 2 views
1

Я хочу создать папку с именем пользователя в/tmp/vnc /, я могу создать эту папку в командной строке с perl -e 'mkdir("$ENV{USER}")', но для следующего кода работать не может.Создать каталог от mkdir

chdir ("/tmp/vnc") or die -1; 
mkdir ("$ENV{USER}", 0777) or die -1; 

Если я использую mkdir -p /tmp/vnc/$ENV{USER} в командной строке, чтобы сделать папку, ничего не происходит, и никаких сообщений об ошибках.

+8

'... или die" Ошибка в mkdir: $! \ N "' может рассказать вам больше. '$!' дает код ошибки из ранее неудавшейся операции. –

+0

Большое спасибо. Он сказал: «Ошибка в mkdir: Файл существует», но каталог с именем пользователя не существует. – thinkman

+2

@thinkman Возможно, есть файл (или fifo, или сокет) с тем же именем. У вас не может быть каталога и файла с тем же именем. – rodrigo

ответ

1
  1. Пожалуйста, проверьте специальную переменную $! для текстового сообщения об ошибке
  2. Проверьте, что переменная $ ENV {USER} не содержит дополнительных кавычек. У меня была аналогичная проблема в ОС Windows для Activer Perl. Моя проблема заключалась в дополнительных котировках
+0

Спасибо, что ответили на вопрос, который я задал 3 года назад. :-) – thinkman

6

Это работает для меня. Возможно, каталог /tmp/vnc не существует, и chdir не работает. Или, может быть, переменная окружения $USER не определена, потому что вы используете ее из сценария init.d, например ... Или, может быть, у вас нет прав на запись в каталоге /tmp/vnc. Вы пытались выполнить mkdir /tmp/vnc/$USER из оболочки?

Невозможно узнать больше без подробностей.

+0

Я уверен/tmp/vnc уже существует. Я могу сделать это в командной строке perl -e 'mkdir ("$ ENV {USER}")' – thinkman

+0

mkdir/tmp/vnc/$ USER не может работать, поскольку vnc - это каталог, $ USER - это подкаталог, mkdir не support создать каталог под родительским каталогом. – thinkman

+1

@thinkman Конечно. Пока родительский каталог уже существует. – rodrigo

0

Возможно, что-то сбрасывает вашу среду при запуске скрипта? Можете ли вы распечатать содержимое $ENV{USER} и убедиться, что оно содержит то, что вы считаете нужным?

0

если $ ENV {USR} абсолютный путь (с слэш), то ChDir бесполезно, так как вы не используете относительный путь

+0

$ ENV {USER} - это только имя пользователя, я просто хочу создать папку с именем пользователя под/tmp/vnc/ – thinkman

Смежные вопросы