Ответ 1
Предполагая, что у вас уже есть цвета, которые вы хотите в одном из профилей терминалов, вот что я придумал (с некоторой помощью от ответа Juha и от этого ответа Serverfault).
Обновить:
По размышлению, я думаю, что этот echo
бизнес слишком сложный. Оказывается, вы можете использовать osascript
для создания исполняемого файла AppleScript со строкой shebang:
#!/usr/bin/osascript
on run argv
if length of argv is equal to 0
set command to ""
else
set command to item 1 of argv
end if
if length of argv is greater than 1
set profile to item 2 of argv
runWithProfile(command, profile)
else
runSimple(command)
end if
end run
on runSimple(command)
tell application "Terminal"
activate
set newTab to do script(command)
end tell
return newTab
end runSimple
on runWithProfile(command, profile)
set newTab to runSimple(command)
tell application "Terminal" to set current settings of newTab to (first settings set whose name is profile)
end runWithProfile
Сохраните это как term.scpt
, сделайте его исполняемым с помощью chmod +x
и используйте его так же, как term.scpt "emacs -nw" "Red Sands"
ниже, например term.scpt "emacs -nw" "Red Sands"
.
Оригинальный ответ:
Предполагая, что мы сохраним сценарий ниже как term.sh
...
#!/bin/sh
echo '
on run argv
if length of argv is equal to 0
set command to ""
else
set command to item 1 of argv
end if
if length of argv is greater than 1
set profile to item 2 of argv
runWithProfile(command, profile)
else
runSimple(command)
end if
end run
on runSimple(command)
tell application "Terminal"
activate
set newTab to do script(command)
end tell
return newTab
end runSimple
on runWithProfile(command, profile)
set newTab to runSimple(command)
tell application "Terminal" to set current settings of newTab to (first settings set whose name is profile)
end runWithProfile
' | osascript - "[email protected]" > /dev/null
... его можно вызвать следующим образом:
-
term.sh
- открывает новое окно терминала, ничего особенного
-
term.sh COMMAND
- открывает новое окно терминала, выполняя указанную команду. Команды с аргументами могут быть заключены в кавычки, например
term.sh "emacs -nw"
чтобы открыть новый терминал и запустить (без окон) emacs
- открывает новое окно терминала, выполняя указанную команду. Команды с аргументами могут быть заключены в кавычки, например
-
term.sh COMMAND PROFILE
- открывает новое окно терминала, выполняет указанную команду и устанавливает ее в указанный профиль. Профили с пробелами в именах могут быть заключены в кавычки, например
term.sh "emacs -nw" "Red Sands"
чтобы открыть новый терминал и запустить (без окон) emacs с профилем Red Sands.
- открывает новое окно терминала, выполняет указанную команду и устанавливает ее в указанный профиль. Профили с пробелами в именах могут быть заключены в кавычки, например
Если вы вызовете его с неправильным именем команды, он все равно откроет окно и настроит профиль, но вы получите сообщение об ошибке bash в новом окне.
Если вы вызываете его с неправильным именем профиля, окно все равно будет открыто, и команда все равно будет выполняться, но окно будет придерживаться профиля по умолчанию, и вы получите сообщение об ошибке (в stderr, где бы вы его не запустили) в соответствии с
525: 601: ошибка выполнения: терминал получил ошибку: не удалось установить настройки 1, чье имя = "Элвис". Недопустимый индекс. (-1719)
Вызов немного взломан и может быть улучшен, если я term.sh -p profile -e command
время на изучение getopt
(например, что-то вроде команды term.sh -p profile -e command
будет лучше и, например, позволит вам легко открыть новый терминал в указанном профиле без вызова команды). И я также не удивлюсь, если есть способы привить его сложным цитированием. Но это работает для большинства целей.