Как я могу передать путь по каналу к pushd?

Да, .. в присутствии символьных ссылок настоящая проблема. Ограбьте Щуку, написал целую работу об этой проблеме.

Я предлагаю, чтобы Вы избежали .. при помощи 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 ведет себя разумно.

3
27.03.2012, 01:55
1 ответ

pushd ожидает каталог как параметр командной строки, не как стандартный вход, таким образом, Вы не сможете передать каталог по каналу к нему. Попробовать

pushd "`bundle show some-gem-name`"

вместо этого.

4
27.01.2020, 21:20
  • 1
    Альтернатива: pushd "$(bundle show some-gem-name)" - идентичные работы, но могло быть легче ввести в зависимости от раскладки клавиатуры. $(...) может использоваться вложенный. –  jofel 26.03.2012, 18:52
  • 2
    @jofel различие является больше, чем это. Посмотрите unix.stackexchange.com/q/5778/9382 –  rozcietrzewiacz 26.03.2012, 20:09
  • 3
    @rozcietrzewiacz На самом деле в этом случае нет никакого различия. обратные галочки и $(…) только отличайтесь, когда будут обратные косые черты или обратные галочки внутри. –  Gilles 'SO- stop being evil' 27.03.2012, 01:54
  • 4
    @Gilles OK, благодарит указать на это. Прояснить: Я упомянул комментарий jofel к простоте ввода - который не должен рассматриваться как единственная разница в целом (когда кто-то читает это немного из контекста). –  rozcietrzewiacz 27.03.2012, 02:16

Теги

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