위쪽 및 아래쪽 화살표를 사용하여 명령 기록을 탐색 할 수 있습니다.
In Matlab과 같은 일부 IDE에서는 무언가를 입력 한 다음 화살표 키를 누르면 입력 한 내용으로 시작하는 히스토리 명령 만 스크롤합니다. 정말 편리하지만 쉘 터미널에서는 작동하지 않습니다.
쉘 터미널에서 유사한 기능을 얻을 수있는 방법이 있습니까? 터미널 사용의 효율성을 높이기위한 다른 팁이 있습니까?
댓글
답변
원하는 것은 Ctrl 입니다. R .
Ctrl R 를 입력 한 다음 원하는 명령의 일부를 입력합니다. Bash는 첫 번째 일치 명령을 표시합니다. Ctrl R 를 계속 입력하면 bash는 이전 일치 명령을 순환합니다.
기록에서 뒤로 검색하려면 Ctrl 를 입력합니다. 대신 S . ( Ctrl S 가 그렇게 작동하지 않으면 XON / XOFF 흐름 제어를 비활성화해야 함을 의미합니다. 이렇게하려면 stty -ixon
.)
man bash
의 “검색 중”에 설명되어 있습니다.
댓글
-
Ctrl-Q
: 이미 먼저 흐름 제어를 끄지 않고 터미널을 정지했습니다.
답변
다음 항목을 ~/.inputrc
에 배치합니다.
"\e[5~": history-search-backward "\e[6~": history-search-forward
이 항목은 Page Up 및 Page Down 은 원하는대로 작동합니다. (일부 배포판에는 이미 구성되어 있습니다.) 개인적으로 Ctrl + R kbd보다이 방법이 더 편리합니다. > 또는 history
.
댓글
- 현재 모든 답변에서 가장 편리한 방법입니다. u plz 조금 줘 작동 메커니즘에 대한 설명?
-
~/.inputrc
또는/etc/inputrc
또는 환경 변수$INPUTRC
는 bash (셸)를 포함하여 readline을 사용하는 모든 애플리케이션의 라인 편집 구성 파일입니다. 여기에는 다음 두 가지를 포함하여 특정 기본 라인 편집 기능이 있습니다. bash ‘의 매뉴얼 페이지에서 이러한 키워드 중 하나를 검색하여 자세히 알아 봅니다.\e[5~
/\e[6~
는 대부분의 터미널 에뮬레이터에서 Page Up / Down 키에 의해 생성 된 이스케이프 시퀀스입니다. 확인하려면cat
명령을 실행 한 다음이 키를 누릅니다 (이스케이프 바이트는 터미널에서^[
로 표시되며 inputrc에서\e
). - 원래 질문의 예에서는 Matlab에서 위 / 아래 키가 이러한 방식으로 작동한다고 말합니다. inputrc에 Up 및 Down 시퀀스를 배치하고이 작업에 할당하면 어떤 일이 발생했는지 보는 것이 흥미로울 것입니다. 제대로 작동하거나 기본 동작과 충돌하므로 불쾌한 부작용이 있습니다. 나는 ‘ 모르겠습니다. ‘이를 실험 해 보시기 바랍니다.
-
echo $INPUTRC
할 때 비어 있습니다. ‘ Ubuntu 14.04를 사용하고 있습니다. - 개인적으로이 작업을 수행하기 위해 위쪽 및 아래쪽 화살표를 재정의하는 것을 선호합니다.
"\e[A": history-search-backward
및"\e[B": history-search-forward
답변
^ r / ^ s 기록 외에 i -search :
alt . 는 커서에 이전 명령의 마지막 “단어”를 삽입합니다. 이전 명령에서 마지막 단어를 얻으려면 반복하십시오. (그러나 후행 &
는 백그라운드 명령의 마지막 단어로 간주됩니다.)
mkdir foo
, cd
alt- 점. 위쪽 화살표 ^ a, alt-d (앞으로 단어 삭제), cd
보다 훨씬 빠릅니다.
두 번째에서 마지막 단어를 얻으려면 다음을 사용하세요. esc
-
2
alt+.
(예 : alt+.
에 emacs 스타일 숫자 인수를 사용합니다.음수는 끝부터 시작하고 양수는 시작부터 앞으로 계산합니다.) 그러나 이것은 일반적으로 “가치가있는 것보다 더 많은 문제입니다. 어떤 시점에서는 마우스에 도달하여 복사 / 붙여 넣기 또는 위쪽 화살표 및 ^를 사용하는 것이 더 빠릅니다.” w / ^ y 부분 (아래 참조).
터미널이 제대로 / 적절하게 설정되어 있으면 ctrl-left 및 ctrl-right가 단어 단위로 앞뒤로 이동합니다. 그렇지 않다면 적어도 alt-b와 alt-f는 같은 일을 할 것입니다.
ctrl- /은 실행 취소입니다. 조금 넘었을 때 실행을 취소 할 수 있으면 자동 반복을 사용하여 단어를 훨씬 더 효율적으로 삭제할 수 있습니다.
보다 강력한 명령 믹싱 / 매칭은 작동하는 킬링을 사용하는 것입니다. Emacs 에서처럼. ctrl-y는 마지막 ctrl-w / ctrl-u / ctrl-backspace / alt-d를 붙여 넣습니다. alt-y는 이전에 죽인 텍스트를 순환합니다.
여러 개의 ctrl-w 또는 연속 된 모든 것이 kill-ring 항목을 만듭니다. 두 항목을 제거하고 나중에 하나만 붙여 넣으려면 왼쪽 및 오른쪽 화살표 또는 다른 항목을 사용하여 항목을 분리하십시오.
이 모든 항목을 결합하면
- 명령 입력 시작
- ctrl-r 이전 명령으로 돌아가서 control-w 또는 이와 유사한 명령으로 일부를 잡습니다.
- esc-r 또는
alt+r
일부를 삭제하기 전의 상태로 복원합니다. - alt-
>
기록의 끝으로 이동 (즉, 아래쪽 화살표 끝까지), 중간에 있던 명령으로 돌아갑니다.
기타 대화 형 사용 팁 :
shopt -s globstar
를 활성화하면 **/*.c
를 수행 할 수 있습니다 (현재 dir). 때로는 대화 형 사용에 편리하지만 일반적으로 find -name "*.c" -exec foo {} +
가 더 좋습니다.
bash 스크립트를 작성하는 경우 도 대화 형 셸에서 활성화됩니다. 때로는 *.!(c|h)
와 같은 항목이 끝나지 않는 파일과 일치하는 용도를 찾습니다. .c 또는 .h 사용
ls -l
, less
및 기타 작업에 대해 원하는 별칭 찾기 많이. (cp -i
, mv -i
및 rm -I
는 좋습니다. 습관을 들이지 마십시오. 따라 선택적 rm을 수행합니다. GNU rm “s-모든 인수에 대해 한 번 묻습니다.)
alias m=less
( “more”의 경우 m). less
를 , 및 로 설정했습니다. 를 이전 / 다음 파일 (lesskey
). 기본값은 자동 반복과 함께 사용할 수없는 다중 키 누르기 시퀀스입니다.
GNU 화면 내에서 모든 작업을 수행하는 것을 좋아합니다. 번호가 매겨진 화면 창을 추적하는 것이 더 쉽습니다. Konsole (또는 내가 시도한 다른 터미널 에뮬레이터)에있는 탭의 보트로드. screen
를 아직 모른다면 tmux가 더 새롭고 덜 복잡하기 때문에 배우십시오.
다음을 사용하여 새 셸을 여는 기능과 같은 기능을 얻으려면 다른 쉘과 동일한 cwd를 사용합니다. 저는 cd / pushd / popd 용 사용자 정의 후크를 사용하여 cds 8
를 사용하여 무엇이든 cd dir screen window 8의 my shell이 사용하고 있습니다. 이것은 screen 세션이 하나만있는 한 screen 세션 외부의 쉘에서도 작동합니다.
Comments
- 내가 ‘ ” 올바르게 구성되지 않은 것 “. 여기에있는 많은 단축키가 작동하지 않습니다. ‘ Ubuntu 14.04의 스톡 터미널을 사용하고 있습니다. 어떻게 구성 할 수 있나요?
- @JorgeeFG : KDE로 전환하기 전에 Ubuntu 14.04에서
gnome-terminal
를 사용하는 즉시 작동했다고 생각합니다. 관련 옵션은 터미널 설정, esc-prefix vs hig에 있습니다. h-bit 및 기타 설정. 그들 중 일부는 ‘ ssh를 통해 완벽하게 작동하지 않습니다. (예를 들어 ctrl 왼쪽 / 오른쪽 화살표 키의 이스케이프 코드를 뭉치면 문자 그대로5D
가 나타납니다.)
Answer
~/.inputrc
"\e[A": history-search-backward "\e[B": history-search-forward
이것은 egmont의 답변과 유사하지만 Page Up 및 Page Down을 사용하는 대신 Arrow Up 및 Arrow Down에 이스케이프 시퀀스를 사용합니다.이 방법은 Mac에서 사용하는 것이 훨씬 더 편리합니다.
답변
저는 항상 큰 HISTSIZE 값을 사용하여 더 긴 기록 목록을 유지하고 타임 스탬프 값이있는 HISTTIMEFORMAT 명령이 언제 실행되었는지 알 수 있습니다.
export HISTSIZE=10000 export HISTTIMEFORMAT="%m/%d/%Y %T "
답변
일반적으로 사용하는 수단은 iv grep
IE :
history | grep <command im looking for>
명령 p> 그러면 해당 명령이 포함 된 입력 한 명령의 번호가 기록 된 내역이 표시되며 다음을 사용하여 해당 명령을 다시 실행할 수 있습니다.
!<number listed in history command>
>
IE :
history | grep history
142 history 143 history | grep lvresize 568 history | grep echo 570 history | grep echo 571 history | grep history
다음 : !571
반복합니다 history | grep history
댓글
- CR = 훨씬 더 좋음 + 훨씬 더 안전함
- 아마도 개인적으로 대부분의 명령을 찾는 데 더 빠른 수단이되기 위해 grep에 파이프 된 기록을 발견했습니다. 안전에 관한 한 ‘ 무슨 뜻인지 잘 모르겠습니다. cR로 검색하는 것에 비해 히스토리를 사용할 때 내재 된 위험은 무엇입니까?
- @ Gravy 나는 PSkocik이
!
히스토리 대체가 덜 안전하다는 것을 의미한다고 생각합니다. - @Gravy 내재 된 위험은 실수로 잘못된 라인을 얻는 것입니다. Control-S를 사용하고 xon / xoff 흐름 제어를 활성화하지 않는 한 (종종 기본값) 터미널이 정지 된 이유를 알 수 없습니다. 그렇다면 Control-Q가 다시 가져올 것입니다.
- @PSkocik에 동의합니다. cr은 ‘이기 때문에 훨씬 더 좋습니다. 동일한 방식으로 다시 실행하는 것보다 히스토리 라인을 편집하기가 더 쉽습니다. 정확히 똑같은 명령을 다시 실행하는 것은 복잡한 한 줄에 변형을 다시 입력하거나 긴 경로에서 다른 파일을 탭으로 완성하는 시간을 절약하기 위해 할 수있는 간단한 경우입니다. 내 대답을 참조하십시오.
답변
매일 4 개의 팁을 사용했습니다 (및 기타) 내 bash 터미널의 em> :
-
마지막 명령 실행 :
!!
-
명령 실행 N 기록 :
!N
-
접두어
기록에서 :
!prefix:p
-
접두사 로 시작하는 마지막 명령 실행 기록에서 :
!prefix
댓글
- 역사에서 N 명령을 사용하는 것은 대부분의 인간에게 발에 자신을 쏠 수있는 최고의 경로 🙂 다음과 같이 말하면됩니다.
답변
If bash
대신 zsh
를 사용해도 괜찮습니다. oh-mi-zsh 를 사용할 수 있습니다. 그에 대한.
위쪽 및 아래쪽 화살표를 사용하여 명령 기록을 탐색 할 수 있습니다. 또한 텍스트를 이미 입력 한 경우에도 동일한 탐색이 가능합니다 (Mathlab에서와 같이).
수정 : Oh-my-zsh는 많은 다른 기능을 포함하는 대규모 개발자 지향 소프트웨어 패키지입니다. 별칭, 테마, 플러그인. 이러한 추가 기능을 사용하면 단축키보다 배포판이 더 복잡해집니다.
https://github.com/robbyrussell/oh-my-zsh
댓글
-
oh-my-zsh
에는 수많은 내용이 포함되어 있습니다. 다음과 같이 말할 수 있습니다.이 정확한 기능은 특정 설정이나 앱만 있으면 해당 배포판에 포함되어 있습니다. - 게시물을 편집했습니다. 단순한 앱보다 크다고 경고했습니다.
Answer
다음 별칭을 ~ / .bashrc에 추가
alias h="history | awk """""{$1="";print}""""" |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep"
사용법 : h fire
는 fire 가 포함 된 명령 목록을 가져옵니다. 또는 h ^fire
는 fire 로 시작하는 명령 목록을 가져옵니다.
이는 일련의 명령을보고 싶을 때 유용합니다. 동시에.
그런데 """""
는 추악하지만 작은 따옴표로 묶인 작은 따옴표를 피할 수있는 다른 방법을 찾을 수 없었습니다.
댓글
- fyi-
h="history | awk '{\$1=\"\"; print}'
가 작동합니다. 또는 함수를 생성하고 호출합니다. - DarkHeart에게 감사합니다.하지만 귀하의 코드를 시도했지만 내 환경에서 작동하지 않는 것으로 나타났습니다. 내 환경에 뭔가 다른 것이있을 수 있습니다.
😉
\e[5~
및\e[6~
대신\e[A
,\e[B
.