不使用完整路径就无法从终端运行一个特定程序


9

我想ds9从终端运行程序。该程序显然位于PATH中,该路径由我通过运行确定:

which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9

但是,当我通过键入运行命令时ds9,它显示了以下错误:

-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory

如果我按如下所示使用完整路径,仍然可以很好地执行它:

/Users/evgenii/miniconda3/envs/iraf/bin/ds9

这是怎么回事?为什么要运行/Applications/ds9.app

权限如下:

-rwxrwxr-x@ 1 evgenii  staff  18613852  9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9

更新:

这是运行type -a ds9命令的输出:

type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9

4
不要使用which。这是一个外部程序,因此它无法告知shell别名。
Barmar

重复使用命令:使用PATH而不是aliastype而不是which

Answers:


19

该命令显然是别名别名。首先,检查所有的比赛ds9PATH的环境变量,通过执行以下命令:

type -a ds9

根据您更新的问题,从type -a ds9命令的输出中可以明显看出,别名在实际命令中起了作用。

要通过忽略别名而不指定完整路径来执行实际命令,请\在命令前添加(反斜杠)字符。这将忽略任何bash定义的别名。

如果您不想每次都在命令前加反斜杠,请找出要在何处创建别名,然后删除别名,或使用实际命令覆盖别名。


1
ds9别名定义是最有可能的~/.bashrc,应该有被删除(因为这是一个坏方法,导致这类问题)。grep ds9 ~/.bashrc会确认。

4

我认为这是为问问者解决的,但是对于以后的读者,我想提及的是,对命令进行哈希处理然后删除文件的情况也可能是这样。(有关help hash信息,请参阅。)

type -a commandname不会告诉你,只会告诉你type commandname

在这种情况下,hash -d ds9将只需要所有这些。

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.