Откройте терминал gnome через скрипт bash, вызовите и выполните псевдоним команды

Откройте терминал gnome через скрипт bash, вызовите и выполните псевдоним команды

Я пытаюсь написать скрипт bash, который открывает новое окно терминала gnome и запускает псевдонимную команду. Я видел, что вместо использования псевдонимов правильным способом является использование функции. Я пробовал оба подхода, но не могу заставить их работать, так как получаю ошибку, что команда не распознана.

Вот что у меня есть.

#!/bin/bash

# Cluster related functions
function gateway () {
    ssh user@something -t ssh gateway
}

gnome-terminal --window-with-profile=Bash -- bash -c "gateway; bash;"

Я получаю следующую ошибку:

bash: gateway: command not found

решение1

Самое простое решение — экспортировать функцию перед вызовом gnome-terminal:

export -f gateway

Примечания:

  • Экспортировать псевдонимы нельзя.

  • Экспорт функций не является переносимой функцией. Она будет работать с bashпо bash.

  • Это будет работать, если новый bashявляется потомком старого bash(где функция была экспортирована). Например, если gnome-terminalнаследует от старого bash, а новый bashнаследует от gnome-terminal. Это происходит, когда старый bashзапускается в терминале, который не является gnome-terminal.

    Мои тесты показывают, что если gnome-terminalзапускается изнутри gnome-terminal(то есть среда содержит GNOME_TERMINAL_*переменные), то новый gnome-terminalпроцесс делегирует задачу уже запущенному gnome-terminalи завершается. Естественное наследование среды новым bashне может произойти, тем не менее новый gnome-terminalпроцесс достаточно умен, чтобы сообщать не только команду, но и среду. Таким образом, новый процесс bashвнутри старого gnome-terminalведет себя как потомок старого bash, экспортированная функция работает. Протестировано с gnome-terminal3.28.2.

Связанный контент