如何重载 Linux 命令

如何重载 Linux 命令

每次用户输入时git commit -a
我想要在自己的脚本中运行它,
然后运行原始命令git commit..并让它正常运行。

答案1

您可以使用“.git/hooks”来安装“预提交”钩子,也许: http://git-scm.com/book/en/Customizing-Git-Git-Hooks

这通常是你这样做的方式。当然,如果你能准确解释一下你想要“过载”做什么,那会很有帮助。

答案2

如果你希望你的“钩子”不仅限于此,git而且你需要让它与任何可执行文件一起工作,你可以使用alias

alias git='myhackyscript.sh'

那么myhackyscript.sh可能看起来像

#!/bin/bash

# save params
params=("$@")

# do what i want to do
do_something

# launch git 
git "${params[@]}"

myhackyscript.sh必须存储在$PATH类似/usr/bin/

答案3

你可以定义一个 shell 函数来调用自定义脚本,然后将内容传递给原始 git 命令:

git() {
  case $1 in
    commit)
      echo "WUFF"
      ;;
  esac
  \git "$@"
}

将此功能放入 shell 的 RC 文件之一(例如,~/.profile/etc/profilesh/bash/ksh shell 的情况下)将使其在下次登录后可用。当然,您可以获得比这更详细的信息。此外,您可能希望查看git-sh-setup(1)git-rev-parse(1)手册页,特别是关于的部分parseopt

答案4

如果您在位于之前ls的位置创建脚本,则会执行您的脚本。 ~/binpath/bin/ls

user@wopr /home/user/bin/: $ cat ls
#!/bin/bash

echo "Security Breached!"

# Run original command
/bin/ls "$@"

现在,列出文件时Security Breached!始终会显示该消息。

user@wopr /home/user/bin/: $ ls
Security Breached!
ls file.sh file myscript.sh

user@wopr /home/user/bin/: $ which ls
/home/user/bin/ls

您应该了解您的目录path以及谁有写入这些目录的权限。

相关内容