fzfを使用してさまざまな仮想環境を選択して有効にします。ただし、次のエラーが発生します。
xargs: source: No such file or directory
私のコマンドは3つの部分で構成されています。find | fzf | xargs
(1)マイ仮想環境を見つけるためのfind、
(2)仮想環境を選択するためのfzf、
(3)source
選択したファイルのxargs。
完全なコマンドは次のとおりです。
find ~/.virtualenvs/ -maxdepth 1 -type d | fzf | xargs -I {} source {}/bin/activate
xargs: source: No such file or directory
ファイルを直接インポートできます(つまり、コマンドプロンプトにfzf_delete仮想環境に入ることが表示されます)。
brian:~$ source /home/brian/.virtualenvs/fzf_delete/bin/activate
(fzf_delete) brian:~$
fzf を使用して仮想環境を選択できます。
find ~/.virtualenvs/ -maxdepth 1 -type d | fzf
/home/brian/.virtualenvs/fzf_delete
また、findとfzfの依存関係を排除し、問題をxargsとして分離しました。
echo "/home/brian/.virtualenvs/fzf_delete" | xargs -I {} source {}/bin/activate
xargs: source: No such file or directory
私は変数、文字列連結、コマンド置換、bash -c、そして私が考えることができる方法を使ってさまざまな引用を試しましたが、役に立ちませんでした。
選択したファイルのソースを取得するためにxargsをどのように取得しますか?
PS - ファイル名にスペースが含まれている場合は、find、fzf、およびxargsでnull終了を使用する必要があることを知っていますが、これはすぐに問題が発生しないようです。
答え1
source
シェル組み込みコマンドです。現在シェルを変更できないため、xargs
runは使用できません。xargs
つまり、同様の操作を実行しても、次の... | xargs -I {} sh -c 'source {}/bin/activate'
理由で役に立ちません。
- 現在のシェルはxargsを生成します。
- xargsは新しいシェルを作成します
- ファイルをインポートする新しいシェル
- 新しいシェル終了
- xargs 終了
環境を変更せずに始めた場所に戻りました。
一方、これは機能します:
source "$(find ~/.virtualenvs/ -maxdepth 1 -type d -print0 | fzf --read0)"/bin/activate
使用できないのとxargs
同じ理由で、シェルスクリプトを介して上記のコマンドを実行できません。つまり、$HOME/bin/select-venv
このコマンドを使用して作成して実行可能にすると、サブシェルで生成されるため機能しません。
あなたできるただし、select_venv
現在のシェルで関数またはエイリアスを作成します。