cd(1) и переменные с пробелами (cygwin)

У меня возникла довольно необычная проблема. В моем файле .bashrc я установил для переменной путь с пробелами. У меня было ощущение, что это вызовет проблемы, но я поэкспериментировал с настройкой псевдонима аналогичным образом и заставил его работать следующим образом:

alias npp="\"/cygdrive/c/Program Files (x86)/Notepad++/notepad++.exe\""

Теперь я подумал, что могу использовать тот же трюк для моей переменной окружения -

export PRO="\"/cygdrive/c/Program Files (x86)\""

Это сработало. Что-то вроде.

[myName]  
$ echo $PRO  
"/cygdrive/c/Program Files (x86)"

[myName]  
$ cd $PRO  
bash: cd: "/cygdrive/c/Program: No such file or directory

Я пробовал помещать побег перед пробелом с удалением двойных кавычек и без них, я пробовал одинарные кавычки с побегом и без него. Я пытался использовать серьезные акценты в качестве кавычек. Я пытался просто сбежать, я пытался

export PRO=/cygdrive/c/Program\\\ Files\\\ \\\(x86\\\)

Ничего из этого не сработало. Единственное, что было -

export PRO="/cygdrive/c/Program Files (x86)"
$ cd "$PRO"

В конечном счете, я пытаюсь найти способ заставить свою переменную работать, не помещая ее в кавычки каждый раз, когда я набираю переменную. Полностью исчерпав идеи, я пришел сюда в надежде, что кто-то сможет мне помочь.


person user1850009    schedule 24.11.2012    source источник
comment
Вот как это должно работать. Если вы хотите, чтобы значение с пробелами рассматривалось как одно слово, заключите его в двойные кавычки. Есть аргумент, что вы почти всегда должны заключать переменные (особенно переменные, которые могут содержать пробелы) в двойные кавычки.   -  person Jonathan Leffler    schedule 25.11.2012


Ответы (6)


Я обошел это с помощью подстановочных знаков:

экспорт PRO="/cygdrive/d/Program*Files/"

person chris    schedule 12.07.2013

Из-за разделения слов, если вы не заключаете $PRO в кавычки, этот пробел разбивает ваш путь на несколько слов.

person lurker    schedule 24.11.2012

В вашем случае невозможно использовать переменную без кавычек.

person gniourf_gniourf    schedule 24.11.2012

Технически я не могу ответить на ваш вопрос, но хороший обходной путь — создать ссылку на нужную папку, создать переменную для ссылки, а затем перейти к этой переменной. Это раздражающий второй шаг и бессмысленная ссылка, но если ее стоит поместить в ваш профиль bash, возможно, это стоит дополнительных хлопот.

Вот что я сделал:

ln -sf '/cygdrive/c/Users/Mic/Desktop/PENDING - Pics/' '/cygdrive/c/Users/Mic/mypics'

Затем я помещаю это в свой bash_profile, и теперь я могу перейти к $pic

pic=/cygdrive/c/Users/Eric/mypics/
person Fonnae    schedule 03.07.2013

Просто заключите файл программы в двойные кавычки таким образом

/cygdrive/c/"Program Files (x86)"

Меня устраивает

person Mangoski    schedule 20.01.2016

Я столкнулся с аналогичной проблемой со сценарием оболочки, оценивающим путь к каталогу в переменной без выхода из пробела в «Program Files». Я обошел это, запустив Cygwin от имени администратора и создав символическую ссылку. Ни один из ответов здесь не работал.

ln -s "/cygdrive/c/Program Files" /cygdrive/c/ProgramFiles

person Chris Olin    schedule 30.04.2016