linux 如何在不更改用法的情况下扩展命令

8xiog9wr  于 2022-12-11  发布在  Linux
关注(0)|答案(2)|浏览(129)

我有一个由第三方提供的全局NPM包,用于生成报告并将其发送到服务器。

in_report generate -date 20221211

并且我想让一组用户能够检查报表是否生成,以防止重复。因此,我想在执行in_report命令之前运行一个sh脚本。

sh check.sh && in_report generate -date 20221211

但问题是我不想改变他们如何生成报告的命令。我可以在他们的PC上做一个补丁(能够改变env路径等)。
是否可以通过运行in_report generate -date 20221211来运行sh check.sh && in_report generate -date 20221211

bvjveswy

bvjveswy1#

如果此“in_report”仅用于此目的,则可以通过在需要运行in_report的用户所使用的“.bashrc”或“.bash_aliases”文件的末尾放置以下行来创建别名:
alias in_report='sh check.sh && in_report'
有关详细信息,请参阅https://doc.ubuntu-fr.org/alias
如果in_report也要以其他方式使用,这不是解决方案。在这种情况下,如果参数上的特定条件集匹配,您可能需要在www.example.com中直接调用它check.sh。为此,请执行以下操作:
alias in_report='sh check.sh'
www.example.com的内容check.sh:

#!/bin/sh

if [[ $# -eq 3 && "$1" == "generate" && "$2" == "-date" && "$3" == "20"* ]] # Assuming that all you dates must be in the 21st century
then
    if [[ some test to check that the report has not been generated yet ]] 
    then
        /full/path/to/the/actual/in_report "$@" # WARNING : be sure that nobody will move the actual in_report to another path
    else
        echo "This report already exists"
    fi
else
    /full/path/to/the/actual/in_report "$@"
fi

这当然不是理想的,但是应该可以用,但是到目前为止最简单和最可靠的解决方案是忽略别名的问题,告诉那些使用in_report的人运行你的check.sh(使用与他们运行in_report时相同的参数),然后你可以直接调用in_report而不是/full/path/to/the/actual/in_report。
抱歉,我不是很清楚。如果是这样的话,请随便问。

nzrxty8p

nzrxty8p2#

在大多数现代Linux发行版上,最简单的方法是放置一个shell脚本,该脚本在/etc/profile.d中定义一个函数,例如,/etc/profile.d/my_report的内容为

function in_report() { sh check.sh && /path/to/in_report $*; }

这样,当用户登录时,它会自动放置在用户环境中。
/path/to非常重要,因此函数不会递归调用自身。
粗略浏览一下Mac的doco,你可能想分别编辑/etc/bashrc/etc/zshrc

相关问题