Как открыть команду xterm -e, сохранив уже объявленные функции?

Я хотел бы запустить следующую команду:

$ testfunction (){ echo 123;}
$ xterm -hold -e "testfunction"

возвращает: команда testfunction не найдена (в новом окне xterm).

но когда я вызываю функцию в главном терминале, она возвращает 123

$ testfunction
123

Пытался

В declare -F | grep testfunction я вижу, что функция объявлена.

Пытался объявить только переменную:

$ variable='123'
$ xterm -hold -e "echo $variable"

возвращает: 123 (в новом xterm).

Почему новый открытый xterm не находит объявленные функции, но находит объявленные переменные?


person Sunfloro    schedule 01.05.2019    source источник


Ответы (1)


Вам нужно экспортировать функции/переменные, чтобы позволить дочерним процессам получить к ним доступ.

testfunction() { echo 123; }
export -f testfunction
xterm -hold -e "testfunction"

результат

И xterm -hold -e "echo $variable" на самом деле не работает, это только так выглядит. $variable находится в двойных кавычках и поэтому раскрывается перед вызовом xterm, т.е. его значение передается в xterm, xterm -hold -e 'echo $variable' не будет работать, так как variable не экспортируется.

person oguz ismail    schedule 01.05.2019
comment
Также стоит отметить, что xterm -e "echo $variable" создает угрозу безопасности. Если variable='$(rm -rf ~)', у того, кто запустит эту команду, будет очень, очень плохой день; тогда как export variable, а затем запуск xterm -e 'echo "$variable"' безопасен. - person Charles Duffy; 01.05.2019
comment
Вы знаете, почему он распознает переменные, даже если я их не экспортирую? - person Sunfloro; 01.05.2019
comment
Извините за редактирование, я где-то дважды щелкаю, и появляется изображение, и я сохраняю по ошибке... щелкаю слишком быстро - person Sunfloro; 01.05.2019
comment
Теперь понимаю. Еще раз спасибо! - person Sunfloro; 01.05.2019
comment
Нет, это идеально, моя страница загружалась медленно, а затем я дважды щелкнул ее, и она появилась при редактировании, затем я подумал, что по ошибке распечатал область экрана и добавил ее. Извиняюсь. - person Sunfloro; 01.05.2019