2

是否可以向现有的 Bash 命令添加选项?

例如,当我将 -foo 传递给特定命令(cp、mkdir、rm ...)时,我想运行一个 shell 脚本。

4

2 回答 2

5

您可以为例如cp调用一个检查您的特殊参数的特殊脚本创建一个别名,然后调用该特殊脚本:

$ alias cp="my-command-script cp $*"

脚本看起来像

#!/bin/sh

# Get the actual command to be called
command="$1"
shift

# To save the real arguments
arguments=""

# Check for "-foo"
for arg in $*
do
    case $arg in
    -foo)
        # TODO: Call your "foo" script"
        ;;
    *)
        arguments="$arguments $arg"
        ;;
esac
done

# Now call the actual command
$command $arguments
于 2012-11-01T10:20:26.740 回答
0

一些程序员花花公子的代码可能看起来很酷而且很有吸引力......但是对于大多数命令,您应该非常小心地使用它:https ://unix.stackexchange.com/questions/41571/what-is-the-difference-between-and

关于 $* 和 $@ 的使用:

您不应该使用其中任何一个,因为一旦您有包含空格或通配符的参数,它们就会意外中断。

我自己使用它至少几个月,直到我意识到这是我的 bash 代码有时不起作用的原因。

考虑更可靠,但不太容易且不太便携的选项。正如评论中指出的那样,重新编译原始命令并进行更改,即:

从一些受人尊敬的开发人员存储库下载 c/c++ 源代码:

在 c/c++ 中添加一些代码,用 gcc/g++ 编译。

另外,我想,您可以编辑bash本身以将其设置为检查作为命令传递给 bash 的字符串是否与某些模式匹配,不要执行此操作并执行某些不同的命令或 bash 脚本

如果你真的很喜欢为你的 shell 定制和添加功能的想法,也许可以看看其他一些很酷的时尚 shell,比如zshfish,也许他们有一些东西,我不知道。

于 2020-01-15T22:10:37.017 回答