BASH - 别名调用另一个别名或别名调用自身或递归别名

BASH - alias calling another alias OR alias calling itself OR a recursive alias

在这里找到另一个post,我们可以在另一个别名中引用一个别名。

例如:以下两个别名都有效!

[gigauser@somenode01_new ~]$ alias cls="clear; ll"
[gigauser@somenode01_new ~]$ alias ccls='cd; cls'

[gigauser@somenode01_new ~]$ cls
total 12
-rw-r-----. 1 gigauser gigauser 879 Mar 30 22:24 aks1.txt
-rw-r-----. 1 gigauser gigauser 879 Mar 30 22:25 aks2.txt
-rwxr-x---. 1 gigauser gigauser 854 May  5 21:19 new-artifactory-license.json
drwxr-x---. 6 gigauser gigauser  64 Mar 30 21:21 tokens
[gigauser@somenode01_new ~]$ cd /tmp
[gigauser@somenode01_new tmp]$ pwd
/tmp

[gigauser@somenode01_new tmp]$ ccls
total 12
-rw-r-----. 1 gigauser gigauser 879 Mar 30 22:24 aks1.txt
-rw-r-----. 1 gigauser gigauser 879 Mar 30 22:25 aks2.txt
-rwxr-x---. 1 gigauser gigauser 854 May  5 21:19 new-artifactory-license.json
drwxr-x---. 6 gigauser gigauser  64 Mar 30 21:21 tokens
[gigauser@somenode01_new ~]$ pwd
/home/gigauser

类似地,我为自己创建了 2 个别名。

第一个,等我按 ^C(打破循环),第二个,只使用几个 docker 命令并吐出它的预期输出。

alias dkm='while true; do echo -e "\n-- `date`: Waiting for the $USER to come back."; sleep 900; done'

alias dstuff='sudo docker ps -a; echo; sudo docker image ls;echo; sudo docker volume ls; echo;'

上面的别名当运行给我时:

dkm

-- Wed May 12 20:34:42 UTC 2021: Waiting for the gigauser to come back.

dstuff

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                                           NAMES
48c872e58b9b        artifactory-pro:latest   "/opt/giga/artifactor…"   2 days ago          Up 39 minutes       0.0.0.0:8081->8081/tcp                                          artifactory
cccb871ba620        postgresql:latest        "/usr/local/pgsql/po…"   2 days ago          Up 39 minutes       5432/tcp                                                        artifactorydb

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgresql          latest              b1bdb78f4bcc        12 months ago       300MB
artifactory-pro     latest              3e51966e3d56        12 months ago       800MB

DRIVER              VOLUME NAME
local               artifactory-data
local               artifactorydb-data

但是,为什么以下别名不起作用,当我想使用上面的 2 别名 :

创建另一个别名 dsc
alias dsc='dstuff; dkm'

运行 dsc 给我:

-bash: syntax error near unexpected token `;'

此外,我想知道别名是否可以引用自身,即这可能吗?

alias dsc='dstuff; dkm; dsc'

基本上,我正在尝试查看别名是否可以调用自身并向我显示 dstuff 输出,然后等待一段时间(又名 dkm 不要杀了我命令)然后它调用再次自己。是的,我也可以 while :; do an_alias; done 但很好奇这(别名调用自身,即 递归别名 )是否可行。

dstuff 别名以 ; 结尾,因此当 dsc 展开时,您会在末尾得到 echo;; dkm。 Shell 语法不允许连续出现两个 ;

去掉 dstuff 别名末尾的 ;