$(!!)와 같은 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")"; }

"."를 적절한 디렉터리로 변경합니다("~"일 수도 있음).

관련 정보