我有一个应该检查用户是否定义了函数的bash脚本,如果没有函数存在,将定义函数在其~/.bashrc
文件。我简化了代码的显示目的。下面是该脚本:无法检测是否从脚本定义了shell函数
#!/bin/bash
brc="$HOME/.bashrc"
exists=false
# check if the function exists
if [ -n "$(type -t cs)" ] && [ "$(type -t cs)" = function ]; then
exists=true
fi
if [ "$exists" = false ]; then
echo "true"
else
echo "false"
fi
通过大量的测试echo
,我已经想通了,不管叫cs
功能是否存在对我来说,第一个条件语句始终计算为false
。奇怪的是,当我将这些行直接复制并粘贴到我的shell中而没有运行脚本时,该行的计算结果为true
!请帮忙。
'bash -x yourscript'是你的朋友在这里。 –
...说,函数不会从父进程继承,除非您导出它们,所以当您运行脚本时,它无法知道哪些函数在交互式shell中定义或未定义。 –
但是,然后OP在'.bashrc'中定义了这个函数,并且它应该在_sourcing_上对脚本可用? – Inian