функция символической ссылки, создающая мертвую ссылку - PullRequest
0 голосов
/ 02 апреля 2020
use strict;
use warnings;

print "Enter link name\n";
chomp(my $link = <STDIN>);

my $link1;
$link1 = readlink '/home/test/abc_test/xyz';

symlink("$link1", "/home/test/test_scripts/$link");

/ home / test / abc_test / xyz указывает на каталог, как показано ниже:

cd /home/test/abc_test
ls -lrt
xyz -> dir

В $link Я принимаю значение имени символической ссылки от пользователя, например "abc".

В приведенном выше сценарии я пытаюсь создать символическую ссылку в пути /home/test/test_scripts, которая должна указывать на каталог, на который указывает xyz. Конечный результат, который я хочу создать в /home/test/test_scripts:

abc -> dir

Приведенный выше код дает тот же результат, но создает мертвую ссылку в пути.

Может кто-нибудь, пожалуйста, дайте мне знаете, что я делаю не так?

1 Ответ

3 голосов
/ 02 апреля 2020

Проблема в том, что readlink возвращает только имя каталога, dir, а не полный путь к dir.

Я предполагаю, что вы не запускаете свой скрипт в каталоге, содержащем dir , В этом случае вам нужно предоставить полный путь к обоим аргументам символическая ссылка :

use strict;
use warnings;

my $link = 'abc';
my $link1 = readlink '/home/test/abc_test/xyz';
my $x = symlink "/home/test/abc_test/$link1", "/home/test/test_scripts/$link";
print "$x\n";

Я также показываю, что вы можете проверить возвращаемое значение symlink, чтобы увидеть, если оно успешно (1) или нет (0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...