Вам необходимо экспортировать функции / переменные, чтобы позволить дочерним процессам получать к ним доступ.
testfunction() { echo 123; }
export -f testfunction
xterm -hold -e "testfunction"
![result](https://i.stack.imgur.com/dnzGG.png)
И, xterm -hold -e "echo $variable"
не работаетна самом деле, это выглядит так.$variable
находится в двойных кавычках и, следовательно, раскрывается перед вызовом xterm
, то есть его значение передается в xterm
, xterm -hold -e 'echo $variable'
не будет работать, поскольку variable
не экспортируется.