Я написал простой скрипт, цель которого - просто создать связь между двумя разными каталогами cygwin.Это должно быть очень просто, но так как $ LOCALAPPDATA может содержать пробелы, это окажется гораздо сложнее, чем я предполагал.
Вот сценарий:
#!/bin/sh
echo "Unlinking any existing data link..."
unlink /usr/local/astrometry/shared_data 2>/dev/null
echo "Generating link between astrometry shared_data..."
my_dir=`cygpath -u $LOCALAPPDATA/cygwin_ansvr/usr/share/astrometry/data`
echo $my_dir
my_test=`echo $my_dir`
echo $my_test
# Note here, if I use $my_dir rather than $my_test, it introduces a LINE BREAK!
ln -s "$my_test" /usr/local/astrometry/shared_data
exit 0
Итак, если язапустите приведенный выше скрипт, вот вывод:
Unlinking any existing data link...
Generating link between astrometry shared_data...
/cygdrive/c/Users/Dwight Towler/AppData/Local/cygwin_ansvr/usr/share/astrometry/data
/cygdrive/c/Users/Dwight Towler/AppData/Local/cygwin_ansvr/usr/share/astrometry/data
И ссылка формируется так:
lrwxrwxrwx 1 Dwight Towler None 84 Sep 22 02:56 shared_data -> /cygdrive/c/Users/Dwight Towler/AppData/Local/cygwin_ansvr/usr/share/astrometry/data
drwx------+ 1 Dwight Towler None 0 Sep 22 02:56 .
Выше приведена нужная ссылка (без разрыва строки).
Теперь, если я заменим $my_test
на $my_dir
в вызове ln -s
, я получу следующее:
lrwxrwxrwx 1 Dwight Towler None 84 Sep 22 02:55 shared_data -> /cygdrive/c/Users/Dwight
Towler/AppData/Local/cygwin_ansvr/usr/share/astrometry/data
drwx------+ 1 Dwight Towler None 0 Sep 22 02:55 .
Заметили разрыв строки?Я не могу понять, откуда это исходит, тем более что я помещаю кавычки вокруг переменных в вызове ln -s
.
Это особенно озадачивает, поскольку выходные данные команды echo, кажется, указывают, что обе переменные имеюттот же контент:
echo $my_dir
/cygdrive/c/Users/Dwight Towler/AppData/Local/cygwin_ansvr/usr/share/astrometry/data
echo $my_test
/cygdrive/c/Users/Dwight Towler/AppData/Local/cygwin_ansvr/usr/share/astrometry/data
Есть идеи о том, что происходит?