私が見た最新のディレクトリに対してファジー検索を実行し、時間を節約するための簡単な1行機能があります。
dirs | sed 'y/ /\n/' | fzf | xargs cd
2時間後に何が間違っているのかわかりません。)
次のエラーが発生し続けます。
/usr/bin/cd: line 4: cd: ~/Downloads/demo: No such file or directory
ディレクトリが存在しても、私が何をしても構いません。 CDには何の問題があり、なぜ動作しないのですか?
コメントありがとうございます。追加情報 関数の作成などの他のアプローチを試しました。
fdr() {
local dir
dir=`dirs | sed 'y/ /\n/' | fzf`
cd $dir
}
正しい値を使用してもdir
上記のエラーが発生します。
私の最後の機能
助けてくれてありがとう。サブシェルが私の頭の中で動作しており、これが私の最終的な答えです。少しハッキングされていましたが、今ではありません。
fdr() {
local dir
myusernmae=`whoami`
dir=`dirs | sed 'y/ /\n/' | sed "s/~/\/Users\/$myusernmae/g" | fzf +m`
cd "$dir"
}
答え1
これには3つの問題があります。
cd
~/Downloads/demo
正しいパスが/Users/snickers/Download/demo
。通常、
cd ~/Downloads/demo
コマンドラインに入力すると、シェルはコマンドを実行する前にチルダをホームディレクトリパスに展開しますcd
。変数拡張の前にチルダ拡張が発生するため、ここではこれは発生しません(「拡張間の順序を理解する方法は?")。bash
シェルを使用すると仮定すると、 を使用すると、フルパスをdirs -l
出力してこの問題を回避できます。dirs
cd
シェル組み込みコマンドです。 macOSコンピュータでは外部コマンドとしても使用できるため、/usr/bin/cd
他の多くのUnixユーザーのようにはcd
使用しませんxargs
。ただし、外部cd
コマンドは現在シェルのディレクトリを変更できません。これは「CDはなぜプログラムではないのですか?「そして」「cd」はどこにありますか?」と同様の問題。シェル関数のバリエーションはシェルの組み込みcd
コマンドを使用するため、この問題を回避します。最後の問題は2番目の問題の変形であり、他の問題のため実際には機能しません。つまり、コマンドが呼び出しシェルの外部コマンドによって
cd
実行されたときに作業ディレクトリを変更することはできませxargs
んxargs
。このコマンドは、パイプラインのステップとしてサブシェルで実行されます。子シェルでシェルを変更しても親シェルでは変更されません。
あなたは利用可能でなければなりません
fdr () {
cd "$( dirs -l -p | fzf )"
}
この行の各行は、dirs -l -p
チルダが拡張されたディレクトリスタックのディレクトリを出力します。bash
これは、名前に改行文字を含むディレクトリがスタックにないと仮定しますが、〜する空白のディレクトリがサポートされています(部分的には変換のために部分的にsed
引用されていない拡張のため、独自の関数ではこれを行いません$dir
)。