Bash
如何使用提供的參數使用空格 hack 製作別名尾隨
我有兩個別名
watchExpand
和l
. 我知道您可以通過放置一個尾隨空格來使 bash 擴展與別名一起使用,如下所示:alias watchExpand='watch '
l
別名為ls -larthiF --context
。所以當我輸入命令時watchExpand l
,它就像一個魅力。但是,如果我向
watchExpand
命令提供參數,例如watchExpand -n 1 l
我的
l
別名不再有效。如何在參數後獲得 bash 擴展?
這是我認為你要求的壞主意:
function watchExpand() { e="" for param in $@ do if alias $param >/dev/null 2>&1 then exp=$(alias $param | cut -d= -f2| sed -e s/^\'// -e s/\'\$//) e+=" $exp" else e+=" $param" fi done watch $e }
我用我的方式找出解決方案。
首先,如果我願意,我創建了一個名為“addExpand”的函式來更容易地添加別名/函式。
xb@dnxb:/tmp/t$ type -a addExpand addExpand is a function addExpand () { echo -e "#!/bin/bash\nshopt -s expand_aliases\n. ~/.bash_aliases 2>/dev/null\n$1"' "$@"' | sudo tee /usr/bin/e_"$1"; sudo chmod +x /usr/bin/e_"$1" } xb@dnxb:/tmp/t$ addExpand l #!/bin/bash shopt -s expand_aliases . ~/.bash_aliases 2>/dev/null l "$@"
在我執行之後
addExpand l
,別名l
將創建為一個名為**/usr/bin/e_l**的執行檔,其內容如下:xb@dnxb:/tmp/t$ cat /usr/bin/e_l #!/bin/bash shopt -s expand_aliases . ~/.bash_aliases 2>/dev/null l "$@"
現在享受使用別名/函式的擴展版本:
xb@dnxb:/tmp/t$ watch --color -n 1 e_l /tmp //works like a charm !!! xb@dnxb:/tmp/t$
筆記:
$$ 1 $$
e_l
, 前綴 ’e_’ 表示它是命令的擴展版本。 $$ 2 $$如果使用watch -n 1
. 我可能需要找到解決這個問題的方法。 $$ 3 $$另一個缺點是它不能遞歸地解析別名。