【问题标题】:Create directory by mkdir通过 mkdir 创建目录
【发布时间】:2011-11-27 06:47:53
【问题描述】:

我想在/tmp/vnc/中创建一个以用户名命名的文件夹,我可以在命令行中使用perl -e 'mkdir("$ENV{USER}")'创建该文件夹,但是下面的代码不能工作。

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

如果我在命令行中使用mkdir -p /tmp/vnc/$ENV{USER} 创建文件夹,什么都不会发生,也不会报告错误。

【问题讨论】:

  • ... or die "Error in mkdir: $!\n" 可能会告诉你更多。 $! 为您提供先前失败操作的错误代码。
  • 非常感谢。它说“mkdir中的错误:文件存在”,但用户名命名的目录不存在。
  • @thinkman 也许有一个同名的文件(或fifo,或套接字)。不能有同名的目录和文件。
  • ... 或运行此脚本的用户帐户无权在 /tmp/vnc ... 中创建文件或目录!请检查 ls -ld /tmp/vnc 以查看该目录的权限
  • @Tilo:如果该用户没有权限,错误可能会读取“权限被拒绝”而不是“文件存在”。

标签: linux perl directory mkdir


【解决方案1】:

它对我有用。 可能/tmp/vnc 目录不存在,chdir 失败。 或者可能没有定义 $USER 环境变量,因为您正在从 init.d 脚本运行它,例如... 或者您可能没有/tmp/vnc 目录中的写入权限。您是否尝试过从 shell 执行 mkdir /tmp/vnc/$USER

没有细节不可能知道更多。

【讨论】:

  • 我确信 /tmp/vnc 已经存在。我可以通过 perl -e 'mkdir("$ENV{USER}")' 在命令行中执行此操作
  • mkdir /tmp/vnc/$USER 不能工作,因为vnc是目录,$USER是子目录,mkdir不支持在父目录下创建目录。
  • @thinkman 当然可以。只要父目录已经存在。
  • @teambob 奇怪的是命令“mkdir -p /tmp/vnc/test”不起作用,但是当我去 /tmp/vnc 然后“mkdir test”时,它确实有效.
  • 现在,这没有任何意义! mkdir -p /tmp/vnc/test的错误是什么?
【解决方案2】:
  1. 请检查特殊变量$!用于文本错误消息
  2. 请检查变量 $ENV{USER} 不包含额外的引号。我在 Activer Perl 的 Windows 操作系统中遇到了类似的问题。我的问题在于多余的引号

【讨论】:

  • 感谢您回答我 3 年前提出的问题。 :-)
【解决方案3】:

当您运行脚本时,也许某些东西正在重置您的环境?您能否打印$ENV{USER} 的内容并确保它包含您认为应该包含的内容?

【讨论】:

    【解决方案4】:

    如果 $ENV{USR} 是绝对路径(带有前导斜杠),则 chdir 没有用,因为您没有使用相对路径

    【讨论】:

    • $ENV{USER} 只是一个用户名,我只想在 /tmp/vnc/ 下创建一个以用户名命名的文件夹
    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多