Bash - указание переменной в качестве пути к файлу

Я пытаюсь указать переменную для открытия файла в определенном приложении, но как бы я ни пытался ссылаться на нее, она не работает.

sublime1=/Applications/Sublime\ Text.app/
sublime2 = "/Applications/Sublime\ Text.app/"
sublime3 = "/Applications/Sublime Text.app/"

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

open ~/.zshrc -a $sublime1
open ~/.zshrc -a $sublime2
open ~/.zshrc -a $sublime3

The file /Users/matthew/Text.app does not exist

Это дает мне одну и ту же ошибку для каждого, поэтому я предполагаю, что они эквивалентны. Даже когда я пробую cd $sublime, он тоже терпит неудачу, но немного иначе ...

bash: cd: /Applications/Sublime: No such file or directory

Обновлять:
Чарльз предложил использовать функцию для выполнения задачи быстрого открытия чего-то в возвышенном.

sublime() { open "$@" -a "/Applications/Sublime Text.app/"; }

Позволит вам просто бежать

sublime ~/.zshrc

Цитируйте "$sublime1", или оболочка разбивает слова на пробелы.

Benjamin W. 16.03.2018 19:22

Возможный дубликат Как перейти в каталог с пробелом в имени?

Benjamin W. 16.03.2018 19:23

Кстати, неплохо было бы поместить необязательные аргументы перед в позиционные - это единственный синтаксис, который гарантирует, что Рекомендации по синтаксису служебной программы POSIX будет поддерживаться (ищите «Директива 9»). Таким образом, open -a "$sublime1" ~/.zshrc

Charles Duffy 16.03.2018 19:36

Спасибо @benjamin, я всегда рад за такие маленькие советы

Matthew Wolff 16.03.2018 19:39

См. sublimetext.com/docs/3/osx_command_line.html.

chepner 16.03.2018 20:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
1 568
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Эти задания верны:

sublime1=/Applications/Sublime\ Text.app/
sublime3 = "/Applications/Sublime Text.app/"

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

open ~/.zshrc -a "$sublime1"
open ~/.zshrc -a "$sublime3"

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

Matthew Wolff 16.03.2018 19:27

@MatthewWolff, используйте функцию, а не переменную. sublime() { open "$@" -a "/Applications/Sublime Text.app/"; }, затем можно запустить sublime ~/.zshrc

Charles Duffy 16.03.2018 19:27

@MatthewWolff, ... кстати, поскольку ваша цель - использовать переменные для хранения команд или их частей, см. BashFAQ # 50.

Charles Duffy 16.03.2018 19:28

попробуйте использовать sublime1=$(/Applications/Sublime/Text.app)

и используя chmod 770 Text.app в Text.app в командной строке

Извините за мой английский...

var=$(...) присваивает переменной выход.... OP не хочет назначать вывод выполнения Text.app; вместо этого они хотят сохранить путь к самой команде.
Charles Duffy 16.03.2018 19:27

Другие вопросы по теме