РЕДАКТИРОВАТЬ: Нашел способ получить путь к документу в Unix Script, запущенном TextWrangler, поэтому я переписал это.
Существует несколько способов работы со скриптами в TextWrangler через меню #! , и я не уверен, какой из них вы пытаетесь использовать. Похоже, однако, что вы пытаетесь создать сценарий Unix для преобразования вашего документа LilyPond.
Как подсказывает ваша ошибка, в Unix Scripts, к сожалению, вообще нет аргументов, поэтому $1
будет пустым. Однако оказывается, что последние версии BBEdit / TextWrangler do устанавливают некоторые переменные среды перед запуском скрипта (см. Примечания к выпуску BBEdit 9.3 и прокрутите вниз до Изменения ). В частности, вы можете использовать следующую переменную окружения:
BB_DOC_PATH path of the document (not set if doc is unsaved)
Итак, сохраните этот сценарий в ~/Library/Application Support/TextWrangler/Unix Support/Unix Scripts
и вам будет хорошо идти.
Другие способы, которыми вы можете пытаться сделать это, которые не работают:
- Используя Unix Filter: , чтобы сделать это, вам нужно будет выбрать весь ваш код LilyPond в документе, и он будет сохранен во временном файле, который передается в качестве аргумента в ваш скрипт , Хорошо, так что вы получите входное имя файла за счет некоторых хлопот. Но затем вывод этого скрипта (то есть вывод компилятора LiiyPond) по умолчанию заменяет то, что вы только что выбрали, что, вероятно, не то, что вы хотите. Неправильный инструмент для работы.
- Использование #! → Запустите для файла LilyPond: Это включает в себя размещение строки
#!
в верхней части вашего файла и попытку TextWrangler выполнить ваш файл как скрипт, используя #!
в качестве руководства для выбора скрипт переводчика. К сожалению, строка #!
работает только с некоторыми языками сценариев, и LilyPond (не совсем язык сценариев) не является одним из них. Это то, что Питер Хилтон пытается сделать, и, как он отмечает, вы получите ошибки синтаксиса LilyPond, если попытаетесь добавить строку #! в начало файла LilyPond. (Если вам интересно, технически есть способ заставить #! → запустить работать, а именно внедрить ваш код LilyPond в исполняемую оболочку или скрипт perl, используя синтаксис здесь-документа. Но это это грубый хак, который быстро станет громоздким.)
Существует несколько ограничений на скрипт, связанный выше:
- Он не проверяет, сохранен ли ваш документ перед запуском LilyPond. Было бы неплохо автоматически сохранить TextWrangler перед запуском LilyPond.
- Он не может принимать фрагменты текста или несохраненные документы в качестве входных данных, только сохраненные документы.
Вы можете сделать более сложные решения, которые бы решали эти проблемы, обратившись к AppleScript. Два способа сделать это:
- Создайте скрипт, специфичный для TextWrangler, и поместите его в
~/Library/Application Support/TextWrangler/Scripts
. Затем он появляется в меню AppleScript (странная прокрутка S), или вы можете получить его, подняв Окно → Палитры → Сценарии . Я считаю, что двое людей пошли по этому пути и поделились своими результатами:
- Создайте службу Mac OS, которая потенциально может быть методом, который можно будет повторно использовать практически в любом текстовом редакторе. Именно так мы собирали файлы Common Music еще в дни NeXT, поэтому я могу подтвердить его элегантность. К сожалению, у меня нет хорошего актуального примера этого.