Да, это была ошибка старых версий 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++;
У вас есть команда 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"
... или что-то подобное.
Кажется, вы хотите создать символическую ссылку на файлы в вашем каталоге, а не на сам каталог. Тогда вы, вероятно, хотите это:
ln -s /home/scripts/logs/* /home/log/