我正在嘗試編寫一個bash函數,它只使用grep,awk,sed來打印出bash別名的文檔。如何創建一個bash函數來記錄bash別名
我想使用###作爲相關別名部分的文檔標題。
我想用##作爲一個文檔字符串的別名的描述
一個例子〜/ .bash_aliases文件看起來像這樣
### Docker
## List running containers
alias drc="docker ps -a | grep 'Up'"
## List IDs of running containers
alias didr="docker ps -aq | grep 'Up'"
## List IDs of stopped containers
alias dids="docker ps -aq | grep 'Exited' | awk '{print $1}'"
### Ansible
## Run ansible-playbook
alias ap='ansible-playbook'
## Run ansible-playbook on local host
alias apl='ansible-playbook -c local'
鑑於.bash_aliases文件上面我想創建一個名爲「別名」的bash函數,打印以下輸出
Docker
-------------------------------------------------
drc - List running containers
didr - List IDs of running containers
dids - List IDs of stopped containers
Ansible
-------------------------------------------------
ap - Run ansible-playbook
apl - Run ansible-playbook on local host
我想將「別名」功能放在我的.bash_aliases文件的頂部,以便在輸入.bash_aliases文件時,我可以運行「別名」來查看我的文檔。
我在這個線程的底部看到了一些東西 https://unix.stackexchange.com/questions/128736/how-to-document-my-custom-bash-functions-and-aliases 似乎接近解決方案。我一直在調整它一段時間,並做了大量的谷歌搜索,但我仍然努力獲得我想要的結果。
我將不勝感激任何幫助。謝謝!
UPDATE:
感謝來自埃德莫頓答案和解答這些問題
- Can you use heredocuments to embed AWK in a bash script?
- How to assign a heredoc value to a variable in Bash?
我能來解決方案。
下面是一個例子〜/ .bash_aliases現在文件
IFS='' read -r -d '' VAR <<'EOF'
sub(/^###[[:space:]]+/,"") {
printf "\n%s%s\n----------------------------------------------------------\n", rs, $0
rs = "\n\n"
}
sub(/^##[[:space:]]+/,"") {
desc = $0
}
$1 == "alias" && sub(/=.*/,"",$2) {
printf "%-10s - %s\n", $2, desc
}
EOF
function aliases() {
echo
grep -A10000 "^###" ~/code/bash_aliases/.bash_aliases | awk -f <(echo "$VAR")
echo
}
### Docker
## List running containers
alias drc='docker ps -a | grep 'Up''
## List IDs of running containers
alias didrc='docker ps -aq | grep "Up"'
## List IDs of stopped containers
alias dids='docker ps -aq | grep "Exited" | awk "{print $1}"'
### Ansible
## Run ansible-playbook
alias ap='ansible-playbook'
## Run ansible-playbook on local host
alias apl='ansible-playbook -c local'
運行
source ~/.bash_aliases
後,您可以運行
aliases
的別名記錄將顯示。
什麼是你的問題,你到目前爲止嘗試過什麼? – tripleee 2014-08-31 19:08:42
好的計劃。問題究竟是什麼? – jm666 2014-08-31 19:15:42
這是我第一次發佈在StackOverflow上。對不起,不清楚。下次我會問一個更具體的問題。 – maoja 2014-09-04 02:50:06