例如,以下命令不起作用。我想知道如何解决它,谢谢。
[liuke@liuke-mbp ~]$ function showxx() { echo xx; }
[liuke@liuke-mbp ~]$ showxx
xx
[liuke@liuke-mbp ~]$ cat a.bash
#!/bin/bash
showxx
[liuke@liuke-mbp ~]$ ./a.bash
./a.bash: line 2: showxx: command not found
答案 0 :(得分:6)
您需要导出您的功能。您可以使用set -a
导出所有内容(我的偏好),也可以使用export -f showxx
单独导出这些功能。要么将它放入环境中,子弹就可以拾起它们。
答案 1 :(得分:3)
您必须定义要在本地流程的“范围”中显示的函数。
当您在命令行中输入一个函数时,它现在“生活”在终端shell的bash副本中。
当您启动脚本时,只有标有export
的变量才会显示在bash的新副本中作为终端的子运行。 (我们现在不会进入export
; - )。
要在脚本中获取该函数,必须在脚本中定义它。
cat a.bash
#!/bin/bash
function showxx() { echo xx; }
showxx
或者你可以把这个函数放在一个单独的文件中并'source'它(用'。'),就好像它在文件中一样,即
cat showxx.bfn
function showxx() { echo xx; }
cat a.bash
. showxx.bfn
showxx
扩展名.bfn只是我用来帮助记录文件内部的内容,比如bfn ='bash function'。
'。'是源命令。
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。
答案 2 :(得分:1)
使用前面的点和空格调用脚本。
. a.bash