我有一个由前队友编写的Unix bash脚本,必须在我的PATH
中,但我无法通过人工检查找到它(见下文)。然而,只要输入
$ my_script
我想查看和编辑此脚本。但是,当我尝试通过which
命令找到它时,我得到一个空白的响应。返回码表示错误:
$ which my_script
$ echo $?
1
然而,我可以运行脚本。我手动梳理了PATH
并找不到它。老实说,20多年来我没有遇到过这样的事情。除which
之外还有其他命令,和/或隐藏这样的脚本的方式吗?
答案 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 {
....
}
由于这是源代码,因此可以从命令行执行该函数,模仿完整脚本的行为。没有其他代码可以调用此函数 - 它纯粹是指从命令行调用,就像它是一个脚本一样。
这种故意隐晦是作者不再与我们在一起的部分原因。