Вывод Bash как проблемы со списком Applescript - PullRequest
1 голос
/ 24 января 2010

Это просто сводит меня с ума. Я пытаюсь прочитать файл в bash, удалить дубликаты, отсортировать, а затем отобразить окно «Список выбора» с помощью appleScript.

Мой файл $ DATALOG отформатирован так:

поле1 поле2

поле1 поле3

поле1 поле4

и т.д ...

Applescript = awk '{print $2}' $DATALOG | awk ' !x[$0]++' | sort -u | tr "_" " "| sed 's/^/\"/' | sed 's/$/\"/' | tr "\n" "," | sed 's/.$//'

Теперь эта строка работает БОЛЬШОЙ. в $ Applescript я получаю вывод, подобный этому:

«поле 2», «поле 3», «поле 4»

Что именно я хочу.

Теперь я беру этот вывод и добавляю обратную косую черту перед кавычками, и части appleScript.

Applescript=`echo "tell application \"System Events\" to return (choose from list {$Applescript})"| sed 's/\"/\\\"/g'`

И это дает мне именно то, что я хочу:

сообщить приложению \ "Системные события \" о возврате (выберите из списка {\ "поле 2 \", \ "поле 3 \", \ "поле 4 \"})

Теперь я пытаюсь выполнить команду osascript:

osascript -e $ Applescript

И я получаю ошибку:

4: 4: синтаксическая ошибка: ожидаемое выражение, но найден конец сценария. (-2741)


Итак, я добавляю цитаты:

osascript -e "$ Applescript"

И я получаю ошибку:

17: 18: синтаксическая ошибка: ожидаемое выражение, форма свойства или ключа и т. Д., Но найден неизвестный токен. (-2741)

Я не могу сказать, что, черт возьми, здесь происходит, поэтому я решил скопировать эхо $ Airport и попробовать это как переменную.

Аэропорт = tell application \"System Events\" to return (choose from list {\"field 2\",\"field 3\",\"field 4\"})

И ЭТО РАБОТАЕТ БЕЗ ЛЮБОЙ МОДИФИКАЦИИ.

Так ....

Мне нужно выяснить, как это сделать, не устанавливая мои переменные постоянно.

1 Ответ

5 голосов
/ 24 января 2010

Не пытайтесь сделать это более сложным, чем нужно. Воспользуйтесь двумя символами строки в кавычках оболочки, чтобы сформировать одно слово оболочки в качестве значения аргумента osascript -e:

Applescript=$(awk '{print $2}' $DATALOG | awk ' !x[$0]++' | sort -u | tr "_" " "| sed 's/^/\"/' | sed 's/$/\"/' | tr "\n" "," | sed 's/.$//')
osascript -e 'tell application "System Events" to return (choose from list {'"$Applescript"'})'

Также рекомендуется избегать использования обратных кавычек для подстановки команд; форма $(command) предпочтительна, потому что гораздо проще создавать правильные команды даже при работе со сложными вложениями.

...