我有一個應該檢查用戶是否定義了函數的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