чайников - полезные bash скрипты




Сценарий BASH для cd в каталог с пробелами в пути (8)

Вы можете использовать любой из:

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

Вы не можете использовать:

cd ~"/My Code"

Первый работает, потому что оболочка расширяет ~ / в $ HOME /, а затем накладывает на My Code без двойных кавычек. Второе не удается, потому что для ~" для сопоставления нет пользователя, называемого '' '(двойная кавычка).

Argggg. Я борется с этой глупой проблемой в течение нескольких дней, и я не могу найти ответ.

Я использую BASH в Mac OS X, и я хотел бы создать простой исполняемый файл сценария, который будет изменен на другой каталог, когда он будет запущен. Однако путь к этому каталогу содержит пробелы. Как ты это делаешь? Это то, что у меня есть ...

Название файла: cdcode

Содержимое файла: cd ~/My Code

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

Кстати, я пробовал cd "~/My Code" и cd "~/My\ Code" и ни одна из них не работала.


Для меня работает одна обратная косая черта:

[email protected]:~$ mkdir "My Code"

[email protected]:~$ vi todir.sh

[email protected]:~$ . todir.sh 

[email protected]:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

Вы уверены, что проблема заключается не в том, что ваш сценарий оболочки меняет каталог в своей подоболочке, но затем вы вернулись в основную оболочку (и оригинальный каталог), когда это было сделано? Я избегал этого, используя. для запуска скрипта в текущей оболочке, хотя большинство людей просто использовали бы псевдоним для этого. Пространства могут быть красной селедкой.


Используйте одинарные кавычки, например:

myPath=~/'my dir'

cd $myPath

Когда вы дублируете путь, вы останавливаете расширение тильды. Итак, есть несколько способов сделать это:

cd ~/"My Code"
cd ~/'My Code'

Тильда здесь не цитируется, поэтому расширение тильды все равно будет запущено.

cd "$HOME/My Code"

Вы можете расширять переменные среды внутри строк с двойными кавычками; это в основном то, что делает расширение тильды

cd ~/My\ Code

Вы также можете избежать специальных символов (например, пробела) с обратным слэшем.


После борьбы с одной и той же проблемой я попытался использовать два разных решения:

  • Решение1: Самый простой способ просто использовать двойные кавычки для ваших переменных, как указано в предыдущем ответе cd "$yourPathWithBlankSpace"
  • Решение2: Согласно этой команде Unix для избежания пробелов вы можете удалить пустое пространство, а затем использовать Eval, например:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace") + eval cd $yourPathEscaped


При работе в Linux синтаксис ниже прав:

cd ~/My\ Code

Однако, когда вы выполняете свой файл, используйте синтаксис ниже:

$ . cdcode

(только «.», а не «./»)


Теперь у меня была аналогичная проблема, когда я использовал сценарий bash, чтобы сбрасывать некоторые данные. Я закончил создание символической ссылки в папке сценария без каких-либо пробелов. Затем я указал свой сценарий на символическую ссылку, и это отлично работает.

Чтобы создать свою ссылку. ln -s [ЦИФРОВОЙ КАТАЛОГ ИЛИ ФАЙЛ] ./[SHORTCUT]

Мау или не может быть полезным.


использовать двойные кавычки

go () 
{ 
    cd "$*"
}




escaping