유닉스에서 즉시 역사에 접근하는 방법?


12

예를 들어 내가

mkdir thisismyfolder912

나는 전환하는 thisismyfolder912것보다 더 쉬운 방법이 있다는 것을 기억 합니다.

cd thisismyfolder912

그 방법은 무엇이며 어떻게 작동합니까? 또한 이것을 사용할 수있는 다른 방법은 무엇입니까?


1
최근 히스토리 목록에없는 명령 및 디렉토리에 대해서는 탭 완성을 사용하십시오. cd this<TAB>
13:26에

답변:


10

고전적인 역사 확장 또는 Readline 처리에 대해 이야기하고 있습니까? cd !$다음 입력 줄에서 이전 줄의 마지막 인수를 대체 M-.하거나 M-_Readline을 사용하여 줄을 바꿉니다.



찾고있었습니다 cd !$. "클래식 히스토리 확장 또는 리드 라인 처리"당신이 무슨 뜻인지 정확히 이해하지 못합니다 ...
Lazer

2
@Lazer !$역사 확장입니다 . 쉘은 명령을 구문 분석 할 때이를 처리합니다. 미디엄-. readline 키 입력입니다. readline은 누른 각 키를 처리하는 라이브러리이며 M-를 눌렀 음을 알 수 있습니다. 마지막 명령의 마지막 인수를 자동으로 입력합니다
Michael Mrozek

9

귀하의 질문이 명령 기록에 액세스하는 것에 관한 것이라면,이 유명한 명령을 사용해보십시오

history 

Ctrl+ 을 시도 r하고 최근에 입력 한 것을 기억하려는 명령을 입력하기 시작할 수도 있습니다 .

(reverse-i-search)`cd ': cd mydir/data/

ESC명령을 선택하거나 종료하려면 누르 십시오. 이것은 적어도 SuSE에서 작동합니다. 다른 배포판에 대해 확실하지 않습니다.


4
우와! 이것은 실제로 내 인생을 바꿀 것입니다. 당신을 조이십시오 history | grep ...!
Oli

이것은 단지 SuSE 관련이 아니라 Bash 기능이라고 생각합니다 :)
sakisk

방금 vi명령 줄을 관리하는 데 사용 하는 것에 대해 읽었습니다 . 정말 멋지다. vi를 사용하여 쉘 명령 편집
Banjer


2

이것은 항상 나를 위해 일했습니다 :

mkdir thisismyfolder
cd $_

그러나 조심하십시오 : $!실제로 입력 한 $_마지막 단어 로 확장하고 확장 후 마지막 단어 로 확장합니다 . 따라서 echo /tmp/tmpfile*제거하려는 많은 파일을 볼 수 있지만 rm $_그중 하나만 제거합니다.
jmb

1

다음과 같은 경우 다른 실에서 팁을 집어 올리십시오.

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

.bashrc에서 기록에서 무언가를 입력하기 시작한 다음 위쪽 화살표를 누른 다음 항목별로 기록 항목을 거치지 않고 이미 항목으로 시작하는 이전 항목으로 건너 뜁니다. 입력했습니다.

나는 이것이 질문에 주어진 특정 예에서별로 도움이되지 않는다고 생각하지만, 즉시 역사에 액세스하는 데 도움이되는 것입니다.


1

bash를 사용하는 경우 pushd및을 제안 popd합니다. 디렉토리 스택을 만들어 빠르게 찾아 볼 수 있습니다. 이 예제를보십시오 :

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$

약어 프롬프트를 사용하면 게시물을 더 읽기 쉽게 만듭니다. (사용자 및 호스트 이름을 제거하는 것을 말합니다. PWD를 표시하는 것이 등을 $시연 할 때 유용하다는 것을 알고 있습니다 pushd.)
추가 통지가있을 때까지 일시 중지되었습니다.

1

관련 메모에서 bash에서 histverify를 사용하는 것이 좋습니다. 이것을 ~ / .bashrc에 넣으십시오.

shopt -s histverify

이렇게하면! $ 또는 다른 히스토리 기능을 확장 한 후 bash가 명령을 인쇄하게되며 실제로 실행하기 위해 Enter 키를 다시 누르기 전에 명령을 볼 수 있습니다. 나를 위해, 위생 검사는 때때로 추가 키를 누를 가치가 있습니다. 내가 cd foo아닌 명령을 실행하고 있는지 확인하고 싶습니다 rm -rf foo...

나는 종종 Ctrl-R접근 방식을 사용합니다 Alt-.(이 시나리오는 귀하가 설명하는 시나리오에 적합합니다). 때때로! $를 사용할 것입니다.

이들은 매우 유용한 범용 기술입니다.

그러나 특정 질문을 해결하려면 다음을 수행하십시오.

디렉토리를 만들고 CD에 직접 CD를 넣는 것은 일반적인 조합으로 마무리하는 기능이 유용합니다.

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

용법: mcd thisismyfolder


1

쉘이 readline (의 경우 bash)을 사용한다면 ATL+를 .함께 누르는 것과 같은 일을 할 수 있습니까?

로부터 GNU Readline와 문서 :

yank-last-arg (M-. 또는 M-_)

이전 명령 (이전 히스토리 항목의 마지막 단어)에 마지막 인수를 삽입하십시오. 인수를 사용하면 yank-nth-arg와 똑같이 행동하십시오. yank-last-arg에 대한 연속적인 호출은 히스토리 목록을 다시 돌아가서 각 라인의 마지막 인수를 차례로 삽입합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.