我想为'ls'写一个别名命令,这样,如果我传入一个参数,则别名将使用它,但是如果我不这样做,则它将使用'*'。这是我今天的别名:
alias lsd='ls --color -lh | grep "^d" && ls --color -lh | grep -v "^d"
我的问题是,无论我为lsd
命令键入什么内容,我总是会在响应中获取所有文件。因此,当我输入时lsd *.sh
,我仍然会获得清单中的所有目录和文件。
我从另一个SuperUser帖子中复制了此别名,但还不太了解。
谢谢你的帮助。
更新:好的,现在我的.bashrc文件中定义了以下函数:
function lsd() {
if [[ -z $1 ]] ; then
command ls --color -lh | grep "^d" && ls --color -lh | grep -v "^d"
else
command ls --color -lh "$1" | grep "^d" && ls --color -lh "$1" | grep -v "^d"
fi
}
当我使用just运行它时lsd
,它可以按我的意愿工作。当我运行它时lsd *.wav
,我仍然在输出中得到目录名称,然后看到“二进制文件x.wav与输出匹配”。我究竟做错了什么?
如果不清楚,我将尝试列出目录,然后列出文件,但仅列出那些与命令中第一个参数匹配的文件。因此,当我输入时lsd *.wav
,我不希望看到目录,因为它们的名称不以.wav结尾。感谢您提供的所有帮助!:)
最后:没关系。我正在使用源.bashrc尝试更新bash,但这没有用,因此旧命令仍在运行。我关闭了ssh会话并重新登录,此新命令现在正在运行。谢谢大家!
别名不带参数。如果只想用短字符串替换长字符串,请使用别名。对于参数处理,请使用以下函数:
ls () {
if [[ -z $1 ]] ; then
command ls *
else
command ls "$@"
fi
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句