Да, ..
в присутствии символьных ссылок настоящая проблема. Ограбьте Щуку, написал целую работу об этой проблеме.
Я предлагаю, чтобы Вы избежали ..
при помощи dirname
с абсолютным путем, таким образом:
case $0 in
/*) where="$0" ;;
*) where="$(pwd)/$0" ;;
esac
# postcondition: $where is an absolute pathname for script
# N.B $where = .../foo/scripts/command
base="$(dirname "$(dirname "$where")")"
# postcondition: $base = .../foo
resource="$base/data"
Я на самом деле использую первую идиому (восстановите абсолютный путь с возможно относительного), что у меня есть сценарий только для этого в моем ~/bin
каталог.
После того как Вы имеете дело с абсолютными путями, dirname
ведет себя разумно.
pushd ожидает каталог как параметр командной строки, не как стандартный вход, таким образом, Вы не сможете передать каталог по каналу к нему. Попробовать
pushd "`bundle show some-gem-name`"
вместо этого.
pushd "$(bundle show some-gem-name)"
- идентичные работы, но могло быть легче ввести в зависимости от раскладки клавиатуры.$(...)
может использоваться вложенный. – jofel 26.03.2012, 18:52$(…)
только отличайтесь, когда будут обратные косые черты или обратные галочки внутри. – Gilles 'SO- stop being evil' 27.03.2012, 01:54