Как сделать символьную ссылку внутри каталога, как `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

Что происходит, когда вы пытаетесь?

Недавно я столкнулся с подобной проблемой, но потом оказалось, что у меня был начальный пробел в аргументе, который я передавал методу моему методу, который вызывал символическую ссылку с теми же аргументами. Проверьте эти мелкие детали. Я уверен, что это будет работать!

Как насчет

система (" ln -s /home/apuntes /home/scripts");

Другие вопросы по тегам