%EC%99%80%20%EA%B0%99%EC%9D%80%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20HISTORY%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EB%98%90%EB%8A%94%20%EB%B3%84%EC%B9%AD%EC%97%90%20%EB%8C%80%ED%95%9C%20CD.png)
종종 내 파일 시스템에 있는 파일의 디렉터리로 변경하고 싶지만 파일이 어디에 있는지 잘 모르겠습니다.
저는 다음과 같이 검색합니다.
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")"; }
"."를 적절한 디렉터리로 변경합니다("~"일 수도 있음).