フルパスを使用せずにターミナルから特定のプログラムを実行することはできません


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。これは外部プログラムなので、シェルのエイリアスについてはわかりません。
Barmar

コマンドで仕事にReceipe:使用PATHではなく、aliastypeいうよりwhich
dan

回答:


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必要なのはこれだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.