$(!!) のような bash スクリプトの HISTORY ディレクトリまたはエイリアスの CD

$(!!) のような bash スクリプトの HISTORY ディレクトリまたはエイリアスの CD

多くの場合、私のファイルシステム上のファイルのディレクトリに変更したいのですが、ファイルがどこにあるのかわかりません。

私は次のように検索します。

find -type f -name "myfile.txt"

単純化のために、これは結果を返すと言うことができます。

/some/super/long/path/that/i dont/want/to/type/myfile.txt

次に、通常、次のように入力します。

cd $(dirname $(!!))

私が探しているファイルのディレクトリに切り替えるには...

とにかく、デフォルトでこれを入力できるように、これをシェルスクリプトまたはエイリアスに入れることはできますか?

cdlast

それは働く:

cd $(dirname $(!!))

シェル使用の歴史?私はこれを試しましたが、シェル履歴がbashスクリプトから欠落しているようです。

答え1

fc -s前のコマンドを再実行します。

alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'

または以下を使用してくださいeval "$(history -p !!)"

alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'

答え2

エイリアスを使用できます。

alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'

二重引用符があることを確認してください。コマンド置換の結果にスペースが含まれている場合は、別の単語に分割されません。コマンド置換の結果に特殊文字(例:*and)が含まれていると、ワイルドカードパターンとして解釈されます?

答え3

私は関数を使います:

gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }

"."を適切なディレクトリに変更します("〜"かもしれません)。

関連情報