Как сделать символьную ссылку внутри каталога, как `ln -s TARGET DIRECTORY`?
Я пытаюсь сделать мягкую ссылку внутри каталога с помощью скрипта Perl.
я могу использовать ln
создать ссылку на /home/apuntes
внутри каталога /home/scripts
как это:
ln -s /home/apuntes /home/scripts
Но я не знаю, как это сделать с Perl. Я старался
symlink("home/apuntes", "home/scripts");
но он не создал ссылку и нет ошибок. Может кто-нибудь мне помочь?
4 ответа
В Perl symlink
не поддерживает передачу каталога вместо имени ссылки, как вы можете с ln
, Вы должны передать имя ссылки:
symlink('/home/apuntes', '/home/scripts/softlinkname');
Ты пробовал symlink('/home/apuntes', '/home/scripts')
? (Ваш вопрос упоминает это без / перед домом.) Он должен работать, возвращая 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
Что происходит, когда вы пытаетесь?
Недавно я столкнулся с подобной проблемой, но потом оказалось, что у меня был начальный пробел в аргументе, который я передавал методу моему методу, который вызывал символическую ссылку с теми же аргументами. Проверьте эти мелкие детали. Я уверен, что это будет работать!