Linux别名链命令(可以避免递归吗?)

tjvv9vkg  于 2023-06-29  发布在  Linux
关注(0)|答案(5)|浏览(101)

我一直在寻找将clear和ls合并成一个命令的方法。现在我定义了命令x:

alias x="clear;ls"

现在是否有任何方法来避免递归并定义:

alias ls='clear;ls'
lyr7nygr

lyr7nygr1#

如果您在命令名前加上反斜杠,将禁用所有别名。

alias ls='clear;\ls'

或者,就像Arnaud说的,只使用ls的完整路径。

sg2wtvxw

sg2wtvxw2#

另一种方法是

alias ls='clear; command ls'

这与/usr/bin/ls不同,因为它仍然在$PATH中搜索ls,但会忽略shell函数或别名。

yc0p9oo0

yc0p9oo03#

别名中没有直接递归。来自man bash:
对替换文本的第一个单词进行别名测试,但与正在扩展的别名相同的单词不会进行第二次扩展。例如,这意味着可以将ls别名为ls-F,而bash不会尝试递归地扩展替换文本。
但是,您还可以注意到:
每个简单命令的第一个字如果没有加引号,则检查它是否有别名。如果是,则该单词将被别名的文本替换。

$ pwd
/Users/myhomedir

$ alias ls="date;pwd"
$ ls
Fri Jun 23 16:34:00 PDT 2023
/Users/myhomedir

$ alias pwd='whoami'
$ ls
Fri Jun 23 16:35:00 PDT 2023
enzyme

$ alias ls="date;'pwd'"
$ ls
Fri Jun 23 16:35:38 PDT 2023
/Users/myhomedir
62lalag4

62lalag44#

只要做:

alias ls='clear;/usr/bin/ls'

键入时:

$ ls

首先,它将搜索一个用户定义的函数,它将启动它,否则在$PATH命令中搜索。
通过给出ls命令的显式路径,可以避免递归。

3duebb1j

3duebb1j5#

我总是使用带有--color=auto参数(-G Enable colorized output.)的ls,并且喜欢使用函数。

clear_and_ls() {
    clear
    command ls --color=auto
}

alias ls="clear_and_ls"

相关问题