OSX 'открыть с помощью' сценария bash

8

У меня есть скрипт bash, возможно, многие из них на самом деле, и я хотел бы иметь возможность открывать файлы в искателе OSX.

Это действительно очень простая концепция, но по какой-то причине сценарии bash выделены серым цветом в диалоговом окне поиска с помощью функции поиска.

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

Спасибо!

богатые
источник

Ответы:

11

Это невозможно. Launch Services работает с идентификаторами приложений, а в bash-скриптах их нет.

Вам необходимо создать приложение-оболочку с помощью Automator.

  1. Запустить Automator
  2. Выберите приложение
  3. Найдите действие Run Shell Script и добавьте его справа.
  4. Передать ввод в качестве аргументов
  5. Поместите свой сценарий туда
  6. Сохранить где-нибудь

Вот моя версия с использованием утилиты командной строки Growl :

введите описание изображения здесь

Результат:

введите описание изображения здесь


Вы можете увидеть эффект, который оказывает это изменение, ~/Library/Preferences/com.apple.LaunchServices.plistкогда вы измените все :

введите описание изображения здесь

(«Тест» - это имя, которое я дал своему приложению Automator)

Даниэль Бек
источник
Спасибо. Я повернул его, но я пытаюсь открыть приложение, созданное Automator, оно просто говорит, что в действии «Выполнить сценарий оболочки» произошла ошибка. Проверьте свойства действия и попробуйте снова запустить рабочий процесс. Что является наименее полезным сообщением об ошибке, которое я видел в течение некоторого времени!
Богатые
@Rich Работает ли он со сценарием по умолчанию в действии сценария запуска оболочки? Или даже не тогда? Вы помните, чтобы изменить настройки ввода прохода ? Вы пытаетесь дважды щелкнуть свое приложение, перетащить файлы в свое приложение или только открыть связанный файл? Что произойдет, если вы начнете это другими способами?
Даниэль Бек
Спасибо. Не уверен, как вы увидите вывод по умолчанию, так как он просто вызывает cat, но кажется, что это не ошибка. Вместо того, чтобы приложение вызывало мой скрипт из нестандартного местоположения, я создал скрипт в / usr / local / bin и обнаружил, что если я пытаюсь его запустить, он жаловался на слишком большое количество уровней символьных ссылок (1 ?! ) Так что я просто скопировал сценарий туда, и теперь он, кажется, работает. Спасибо!
Богатые
1

Я следовал инструкциям Даниэля Бека с некоторыми изменениями и заставил это работать для файлов URL, которые я хотел открыть в Chrome (Firefox также будет работать) на Mac.

Сценарий, который я использовал:

sed 's/^URL=/URL=/' "$1" | grep -m 1 '^URL=' | sed 's/^URL=//' | tr -d '\r' | xargs open -a "Google Chrome"

Это анализирует строку URL = из типичного файла URL, который выглядит следующим образом:

[InternetShortcut]
URL=http://www.docircuits.com/pricing
IDList=
HotKey=0
IconFile=O:\Apps\Firefox\Data\profile\shortcutCache\4t0JW4mY1qRPhiYz1fY3dw==.ico
IconIndex=0

Сохраните скрипт Automator где-нибудь, например, в каталоге ~ / Library Я назвал мой OpenUrl.app.

Теперь перейдите к URL-файлу и откройте всплывающее окно «Информация». Измените команду Open With на ваш скрипт OpenUrl.app. Протестируйте его одним нажатием или нажмите «Изменить все ...». Первый раз, когда я нажал, что это выдало ошибку, но, похоже, сработало во второй раз.

При разработке этого я получил ошибки «Run Shell Script», но это было из-за реальных ошибок в скрипте. Я думаю, что ключевая проблема скрипта Дэниела в том, что он не обрабатывает пробелы в имени файла, который вы пытаетесь открыть.

Кит Олсон
источник
-1

Используйте reattach-to-user-namespace, из репо или с brew install reattach-to-user-namespace. Это работает в Сьерре, я не уверен насчет других ОС.

После установки используйте его в скрипте bash примерно так:

присоединение к пространству имен пользователя open a_cool_file.png

wickedchicken
источник
Это не похоже на ответ на вопрос. ОП хочет использовать функцию Finder «Открыть с помощью», чтобы открыть файл с помощью скрипта Bash. Поддержка буфера обмена в Tmux и Screen не помогает, тем более, что нет никаких признаков того, что Tmux или Screen даже задействованы.
8bittree