在路径中找到没有“哪个”的文件?


12

我(以某种方式)能够运行脚本:

$ assemble.sh file
... [output]

which找不到它:

$ which assemble.sh
which: no assemble.sh in (/s/std/bin:/usr/afsws/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/stat/bin:/usr/X11R6/bin:.
  1. 这怎么可能?
  2. 我如何找到该文件在哪里?

我正在使用bash。


assemble.sh在当前目录中?
基思(Keith)

3
可能是一个愚蠢的问题,但它是一个别名(即不assemble.sh显示出来,当你键入命令 alias
詹姆斯麦克劳德

@JamesMcLeod很好的猜测!这是我的acme.sh(github.com/Neilpang/acme.sh)。安装后,创建了acme.sh别名,我想知道如何将acme.sh调用,尽管它不在PATH变量中。
rlib

Answers:


17

使用此命令: type assemble.sh

它可以在各种外壳中工作,并且仅显示第一个结果。


9
或者只是type assemble.sh,它是可移植的(仅显示第一个匹配项,而type -aksh / bash构造用于显示所有匹配项)。
吉尔(Gilles)“所以

6

或拆分路径,并在查找中使用它-第一个匹配项应为解决方案

find ${PATH//:/ } -maxdepth 1 -name assemble.sh -print -quit

type 当然更容易。


2
这是相当有用的。我不知道可以将$ PATH拆分为其子组件,并使用find
Ehtesh Choudhury

1
没有尝试,但是我想这可能会破坏PATH组件中的空格
nhed 2016年

4

您可能正在使用bash,但是which输出语法显示您使用的which是用csh编写的旧版本。PATH会显示在括号中,并且PATH中的目录具有类似/opt/SUNWspro/bin和的条目,/usr/ccs/bin这些条目仅在Solaris中才有意义。这是一致的:Solaris使用了csh which

这是我的猜测:bash有一个PATH,csh有另一个。这可能是系统问题。我记得,Solaris保留/ etc / profile和/ etc / cshrc文件用于系统范围的PATH设置。这两个初始化文件可能为不同的shell设置了不同的PATH变量。在bash下执行“ echo $ PATH”,看看它是否与which命令作为PATH字符串打印出来的内容一致。


4
command -v assemble.sh

信息

-v打印类似于内置的'type'的COMMAND描述

如果你想在PATH的修改版本,发现也将是有益的ASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed

0

您可以使用locate assemble.sh查找文件的位置。


不,这显示了名称包含的所有(世界范围内)可读文件的位置,assemble.sh此处与此处无关。
吉尔(Gilles)“所以,别再邪恶了”,

这一点都不无关紧要。即使他有多个像这样的文件,locate也会为他提供所需文件的位置。assemble.sh不是一个常见的文件名,因此他很可能会轻松找到该文件(这是OP所要求的)。
nico

1
您不是必须updatedblocate显示结果吗?
glenn jackman 2011年

1
通常,它updatedb是每天作为Cron作业运行的,但是,如果文件很新,则可能必须强制执行。
nico
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.