)%20%E3%81%A7%20HISTORY%20%E3%81%8B%E3%82%89%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%20CD%20%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
ファイルシステム上のファイルのディレクトリに変更したいのですが、そのファイルがどこにあるかよくわかりません。
次のように検索します:
find -type f -name "myfile.txt"
簡単にするために、これは 1 つの結果を返すとします。
/ 非常に長いパスなので、myfile.txt を入力したくない
その後、私は通常次のように入力します:
cd $(dirname $(!!))
検索していたファイルのディレクトリに切り替えるには...
これをシェル スクリプトまたはエイリアスに入れて、基本的に次のように入力する方法はありますか。
cdlast
そして次のように実行されます:
cd $(dirname $(!!))
シェルの HISTORY を使用するのですか? 試してみましたが、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 !!))")"'
二重引用符が含まれていることを確認してください。これにより、スペースが含まれている場合にコマンド置換の結果が別々の単語に分割されることがなくなり、 や などの特殊文字が含まれている場合にワイルドカード パターンとして解釈されることがなくなり*
ます?
。
答え3
私は関数を使います:
gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }
「.」を適切なディレクトリに変更します(「~」など)