Вопрос или проблема
Я работаю над проектом, который позволит мне открывать и закрывать различные заранее сохраненные комбинации URL в разных окнах браузера. Поскольку osascript/AppleScript или как бы их ни называли сейчас, находится на borrowed time, я хотел сделать это с помощью bash или чего-то более долговечного.
Но у меня возникли проблемы с тем, чтобы просто открыть новое окно в Safari. Что я хочу сделать, так это чтобы скрипт открыл новое окно Safari с URL в качестве адреса первой вкладки. Это невозможно сделать с помощью bash? Я пробовал несколько вариантов, и ни один из них не сработал:
Все, что я нашел на данный момент, говорит, что можно открыть окно Safari с помощью open -a Safari
, но это просто переключает на уже открытое окно Safari.
Когда я добавляю параметр URL, например open -a Safari https://www.google.com
, он переключается на текущее открытое окно Safari и открывает новую вкладку с URL.
Когда я использую флаг -n
, например open -n -a Safari https://www.google.com
, он обновляет все уже открытые вкладки окна Safari и открывает новую вкладку с URL. Я в замешательстве, почему это не работает, поскольку вот описание в man:
-n, --new Открыть новый экземпляр приложения, даже если один уже запущен.
Надеюсь, кто-то сможет помочь мне разобраться с этим. Это просто невозможно сделать с помощью bash? Или даже если это возможно, стоит ли это делать с помощью osascript, несмотря на то, что он больше не поддерживается? Я был бы признателен за любую помощь/мысли/направление в другие более подходящие фреймворки для этого.
Если просто использовать команду open
, Safari откроет ваш URL в новой вкладке или новом окне, в зависимости от предпочтений конечного пользователя. Вы можете протестировать различные способы работы в Safari, открыв Настройки > Вкладки и поиграв с параметрами открытия страниц во вкладках вместо окон.
AppleScript и osascript являются вашими единственными вариантами для управления тем, открывает ли Safari URL в новых вкладках или новых окнах, и Apple по-прежнему активно их поддерживает. (Я бы не стал верить спекуляциям о том, что AppleScript исчезнет, не имея прочных доказательств, которые могут поступить лишь от Apple.) Это не то, что можно сделать только с помощью bash.
Это откроет новую вкладку в переднем окне Safari с вашим URL или откроет новое окно Safari, если оно не существует:
#!/bin/zsh
/usr/bin/osascript -e 'tell application "Safari" to get front document'
if [[ "$?" -eq 0 ]]; then
# открыть URL в новой вкладке окна Safari, если оно существует
/usr/bin/osascript -e 'tell application "Safari" to make new tab with properties {URL: "https://www.apple.com"} at front window'
else
# открыть URL в новом окне Safari
/usr/bin/osascript -e 'tell application "Safari" to make new document with properties {URL: "https://www.apple.com"}'
fi
Вы можете использовать вторую команду osascript отдельно, чтобы всегда открывать ваш URL в новом окне Safari.
Вы не хотите использовать open -n
, потому что это буквально открывает новое приложение Safari, а не использует то, которое уже запущено. Когда вы это делаете, вы заметите две копии Safari, работающие в вашем док-меню или переключателе приложений.
Ответ или решение
Чтобы открыть новое окно Safari с помощью bash, нельзя обойтись только командами bash, так как для управления приложением Safari требуется использование AppleScript (или osascript). Рассмотрим, как это можно сделать, используя osascript в сочетании с bash.
Для вашей задачи, где нужно открыть новое окно Safari с заданным URL, можно использовать следующий скрипт:
#!/bin/zsh
# Проверяем, запущен ли Safari
/usr/bin/osascript -e 'tell application "Safari" to get front document'
if [[ "$?" -eq 0 ]]; then
# Если Safari уже запущен, открываем новый таб в текущем окне
/usr/bin/osascript -e 'tell application "Safari" to make new tab with properties {URL: "https://www.apple.com"} at front window'
else
# Если Safari не запущен, открываем его с новым окном и заданным URL
/usr/bin/osascript -e 'tell application "Safari" to make new document with properties {URL: "https://www.apple.com"}'
fi
Пояснение к скрипту:
-
Проверка запуска Safari:
- Сначала мы проверяем, запущен ли Safari, с помощью команды
osascript -e 'tell application "Safari" to get front document'
. Если Safari запущен, код вернёт 0.
- Сначала мы проверяем, запущен ли Safari, с помощью команды
-
Открытие нового таба:
- Если Safari уже запущен, выполняется команда
make new tab
, что откроет новый таб с указанным URL в текущем окне Safari.
- Если Safari уже запущен, выполняется команда
-
Открытие нового окна:
- Если Safari не запущен, используется команда
make new document
, которая откроет новое окно Safari с заданным URL.
- Если Safari не запущен, используется команда
Замечание:
-
Использование флага
-n
с командойopen -a Safari
создаёт новое приложение Safari, а не новое окно в текущем приложении. Таким образом, при многократном использовании этой команды может возникнуть несколько экземпляров приложения, что не является желаемым поведением. -
AppleScript является надёжным методом для автоматизации таких задач в Safari, и на данный момент это всё ещё поддерживаемый способ работы с приложениями macOS. Не стоит бесконечно беспокоиться касательно его «срока службы», пока Apple не сделает официальных заявлений о прекращении его поддержки.
Этот подход даст вам возможность открывать новые окна Safari с выбранными URL-адресами, сохраняя мощь и гибкость bash для ваших остальной логики программирования.