首页 > 解决方案 > 如何打开 xterm -e 'command',保留已声明的函数?

问题描述

我想运行以下命令:

$ 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 没有找到声明的函数,但找到了声明的变量?

标签: linuxbashfunctionxterm

解决方案


您需要导出函数/变量以让子进程访问它们。

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

结果

而且,xterm -hold -e "echo $variable"实际上不起作用,它只是看起来像这样。$variable在双引号中,因此在调用之前扩展xterm,即它的值被传递给xtermxterm -hold -e 'echo $variable'因为variable没有导出,所以不起作用。


推荐阅读