我有这个功能
function test { echo $1; }
我有这个sed表达式
echo "hello" | sed "s/hello/test world/e"
预期结果是
"world"
但是它给出了结果
sh: test: command not found
我的操作系统:linux fedora 20,sed(GNU sed)4.2.2。
有什么解决办法吗?
答案 0 :(得分:0)
Shell函数仅在当前Shell中可用。
不能通过sed
,env
,sudo
,find
或xargs
等外部命令来调用它们:
$ foo() { echo "hello world"; }
$ foo
hello world
$ sed -e 's/.*/foo/e'
sh: 1: foo: not found
$ env foo
env: ‘foo’: No such file or directory
如果要从这样的上下文中运行shell命令,请将它们放在单独的脚本中,以便可以调用它。
Bash支持将功能导出到子bash实例,但是特别是dash
会将它们从环境中剥离,因此即使调用sed
的{{1}}也不能使用它们,即使您最终运行了另一个bash实例。