エイリアスで「/bin/bashコマンドが見つかりません」というエラーが発生するのはなぜですか?

エイリアスで「/bin/bashコマンドが見つかりません」というエラーが発生するのはなぜですか?

私はpython3、次のようにエイリアスを指定したいくつかのシルクヘビを使用していますpy

alias py="/opt/python3.4/bin/python3"

Pythonを実行したいvimので、次のように書いてください。

map <F9> :call SpecialCompileRun()<CR>
func! SpecialCompileRun()
    exec "w"
    if &filetype == 'python'
        exec '!time py %'                                                                                                                                                                               
    endif
endfunc

しかし、vimを押すと、次のF9メッセージが表示されます。

/bin/bash py cannot find command

pyに変更すると、python3今は動作しますが、まだ理由を知りたいです。

答え1

定義した方法はpyシェルエイリアスであり、Vimはシェルエイリアスについて知らなかったり、興味がないからです。代わりに、次のように環境変数を使用します。

$ PY=/opt/python3.4/bin/python3
$ export PY

それからVimで:

...
exec '!time ' . fnameescape($PY) . ' %'
...

編集する: に追加してくださいfnameescape()$PYVimに特別な意味を持つ文字(fi#と)が含まれている場合は%必須です。

答え2

@lcd047が言ったように、エイリアスは使用できませんvim。ただしexpand_aliases、オプションを有効にしないと、シェルスクリプトでも使用できません。

とにかく別のオプションは、エイリアスの代わりにリンクを作成することです。

sudo ln -s /opt/python3.4/bin/python3 /usr/bin/py

/usr/bin/pyこれにより、へのリンクが作成されます/opt/python3.4/bin/python3。では、コマンドは/usr/binどこでも使用できます。$PATHpy

関連情報