2011-09-28 114 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

'...或死“mkdir中的错误:$!\ n”'可能会告诉你更多。 '$!'为您提供以前失败操作的错误代码。 –

+0

非常感谢。它说“mkdir:File exists中存在错误”,但用户名命名的目录不存在。 – thinkman

+2

@thinkman也许有一个文件(或一个先进先出,或套接字)具有相同的名称。你不能拥有一个同名的目录和文件。 – rodrigo

回答

1
  1. 请检查特殊变量$的CHDIR是没用的!对于文本错误消息
  2. 请检查变量$ ENV {USER}是否不包含额外的引号。 Activer Perl的Windows操作系统中存在类似的问题。我的问题是在额外的引号
+0

下创建一个名为username的文件夹谢谢你回答我3年前问的问题。 :-) – thinkman

6

它适合我。 也许/tmp/vnc目录不存在,并且chdir失败。 或者或者$USER环境变量没有被定义,因为你正在从一个init.d脚本运行它,例如... 或者你可能没有/tmp/vnc目录中的写权限。你是否尝试过从shell执行mkdir /tmp/vnc/$USER

无法知道更多细节。

+0

我确定/ tmp/vnc已经存在。我可以在命令行中通过perl -e'mkdir(“$ ENV {USER}”)' – thinkman

+0

mkdir/tmp/vnc/$ USER无法工作,因为vnc是目录,$ USER是子目录,mkdir不支持在父目录下创建一个目录。 – thinkman

+1

@thinkman当然是的。只要父目录已经存在。 – rodrigo

0

当您运行脚本时,可能是重置您的环境?你能打印$ENV{USER}的内容,并确保它包含你认为应该的内容吗?

0

如果$ ENV {} USR是绝对路径(与领先的斜杠),然后因为你不使用相对路径

+0

$ ENV {USER}只是一个用户名,我只是想在/ tmp/vnc/ – thinkman