디렉터리를 인수로 사용하여 명령을 실행한 다음 동일한 디렉터리로 cd하려면 어떻게 해야 합니까? "해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다.

디렉터리를 인수로 사용하여 명령을 실행한 다음 동일한 디렉터리로 cd하려면 어떻게 해야 합니까? "해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다.

다음을 수행하기 위해 짧은 함수를 만들고 싶습니다. "file.tex" 파일을 내 문서 디렉토리로 옮긴다고 가정해 보겠습니다.

mv file.tex ~/Documents

cd그런 다음 해당 디렉토리로 이동하고 싶습니다 .

cd ~/Documents

나는 이것을 할 수 있도록 이것을 모든 디렉토리에 일반화하고 싶습니다.

mv file.tex ~/Documents
follow

그리고 follow명령이 이전 명령에서 대상을 읽고 그에 따라 실행되도록 합니다. 간단한 디렉토리의 경우 시간이 많이 절약되지 않지만 중첩된 디렉토리를 사용할 때 다음을 사용할 수 있다면

mv file.tex ~/Documents/folder1/subfolder1
follow

나는 그것이 상대적으로 간단할 것이라고 생각했고 다음과 같이 할 수 있었습니다:

follow()
{
    place=`history 2 | sed -n '1p;1q' | rev | cut -d ' ' -f1 | rev`
    cd $place
}

그러나 이것은 작동하지 않는 것 같습니다. echo 하면 $place원하는 문자열을 얻지만( 을 사용하여 테스트 중입니다 ~/Documents) 마지막 명령은 반환합니다.

No such file or directory

디렉토리가 존재합니다. 나는 헤매고 있다. 도와주세요?

답변1

함수를 정의하는 대신 $_이전 명령의 마지막 인수로 확장되는 변수를 사용할 수 있습니다 bash. 따라서 다음을 사용하십시오.

cd "$_"

mv주문 후.

기록 확장을 사용할 수도 있습니다.

cd !:$

기능을 사용해야 하는 경우:

follow () { cd "$_" ;}

$ follow () { cd "$_" ;}
$ mv foo.sh 'foo bar'
$ follow 
foo bar$ 

알아채다:이 답변은 위치 인수를 처리할 때 사용하는 정확한 명령줄 인수 형식에 대한 것입니다. 예를 들어 사전에 특정 검사를 통합해야 하는 다른 형식의 경우 mv -t foo bar.txt래퍼가 적합합니다.

답변2

표준 bash 키 바인딩을 사용하는 이 조합은 Alt.이전 명령줄의 마지막 인수를 현재 명령줄에 복사합니다. 그러니 들어가세요

$ mv foo ~/some/long/path/
$ cd <Alt><.>

생산할 것입니다

$ mv foo ~/some/long/path/
$ cd ~/some/long/path/

단어보다 타이핑 횟수도 적습니다 follow.

편의성을 높이기 위해 반복 Alt.조합은 모든 이전 명령줄의 마지막 인수를 검색합니다.

부록:이 키 조합에 해당하는 bash 명령 이름은 yank-last-arg또는 입니다 insert-last-argument. "기록 조작 명령" 아래의 bash 맨페이지에서 찾을 수 있으며 자세한 내용은 다음과 같습니다.배쉬 참조 매뉴얼.)

답변3

매개변수 확장 전에 물결표 확장이 발생하는 문제에 거의 확실히 직면하게 될 것입니다. 이는 깔끔한 예를 통해 설명할 수 있습니다.

$ cd ~kaz
kaz $ var='~kaz'
kaz $ echo $var
~kaz
kaz $ cd $kaz
bash: cd: ~kaz: No such file or directory

이는 으로 해결될 수 있습니다 eval. eval기록에서 명령을 가져오고 명령에는 다음과 같은 임의의 확장이 포함될 수 있으므로 어쨌든 필요합니다 .

$ mv file.tex ~/Documents/$(compute_folder_name foo-param)/subfolder1
$ follow

(이러한 값을 다시 확장하면 발생한 원래 확장과 더 이상 일치하지 않을 수 있는 등 몇 가지 문제가 있습니다. compute_folder_name일부 전역 변수를 증가시키는 함수를 가정해 보겠습니다.)

관련 정보