Как выполнить команду в окне iTerm из командной строки?

Как запустить сеанс iTerm из командной строки, передав команду, которая должна быть выполнена в окне iTerm?

Аналогом xterm является -e, т.е.

xterm -e sleep 10

person Mark Harrison    schedule 20.09.2015    source источник


Ответы (3)


Я согласен с Алексом, лучше всего использовать AppleScript.

Вот мой скрипт «iterm», который я chmod как исполняемый и храню в каталоге, который находится на моем пути. Я могу использовать это так:

Цитата из аргументов оболочки:

iterm "ls -l" 

Передайте несколько команд для запуска:

iterm "calculatesomthing" "exit"

Передайте несколько команд, разделенных точкой с запятой:

iterm "cd ~/mediaprojects; ./gitSyncAll; exit" 

Самозакрытый bash/Applescript:

#!/bin/bash
read -r -d '' script <<'EOF'
on run argv
tell application "iTerm"
    activate
    set myterm to (make new terminal)
    tell myterm
        launch session "Default"
        tell the last session
            repeat with arg in argv
               say arg
               write text arg
            end repeat
        end tell
    end tell
end tell
end run
EOF
echo "$script" | osascript ``-'' $@

К вашему сведению: вы можете удалить команду «говорить», я использую ее как удаленное / звуковое уведомление о каждом выполняемом cmd. Я передаю кучу cmds в несколько пользовательских профилей/оболочек iTerm, которые отображаются на большом плоском экране, чтобы показать статус сложного развертывания Azure с несколькими контроллерами домена...

PS: я добавил суть, поскольку кавычки в последней строке скрипта не были правильно вырезаны/вставлены для кого-то @ https://gist.github.com/sushihangover/7563e1707e98cdf2b285

person SushiHangover    schedule 20.09.2015
comment
Я получаю сообщение об ошибке: 78:86: ошибка выполнения: переменная terminal не определена. (-2753). Я использую iterm2. Любой совет? - person Leo Ufimtsev; 18.07.2019

Я нашел официальную документацию, но не додумался дополнить Applescript osascript как SushiHangover - очень приятно. Его ответ не сработал для меня, вероятно, потому, что я использую последнюю бета-версию 3.0, поэтому вот та, которая работает (и также немного упрощает).

#!/bin/bash
osascript - "$@" <<EOF
on run argv
tell application "iTerm"
    activate
    set new_term to (create window with default profile)
    tell new_term
        tell the current session
            repeat with arg in argv
               write text arg
            end repeat
        end tell
    end tell
end tell
end run
EOF
person SamG    schedule 13.06.2016
comment
Спасибо. Основываясь на вашем ответе, я написал скрипт для записи текста в текущий сеанс. gist.github.com/LeoUfimtsev/82e7e827b6bfb1000f422a98f2008cc3 - person Leo Ufimtsev; 18.07.2019

Для этого лучше всего использовать Applescript. В iTerm2 есть несколько примеров скриптов. Документация немного дрянная, но эти примеры должны дать вам представление о том, с чего начать.

Вы можете обернуть строку Applescript в сценарий bash, а затем запустить его, используя osascript:

#~/bin/bash
tell application "iTerm"
    # etc...
    exec command "$@"

Затем запустить скрипт так же просто, как:

./run-in-iterm.sh "echo 'hello world'"
person Alex    schedule 20.09.2015
comment
Я согласен, AppleScript - это то, что нужно, я добавил ответ с самозамкнутым сценарием bash/AppleScript, который я использую. - person SushiHangover; 20.09.2015
comment
Спасибо, вот примеры для последней версии iTerm2: iterm2.com/documentation-scripting.html - person abumalick; 03.06.2018