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

#bash #shell #unix #ksh #zsh

#bash #оболочка #unix #ksh #zsh

Вопрос:

Я пытаюсь создать псевдоним на моем mac-терминале в оболочке zsh.

некоторая информация когда я делаю echo $SHELL, я получаю /bin/zsh, доказывающий, что я использую оболочку zsh.

у mac есть команда, которую вы можете использовать для открытия таких вещей в Chrome, как это :

 open -a "google chrome" myfile.html
  

Мне нужно создать псевдоним для этого, но он не будет работать, но работают другие псевдонимы.
я бы хотел, чтобы псевдоним выполнялся следующим образом

 chrome myfile.html
  

вот мой файл псевдонима:

 alias x="echo 'y "
alias chrome="open -a 'google chrome' "
  

итак, если я запускаю x в командной строке, y выводится, но если я запускаю chrome в командной строке, он сообщает, что не может найти файл. Должен ли я использовать xargs или что-то в этом роде?

Комментарии:

1.В качестве отступления: $SHELL всегда отражает вашу оболочку по умолчанию, не обязательно ту, которую вы используете в данный момент. Простой способ определения исполняемого файла, выполняющего текущую оболочку, ps -o comm= -p $$

Ответ №1:

Примечание: этот ответ применим не только к zsh , но и к bash and ksh .

Попробуйте:

 alias chrome='open -a "Google Chrome"'
  

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


Проблема с вашим определением заключалась в том, что ' оно буквально стало частью псевдонима (а не просто ' ) — нет необходимости экранировать ' строковый литерал в двойных кавычках.

Таким образом, вы также можете использовать следующее (но, как указано, предпочтительнее использовать одинарные кавычки для заключения всего определения):

 alias chrome="open -a 'Google Chrome'"
  

Ответ №2:

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

 $ alias chrome="echo open -a 'google chrome' "
$ chrome
open -a 'google chrome'
  

Кавычки, которые показаны здесь, являются буквальными частями аргумента.

Просто используйте один из:

 alias chrome="open -a 'google chrome'"
alias chrome='open -a "google chrome"'
alias chrome="open -a "google chrome""
  

Все они эквивалентны.

Комментарии:

1. Ваш список всех параметров кавычек полезен, но стоит отметить, что использование строк в двойных кавычках для определения псевдонимов сложно, поскольку строка может быть расширена преждевременно (во время определения псевдонима, а не выполнения ).