Экранирующая строка с пробелами, переданная функции ZSH

#zsh

#zsh

Вопрос:

У меня есть скрипт на удаленной машине. Я подключаюсь к SSH и вызываю его с помощью zsh my-script.sh :

 #!/bin/zsh

# Load some environment variables
source $HOME/.extra

send_notification() {
  $HOME/bin/hass-cli service call notify.alec --arguments title="$1",message="$2"
}

# THIS WORKS
send_notification "My-Title" "My-description."

# THIS DOESN'T WORK
send_notification "My Title" "My description."
 

Как вы можете видеть из комментариев, когда в строке есть пробел, когда я передаю ее send_notification функции, они не экранируются должным образом, и я получаю следующую ошибку от hass-cli :

 Error: Got unexpected extra arguments (My Title,message=My description.)
 

Когда в строках нет пробелов, все работает нормально. Есть идеи, как я могу правильно избежать этих пробелов?

Ответ №1:

Всегда передаются два аргумента send_notification , и функция передает аргументы в hass-cli . На самом деле, кавычки вокруг $1 и $2 являются избыточными, поскольку вы используете zsh, но они не вредят.

Следовательно, ошибка должна быть в hass-cli программе. Возможно, аргументы обрабатываются неправильно, поэтому вам нужно это исправить.

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

1. Спасибо, да, я открыл проблему: github.com/home-assistant-ecosystem/home-assistant-cli/issues /…

Ответ №2:

В кодированном виде команда становится:

 hass-cli service call notify.alec --arguments title=My Title,message=My description.
 

Одним из простых решений было бы заключить ссылки на переменные в одинарные кавычки (внутри двойных кавычек), например:

 hass-cli service call notify.alec --arguments title="'$1'",message="'$2'"
 

Таким образом, вызов становится:

 hass-cli service call notify.alec --arguments title='My Title',message='My description.'
 

Предполагается, что одинарные кавычки не имеют особого значения для hass-cli , в противном случае замените одинарные кавычки экранированными двойными кавычками:

 hass-cli service call notify.alec --arguments title=""$1"",message=""$2""
 

Итак, команда теперь становится:

 hass-cli service call notify.alec --arguments title="My Title",message="My description."
 

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

1. Когда вы говорите, что команда «расширяется» таким образом, не могли бы вы уточнить, какая система это делает? Потому что Zsh, конечно, не …

2. К сожалению, оба этих параметра дают мне Error: Got unexpected extra arguments (My Title",message="My description.") <- это из вашего второго примера.

3. На самом деле, даже hass-cli service call notify.alec --arguments title="My Title",message="My description." сбой с Error: Got unexpected extra arguments (Title,message=My description.) . Возможно, проблема в hass-cli том, как она настроена в моей системе. Кажется, отлично работает на другой машине.

4. Нет такой же ошибки. Я запускаю эту команду в сеансе SSH. В сеансе, отличном от SSH, на моей основной машине он работает нормально.

5. как вы упомянули, возможно, что-то с hass-cli … разные настройки / конфигурации, разные версии? боюсь, у меня сейчас нет идей…