我正在编写一个包装脚本来包装另一个命令的执行;在这种情况下是 Chefkitchen
命令。我的脚本也将被调用kitchen
并更早地放入,$PATH
以便kitchen
从 bash 运行将运行我的包装脚本。
问题是:我如何调用原始版本kitchen
?当然,最明显的方法就是给出完整路径——只需放入/usr/bin/kitchen
脚本中,但其他人可能会将其安装在不同的路径中。当然,这排除了任何其他包装脚本——如果解决方案是可堆叠的,那就太好了。
我想到了两种方法,两种方法都在同一主题上:
- 在脚本中,通过
$PATH
. 将每个条目与$(dirname "$0")
使用stat
设备号和 inode 号进行比较,以查看其是否为同一目录。如果是这样,请将其从$PATH
. 然后可以调用kitchen
,因为它不应该重新调用包装脚本。 - 与 #1 类似,但
$PATH
在脚本中手动进行查找,并stat
在每个结果与$0
. 继续跳过,直到我们找到自己,然后使用找到的下一个。如果我们永远找不到自己,那么只需正常执行它(以处理包装器不在$PATH
但通过提供路径执行的情况)
有没有更好的办法?或者在典型的 Debian 或 Ubuntu Linux 系统上是否已经存在执行此操作的代码?
我过去做过几次类似的事情,我要做的就是
command kitchen
在脚本中使用,将其命名为其他名称my-kitchen
,然后创建一个别名:alias kitchen=/path/to/my-kitchen
不确定这是否适用于您的用例。
您可以使用反斜杠对别名进行转义,以防止其被 shell 扩展。
command
也有效。我的桌面上没有
kitchen
,所以我将通过别名pwd
来演示uname -r
:听起来你想执行下一个
kitchen
in$PATH
。