Использовать cp -P
(капитал P), чтобы никогда не пересечь любую символьную ссылку и скопировать символьную ссылку вместо этого.
Это может быть объединено с другими опциями такой как -R
скопировать иерархию каталогов — cp -RL
пересечения все символьные ссылки на каталоги, cp -RP
копии все символьные ссылки как таковые. cp -R
мог бы сделать один или другой в зависимости от вариантов Unix; GNU cp
(как найдено на CentOS) значения по умолчанию к -P
.
Даже с -P
, можно скопировать цель символьной ссылки на каталог на командной строке путем добавления a /
в конце: cp -RP foo/ bar
копирует дерево каталогов это foo
точки к.
GNU cp
имеет удобное -a
опция, которая объединяется -R
, -P
, -p
и немного больше. Это делает точную копию источника (в максимально возможной степени), сохраняя иерархию каталогов, символьные ссылки, полномочия, время изменения и другие метаданные.
Попытайтесь использовать $HOME/.drush...
вместо ~/.drush....
"~"
кажется, не расширен до Вашего корневого каталога.
Тильда ~
символ для значения корневого каталога только работает в начале слова, в начале значения, присваиваемого, или (в целях присвоений ПУТИ) после двоеточия в присваиваемом значении. Это не должно быть заключено в кавычки.
С тех пор ~
расширен оболочкой, то, что Вы видите, о котором сообщают cp
средства, что у Вас есть проблема расширения оболочки.
Здесь тильда в двойных кавычках, таким образом, она не расширена. Используйте любой из них:
DRUSH_ALIASES_PATH=~/".drush/${PROJECT_NAME}.aliases.drushrc.php"
DRUSH_ALIASES_PATH="$HOME/.drush/${PROJECT_NAME}.aliases.drushrc.php"
Используя bash
можно также использовать внутреннюю строку subsitution через расширение параметра для замены символа тильды ~
со значением $HOME
.
Не очень изящный, но могло быть полезным, если Вы не уверены в возможном ~
символ в строке пути к файлу, переданной Вам (не случай здесь).
unset HOME
HOME="$(eval 'echo ~')"
- cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}
+ cp "${DRUSH_ALIASES_EXAMPLE_PATH/#\~/${HOME}}" "${DRUSH_ALIASES_PATH/#\~/${HOME}}"
~
не расширен при заключении в кавычки. Конечно, аргументыcp
действительно должен быть заключен в кавычки также, для предотвращения неожиданностей. – derobert 02.12.2013, 15:19~/"quoted name"
будет работать, также. – Mark Plotnick 02.12.2013, 16:49