无法通过哪个命令找到可执行的Unix脚本

时间:2016-03-07 19:54:56

标签: linux bash unix system-administration

我有一个由前队友编写的Unix bash脚本,必须在我的PATH中,但我无法通过人工检查找到它(见下文)。然而,只要输入

,我就可以在任何地方执行它
$ my_script

我想查看和编辑此脚本。但是,当我尝试通过which命令找到它时,我得到一个空白的响应。返回码表示错误:

$ which my_script
$ echo $?
1

然而,我可以运行脚本。我手动梳理了PATH并找不到它。老实说,20多年来我没有遇到过这样的事情。除which之外还有其他命令,和/或隐藏这样的脚本的方式吗?

3 个答案:

答案 0 :(得分:3)

要确定从shell调用的任何命令类型使用type builtin

在您的情况下,由于假定的脚本变成 shell函数,您会看到(假设bash):

$ type my_script  # Bash: option -t would output just 'function`
my_script is a function
my_script () 
{                
...               # The function's definition

从那里开始 - 您可以检查配置文件(例如~/.bash_profile)和/或初始化脚本(例如~/.bashrc)以确定函数的来源。

警告type输出的函数签名被归一化为<name> ()形式 - 即使您将函数定义为function <name>

bash中,您甚至可以直接找到 ,其中定义了给定的函数(帽子的尖端为this superuser.com answer和{{3鼓励我找到它并提出最简洁的形式):

$ (shopt -s extdebug; declare -F my_func)
my_func 112 /Users/jdoe/.bashrc   # sample output

112是指示脚本内的行号。

答案 1 :(得分:1)

尝试
1. type my_script

2. find / -name my_script -print

请注意,如果以普通用户身份运行此find,则会产生大量权限错误。您可以以root身份运行它以避免这种情况或将STDERR传递给/dev/null

答案 2 :(得分:1)

找到它。我要留下问题和答案,以防其他人遇到类似的情况。我将一个不同的答案标记为最终答案,因为它包含一些更有用的工具来查找我找到的内容(见下文)。

摘要

&#34;脚本&#34;实际上是一个bash函数,已写入源.文件。

详细

该帐户的.bashrc文件正在寻找另一个.文件:

. ~/.other-dot-file

其他.文件是名为my_script的bash函数。

function my_script {
....
}

由于这是源代码,因此可以从命令行执行该函数,模仿完整脚本的行为。没有其他代码可以调用此函数 - 它纯粹是指从命令行调用,就像它是一个脚本一样。

这种故意隐晦是作者不再与我们在一起的部分原因。