Я использую Bash в macOS X и хотел бы создать простой исполняемый файл сценария, который при запуске переходил бы в другой каталог. Однако в пути к этому каталогу есть пробелы. Как, черт возьми, ты это делаешь? Это то, что у меня есть ...
Имя файла: cdcode
Содержимое файла:
cd ~/My Code
Разумеется, это не длинный путь, но мой фактический путь состоит из пяти каталогов, и в четырех из этих каталогов есть пробелы в пути.
Кстати, я попробовал cd "~/My Code"
и , cd "~/My\ Code"
и ни один из них не работал.
Ответы:
Когда вы заключаете путь в двойные кавычки, вы останавливаете расширение тильды. Итак, есть несколько способов сделать это:
cd ~/"My Code" cd ~/'My Code'
Тильда здесь не цитируется, поэтому расширение тильды все равно будет выполняться.
cd "$HOME/My Code"
Вы можете развернуть переменные среды внутри строк, заключенных в двойные кавычки; это в основном то, что делает расширение тильды
cd ~/My\ Code
Вы также можете экранировать специальные символы (например, пробел) с помощью обратной косой черты.
источник
Я нашел решение ниже на этой странице :
x="test\ me" eval cd $x
Комбинация
\
в текстовой константе в двойных кавычках иeval
передcd
заставляет работать как шарм!источник
eval
.eval
.После борьбы с той же проблемой я попробовал два разных решения, которые работают:
1. Используйте двойные кавычки (
""
) с вашими переменными.Самый простой способ - просто заключить переменные в двойные кавычки, как указано в предыдущем ответе:
cd "$yourPathWithBlankSpace"
2. Используйте
eval
.В соответствии с этим ответом команда Unix, чтобы избежать пробелов, вы можете удалить пустое пространство, а затем использовать его
eval
, например:yourPathEscaped=$(printf %q "$yourPathWithBlankSpace") eval cd $yourPathEscaped
источник
cd ~/My\ Code
Кажется, у меня работает ... Если отбрасывание кавычек, но сохранение косой черты не работает, можете ли вы опубликовать образец кода?
источник
Вы можете использовать любой из:
cd ~/"My Code" cd ~/M"y Code" cd ~/My" Code"
Вы не можете использовать:
cd ~"/My Code"
Первый работает, потому что оболочка расширяет ~ / до $ HOME /, а затем добавляет "Мой код" без двойных кавычек. Второй не работает, потому что нет пользователя с именем '
"
' (двойная кавычка) для~"
сопоставления.источник
Для меня работает одна обратная косая черта:
ry4an@ry4an-mini:~$ mkdir "My Code" ry4an@ry4an-mini:~$ vi todir.sh ry4an@ry4an-mini:~$ . todir.sh ry4an@ry4an-mini:My Code$ cat ../todir.sh #!/bin/sh cd ~/My\ Code
Вы уверены, что проблема не в том, что ваш сценарий оболочки меняет каталог в своей подоболочке, а в том, что после этого вы снова возвращаетесь в основную оболочку (и исходный каталог)? Я избежал этого, используя. для запуска сценария в текущей оболочке, хотя большинство людей просто использовали бы для этого псевдоним. Пространства могут быть отвлекающим маневром.
источник
Избегайте ~ в скриптах; используйте вместо этого $ HOME.
источник
При работе под Linux синтаксис ниже:
cd ~/My\ Code
Однако когда вы выполняете свой файл, используйте синтаксис ниже:
$ . cdcode
(просто '.', а не './')
источник
используйте двойные кавычки
go () { cd "$*" }
источник
.bashrc
файле для смены каталога при вставке имен каталогов, содержащих пробелы, в командную строку без необходимости затем экранировать пробелы или заключать все в кавычки.cds
хотя имя лучше.go
он был эквивалентенcd
, например, cd в домашний каталог?Самый простой способ сделать это -
$ cd My\ Folder
В bash запустите команду DIR, и в результатах вы увидите, что имена папок или путей с пробелами между ними были записаны в таких результатах, как это -
$dir My\ Folder New\ Folder
источник
Это сделает это:
cd ~/My\ Code
Мне пришлось использовать это для работы с файлами, хранящимися на iCloud Drive. Вы не захотите использовать двойные кавычки ("), так как тогда это должен быть абсолютный путь. Другими словами, вы не можете комбинировать двойные кавычки с тильдой (~).
В качестве примера мне пришлось использовать это для недавнего проекта:
cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project
Надеюсь, это поможет.
источник
У меня была аналогичная проблема, когда я использовал сценарий bash для сброса некоторых данных. Я закончил тем, что создал символическую ссылку в папке скрипта без каких-либо пробелов. Затем я указал своим скриптом на символическую ссылку, и она отлично работает.
Чтобы создать свою ссылку. ln -s [ЦЕЛЕВОЙ СПРАВОЧНИК ИЛИ ФАЙЛ] ./[SHORTCUT]
Мау или может не пригодиться.
источник
Используйте одинарные кавычки, например:
myPath=~/'my dir' cd $myPath
источник