Вставить промежуточную переменную в команду osascript оболочки? - PullRequest
0 голосов
/ 28 мая 2020

Я использую MacOS osascript команду в сценарии оболочки и пытаюсь выполнить следующую команду:

APPNAME=$@

if pgrep -x "$APPNAME" > /dev/null # checking if app is open
then
  echo "Closing..."
  osascript -e 'quit app $APPNAME'

else
  echo "*** The app is not open"
fi

В идеале команда должна быть osascript -e 'quit app "Calendar"' как пример рабочего решения. Однако мне кажется, что я не могу вставить переменную между кавычками.

Что может быть обходным путем?

Ответы [ 3 ]

2 голосов
/ 29 мая 2020

Попытка динамически построить скрипт с использованием строковой интерполяции - всегда fr agile. Вы должны передать имя приложения как аргумент в AppleScript, чтобы вам не приходилось беспокоиться об экранировании каких-либо символов через два уровня интерпретаторов.

APPNAME=$1  # The name should be passed as a single argument.

if pgrep -x "$APPNAME" > /dev/null # checking if app is open
then
  echo "Closing..."
  osascript -e 'on run argv' -e 'quit app (item 1 of argv)' -e 'end run' "$APPNAME"

else
  echo "*** The app is not open"
fi

Не важно значение APPNAME означает, что вы выполняете точно такой же сценарий; единственное отличие - это аргумент, который получает скрипт.

1 голос
/ 28 мая 2020

Смысл (во всяком случае, одна из точек) одинарных кавычек - предотвратить интерполяцию переменных. Похоже, что вам действительно нужен способ заключить строку в двойные кавычки. Есть много способов сделать это. Обычный:

osascript -e "quit app \"$appname\""
0 голосов
/ 29 мая 2020

Попробуйте:

osascript -e 'quit app '"$APPNAME"

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

osascript -e 'quit app "'"$APPNAME"'"'
...