Предполагая, что у вас уже есть нужные цвета в одном из ваших профилей терминала, вот что я придумал (с некоторой помощью из ответа Юхи и из этого ответа Serverfault ).
Обновление:
Если подумать, я думаю, что это echo
дело слишком сложное. Оказывается, вы можете использовать osascript
для создания исполняемого файла AppleScript со строкой Шебанга:
#!/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.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 - "$@" > /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, чье имя = "elvis". Неверный индекс. (-1719)
Вызов немного хакерский, и, возможно, его можно было бы улучшить, если бы я потратил время на изучение getopt
(например, что-то вроде term.sh -p profile -e command
было бы лучше и, например, позволило бы вам легко открыть новый терминал в указанный профиль без вызова команды). И я также не удивлюсь, если есть способы облажаться со сложным цитированием. Но это работает для большинства целей.