簡體   English   中英

bash函數與別名沖突

[英]bash function conflict with alias

如何在bash腳本文件中定義相同名稱函數之前檢測別名(此文件將在另一個腳本中獲取)?

像bash中的元編程一樣(如果這個名稱已被別名占用,則定義另一個名稱函數?)

$ source t.sh
$ alert 'test'
test
$ type alert
alert is a function
alert () 
{ 
    echo -n "$@"
}

$ alias alert='notify-send --urgency=low -i error'
$ source t.sh
bash: t.sh: line 1: syntax error near unexpected token `('
bash: t.sh: line 1: `alert() { echo "$@"; }'
$ type alert
alert is aliased to `notify-send --urgency=low -i error'

$ cat t.sh
alert() { echo "$@"; }

你不需要。 默認情況下,別名不會在非交互式shell中展開。

if alias alert 2> /dev/null; then
    echo "'alert' already an alias"
else
    source t.sh
fi

如果alias命令的單個參數不是別名,則該命令以非零狀態存在。

好吧,如果name是別名,那么which <name>返回0。

因此,要檢查是否已使用custom_name您可以執行以下操作:

if [ $(which custom_name >/dev/null; echo $?) -eq 0 ]
then
    echo "Already aliased"
    return 1
else
    echo "Free to use"
    return 0
fi

注意:這不會檢查當前shell中是否存在名為custom_name的bash函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM