Назад | Перейти на главную страницу

cd в сценарии bash

Я работаю в среде Windows, но предпочитаю использовать bash в cygwin в качестве оболочки. Чтобы перейти к длинному пути, мне задают в форме окна, что я набираю:

cd $(cygpath -u 'Z:\Some\long\windows\path')

.. вставка пути к окнам из буфера обмена. Так как я ленив, я попытался сделать так:

#!/usr/bin/env bash
if [ -z "$1" ]; then
    exit 0
else 
    TGT=$(cygpath -u $1)    
    cd $TGT
fi
exit 0

... потом понял, что компакт-диск находится в оболочке, в которой работает мой скрипт, а не в той, из которой я его вызвал, поэтому не имеет желаемого эффекта. Как мне заставить это работать?

Вы можете просто установить его как псевдоним:

alias cd='cd $(cygpath -u "$1")'

Вставьте это в свой .bashrc file или где бы то ни было еще у вас установлены псевдонимы, и вы должны быть золотыми.

В противном случае вам нужно будет поместить каталог с путем к вашему пользовательскому сценарию раньше на вашем пути, чем каталог с фактической командой cd (я думаю, что cygwin устанавливает путь в .bash_profile); что, вероятно, не будет работать, поскольку cd - встроенная оболочка.

Простой cd 'Z:\Some\long\windows\path' должно просто работать на самом деле. Вы можете включить nodosfilewarning вариант хотя.