带有别名或函数的 Bash 自定义标志

带有别名或函数的 Bash 自定义标志

我想要的是能够为 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 "$@"

相关内容