我有一个由前队友编写的 Unix bash 脚本,它必须在我的 PATH
中,但我无法通过手动检查找到它(见下文)。但是,我可以通过键入在任何地方执行它
$ my_script
我想查看和编辑这个脚本。但是,当我尝试通过 which
命令查找它时,我得到的是空白响应。返回码表示错误:
$ which my_script
$ echo $?
1
然而,我可以运行脚本。我手动梳理了我的PATH
,没找到。老实说,我已经 20 多年没有遇到过这样的事情了。除了 which
之外,还有其他命令和/或可以隐藏此类脚本的方法吗?
最佳答案
要确定可从 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 和 Charles Duffy 启发我找到它并提出最简洁的形式):
$ (shopt -s extdebug; declare -F my_func)
my_func 112 /Users/jdoe/.bashrc # sample output
112
是指示的脚本内的行号。
关于linux - 哪个命令找不到可执行的Unix脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35852780/