我一直在寻找将clear和ls合并成一个命令的方法。现在我定义了命令x:
alias x="clear;ls"
现在是否有任何方法来避免递归并定义:
alias ls='clear;ls'
lyr7nygr1#
如果您在命令名前加上反斜杠,将禁用所有别名。
alias ls='clear;\ls'
或者,就像Arnaud说的,只使用ls的完整路径。
sg2wtvxw2#
另一种方法是
alias ls='clear; command ls'
这与/usr/bin/ls不同,因为它仍然在$PATH中搜索ls,但会忽略shell函数或别名。
/usr/bin/ls
$PATH
ls
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
62lalag44#
只要做:
alias ls='clear;/usr/bin/ls'
键入时:
$ ls
首先,它将搜索一个用户定义的函数,它将启动它,否则在$PATH命令中搜索。通过给出ls命令的显式路径,可以避免递归。
3duebb1j5#
我总是使用带有--color=auto参数(-G Enable colorized output.)的ls,并且喜欢使用函数。
--color=auto
-G Enable colorized output.
clear_and_ls() { clear command ls --color=auto } alias ls="clear_and_ls"
5条答案
按热度按时间lyr7nygr1#
如果您在命令名前加上反斜杠,将禁用所有别名。
或者,就像Arnaud说的,只使用ls的完整路径。
sg2wtvxw2#
另一种方法是
这与
/usr/bin/ls
不同,因为它仍然在$PATH
中搜索ls
,但会忽略shell函数或别名。yc0p9oo03#
别名中没有直接递归。来自man bash:
对替换文本的第一个单词进行别名测试,但与正在扩展的别名相同的单词不会进行第二次扩展。例如,这意味着可以将ls别名为ls-F,而bash不会尝试递归地扩展替换文本。
但是,您还可以注意到:
每个简单命令的第一个字如果没有加引号,则检查它是否有别名。如果是,则该单词将被别名的文本替换。
62lalag44#
只要做:
键入时:
首先,它将搜索一个用户定义的函数,它将启动它,否则在$PATH命令中搜索。
通过给出
ls
命令的显式路径,可以避免递归。3duebb1j5#
我总是使用带有
--color=auto
参数(-G Enable colorized output.
)的ls
,并且喜欢使用函数。