다음을 수행하기 위해 짧은 함수를 만들고 싶습니다. "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
일부 전역 변수를 증가시키는 함수를 가정해 보겠습니다.)