如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?
Posted
技术标签:
【中文标题】如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?【英文标题】:How can I make a symbolic link inside a directory like `ln -s TARGET DIRECTORY` does? 【发布时间】:2016-06-15 20:46:00 【问题描述】:我正在尝试使用 Perl 脚本在目录中创建软链接。
我可以使用ln
在/home/scripts
目录中创建指向/home/apuntes
的链接,如下所示:
ln -s /home/apuntes /home/scripts
但我不知道如何用 Perl 来做到这一点。我试过了
symlink("home/apuntes", "home/scripts");
但它没有创建链接并且没有错误。谁能帮帮我?
【问题讨论】:
PD:我不能使用系统调用symlink("home/apuntes", "home/scripts")
与 shell 命令 ln -s /home/apuntes /home/scripts
不同,因为您的符号链接调用没有前导正斜杠。这是你的问题吗?
如果您还没有这样做,还请检查 $!
是否有错误。
我正在检查,它抛出:文件已经退出。
$!只有在出错后才有意义;如果符号链接返回 1 它不是
【参考方案1】:
Perl 的symlink
不支持像ln
那样传递目录而不是链接名称。您必须传递链接名称:
symlink('/home/apuntes', '/home/scripts/softlinkname');
【讨论】:
@ThisSuitIsBlack这不是 ln 和 perl 的符号链接之间的差异; ln 有ln TARGET DIRECTORY
和 ln TARGET LINK_NAME
形式,但 symlink 只有后者。所以这是一个很好的答案,但问题缺乏实际想要的细节(并且 OP 说符号链接返回 1 他们可能是错误的)【参考方案2】:
你试过symlink('/home/apuntes', '/home/scripts')
吗? (您的问题在 home 之前没有提到 /。)它应该可以工作,成功返回 1,失败返回 0(并设置 $!)。
但通常只有 root 对/home
有写访问权;你是否以 root 身份运行它?
这对我来说很好用:
sudo perl -wE'say symlink("/home/ysth","/home/xysth") || "Error: $!"'
第一次打印 1,第二次打印“错误:文件存在”。
运行sudo strace perl -wE'say symlink("/home/ysth","/home/xysth") || "Error: $!"'
给出(在很多其他东西之后):
symlink("/home/ysth", "/home/xysth") = 0
write(1, "1\n", 21
) = 2
第二次运行:
symlink("/home/ysth", "/home/xysth") = -1 EEXIST (File exists)
write(1, "Error: File exists\n", 19Error: File exists
) = 19
当你尝试时会发生什么?
【讨论】:
是的,我以 root 身份运行它,我也尝试过 symlink('/home/apuntes', '/home/scripts') 它返回 1,并且不创建软链接跨度> 这是什么操作系统?也许尝试在 strace 下运行它,看看是否能告诉你什么? 更新了答案。并且您确定您的参数顺序正确(首先是现有文件,其次是新的符号链接名称)?【参考方案3】:我最近遇到了类似的问题,但后来发现我在将方法传递给我的方法的参数中有一个前导空格,该方法使用相同的参数调用符号链接。查看这些小细节。我相信它会起作用的!
【讨论】:
【参考方案4】:怎么样
system("ln -s /home/apuntes /home/scripts");
【讨论】:
问题是关于 Perl,而不是 Python。但是,即使您放弃了特定于 Python 的导入,当有一个执行相同操作的内置命令时,也没有理由使用system
。
我不能使用系统调用:s以上是关于如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在像 BBC 新闻应用一样的 UIScrollView 中添加“广告”?
在像 bittorrent 这样的点对点协议的情况下,NAT 遍历是如何工作的。
在像 bittorrent 这样的点对点协议的情况下,NAT 遍历是如何工作的。
如何在像 Java 这样的 Javascript 中创建 Bean 类?