Как я могу создать символическую ссылку для каталога

Да, это была ошибка старых версий bashисправлена ​​в bash -4.2.14

А вот и коммит, который решает проблему ; делай из этого что хочешь.

Что такое CTLESC? Видите ли, он определен в syntax.hкак #define CTLESC '\001'. Это какой-то внутренний побег, каким-то образом связанный с расширением. Похоже, ошибка может заключаться в том, что ваши данные \x01интерпретируются так, как если бы они были внутренне -сгенерированными CTLESCили что-то в этом роде.

commit 25db9a70d4c2ba5c43d4167f231bdd8d760d5a06
Author: Chet Ramey 
Date:   Tue Nov 22 20:02:46 2011 -0500

    Bash-4.2 patch 14

diff --git a/patchlevel.h b/patchlevel.h
index 636be1c..04b423b 100644
--- a/patchlevel.h
+++ b/patchlevel.h
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */

-#define PATCHLEVEL 13
+#define PATCHLEVEL 14

 #endif /* _PATCHLEVEL_H_ */
diff --git a/pathexp.c b/pathexp.c
index 42f21e4..f239956 100644
--- a/pathexp.c
+++ b/pathexp.c
@@ -196,7 +196,7 @@ quote_string_for_globbing (pathname, qflags)
    {
      if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/')
        continue;
-     if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
+     if (pathname[i+1] != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
        continue;
      temp[j++] = '\\';
      i++;

0
21.11.2019, 09:32
2 ответа

У вас есть команда ln -sзадом наперед. Первый операнд — это место, куда должна указывать ссылка, а второй — то, что вы хотите назвать самой символической ссылкой.

Вы можете запомнить порядок операндов с помощью команды ln -s this hereи прочитать это как «Возьмите это и создайте для него символическую ссылку здесь » (так же, как mv this hereозначает «Возьми это и перенеси сюда » и т. д.)

Команда

ln -s /home/logs /home/scripts/logs

создаст символическую ссылку /home/scripts/logs, указывающую на /home/logs(, предполагая, что /home/scripts/logsеще не существует ).

В реальной жизни вы, вероятно, не работаете с каталогами непосредственно под /home, так что вполне вероятно, что вы действительно хотите

ln -s "$HOME/logs" "$HOME/scripts/logs"

... или что-то подобное.

3
28.01.2020, 02:21

Кажется, вы хотите создать символическую ссылку на файлы в вашем каталоге, а не на сам каталог. Тогда вы, вероятно, хотите это:

ln -s /home/scripts/logs/*  /home/log/
0
28.01.2020, 02:21

Теги

Похожие вопросы