我想要的是能够为 bash 命令/别名定义自定义标志。例如,我有:
alias ll='ls -Alh'
alias la='ls -A'
alias l='ls -lh'
但是,我想设置一个自定义标志,例如 -d,ls -d */
每当我运行上述命令时它也会执行,因此ll -f
它只会在详细列表中列出隐藏目录。
答案1
我不太确定你最后一句话想要什么,抱歉;)
我假设您想要ll
具有以下功能ls -Alh
除了当它被调用时ll -f
- 在这种情况下它应该只列出隐藏目录。如果这不是您想要的,那么调整应该相对容易。只需添加对命令具有特殊含义的所有标志getopts
,然后为每个标志编写一个案例。默认情况应该始终是break
,这样如果您传递的标志对您的函数没有特殊含义,那么ls -Alh
就会被执行。
无论如何,这里有一个脚本,您可以获取它来定义一个名为的函数ll
(别名不能强大地执行您想要的操作)。你必须来源,即source <script>
脚本,因此函数被定义。unalias ll
在获取脚本之前要小心,否则可能会发生意想不到的事情。
#!/usr/bin/env bash
ll() {
while getopts ":f" opt; do
case $opt in
f)
command ls -Ald .*/
return 0
;;
\?)
break;
esac
done
command ls -Alh "$@"
}
这将导致ll -f
行为如下ls -Ald .*/
列出所有隐藏目录。如果你给出ll
一个标志不是 -f
它将默认调用ls -Alh "$@"
($@
简单地代表“所有参数”)。例如,如果你写ll -d Desktop
,ls -Alhd Desktop
就会被执行。如果没有标志传递给ll
,它将只执行ls -Alh "$@"
。