Bash를 사용하는 가장 좋아하는 명령 줄 트릭은 무엇입니까? [닫은]


156

우리는 모두 <ctrl>-R히스토리를 통해 검색을 되 돌리는 방법을 알고 있지만 <ctrl>-S설정하면 검색을 전달 하는 데 사용할 수 있다는 것을 알고 stty stop ""있습니까? 또한 bind -p를 실행하여 모든 키보드 단축키를 나열한 적이 있습니까? Mac OS X에는 기본적으로 455 개가 넘습니다.

bash를 사용하여 가장 좋아하는 모호한 트릭, 키보드 단축키 또는 쇼핑 구성은 무엇입니까?


2
"당신이 가장 좋아하는 것은 무엇입니까?"라고 말하십시오. 이를 통해 사람들은 설문 조사와 같은 특정 답변을 투표 할 수 있습니다.
SCdF

> "가장 좋아하는 것은 무엇입니까?" 끝난.
Martin Klinke

1
이 질문에 대한 StackOverflow 클론이 있습니다 : commandlinefu.com
rkb

455 개의 기본 키 바인딩 중 232 개만 "self-insert"( "이 키 입력") 이외의 작업을 수행합니다. $ bind -p | grep -v self-insert | 화장실
에드 Brannin

여기에 깔끔한 것들이 있습니다. 그러나 bash가 emacs 모드 일 때만 그들 중 상당수가 작동한다는 점에 주목해야한다.
Mo.

답변:


157

접미사가있는 파일 이름 바꾸기 / 이동 :
cp /home/foo/realllylongname.cpp{,-old}

이것은 다음과 같이 확장됩니다.
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old


12
대박! 이제 이것을 기억하고 기억해야합니다.
Jon Ericson

9
역순으로 (.cpp-old에서 .cpp로 이동) cp /home/foo/realllylongname.cpp{-old,}
Michael Ekoka

돌이켜 보면 분명하지만, 나는 내 스스로 그렇게하는 것을 기억하지 않는다. 감사!
Zecc

150
cd -

뒤로 버튼과 동일한 명령 행입니다 (이전 디렉토리로 이동합니다).


6
나는 디렉토리 스택 을 사용 pushd하고 popd유지하는 것을 선호한다 .
Alex M

21
그러나 'cd-'는 푸시를 사용하는 것을 기억하지 않아도 작동하는 이점이 있습니다.
Sergio Acosta

10
'cd'를 사용하면 홈 디렉토리로 이동합니다.
dr-jan

그것은이에 표시되지 않는 흥미 man cd, 또는 cd --help(적어도 내에서).
Halil Özgür

135

또 다른 마음에 드는 것 :

!!

마지막 명령을 반복합니다. 다음과 같은 형태로 가장 유용합니다.

sudo !!

81
그것은 또한 당신이 그것에 대해 정말로 화를 내도록하는 추가적인 이점을 가지고 있습니다. "컴퓨터, 이거 해봐." "접근 불가". "해!!"
nickf September

그다지 알려지지 않았습니다! :-)
hoyhoy

10
당신이 할 수있는 비슷한 일 : mkdir testdir; cd !$.. 이것은 실행됩니다 cd [last word of previous line](예제에서 cd testdir)
dbr

13
샌드위치 샌드위치 만들기 !!
키비

!!,! $ 및! -1 : ^ foo ^ bar가 마음에 들면 "Space : magic-space"도 바인딩됩니다. stackoverflow.com/questions/603696/…
Yoo

81

내가 가장 좋아하는 것은 '^ string ^ string2'입니다.이 명령은 마지막 명령을 사용하고 string을 string2로 바꾸고 실행합니다.

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz

배쉬 커맨드 라인 히스토리 가이드


욕심이 없습니다. 탐욕스럽게 만들려면 어떻게해야합니까?
Altreus

9
!!:gs/ehco/echo/
andre-r

이 가이드의 두 번째 페이지는 필수적입니다
jmoz

1
@ 앙드레-R : !!:gs/ehco/echo/수행 (협의의 마지막 명령에 대한 글로벌 검색 및 교체 !!stackoverflow.com/questions/68372/... ). 이는 ^ehco^echo"ehco"의 한 인스턴스를 대체하는 것과 같지 않습니다 .보다 정확한 응답은 다음과 같습니다 !!:s/ehco/scho.
Iceland_jack

64

이름을 바꾸다

예:

$ ls
this_has_text_to_find_1.txt
this_has_text_to_find_2.txt
this_has_text_to_find_3.txt
this_has_text_to_find_4.txt

$ rename 's/text_to_find/been_renamed/' *.txt
$ ls
this_has_been_renamed_1.txt
this_has_been_renamed_2.txt
this_has_been_renamed_3.txt
this_has_been_renamed_4.txt

매우 유용합니다


3
와우, 나는 기본 이름, mv 및 {} 트릭을 사용하여 지난 몇 년 동안 바보가되었습니다. / foreheadsmack.
Gregg Lind

7
그러나 rename은 다른 게시물과 마찬가지로 배쉬 / 읽기 전용이 아닙니다.

1
대부분의 경우 zsh 배포의 zmv가 훨씬 좋습니다.
ZyX

util-linux-ng 는 또한 rename 명령을 가지고 있으며이 답변에서 언급 한 것과 다릅니다. 여기에 설명 된 명령은 실제로 mmv 입니다.
Cristian Ciupitu

60

나는 가장 최근에 제출 된 명령 줄에서 마지막 항목, 첫 번째 비 명령 항목 및 모든 비 명령 항목에서 돌아 오는 !$, !^!*expandos 의 팬입니다 . 재치하려면 (쉘이 명령을 먼저 인쇄한다는 점에 유의하십시오.)

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

이것은 말하고 ls filea fileb그들 중 하나 vi !$또는 둘 다를 편집하려고 할 때 유용 합니다 vimdiff !*. 다음 n과 같이 "th argument" 로 일반화 할 수도 있습니다 .

$ echo foo bar baz
$ echo !:2
echo bar
bar

마지막으로, 경로 이름, 당신은 추가하여 경로의 일부에서 얻을 수 있습니다 :h:t위 expandos 중 하나에 :

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id

'에코! 2'했던 내가 있어야 할 것 같아요 저 및 나중에 포스트 I 톱에서없는 일 '에코 2!'
user13060

8
"bind Space : magic-space"를 .bashrc에 추가하십시오! 스페이스를 치면 조합이 자동으로 확장됩니다.
Yoo

47

명령을 실행할 때 때로는 이전 인수로 명령을 실행하고 싶을 때가 있습니다. 이를 위해 다음 단축키를 사용할 수 있습니다.

$ mkdir /tmp/new
$ cd !!:*

때로는 find를 사용하는 대신 파일 목록에서 여러 명령을 실행 해야하는 경우 한 줄 루프를 분리합니다.

for file in *.wav; do lame "$file" "$(basename "$file" .wav).mp3" ; done;

내 .bash_login (또는 .bashrc)에서 명령 줄 기록 옵션을 구성하면 정말 유용합니다. 다음은 Macbook Pro에서 사용하는 설정입니다.

다음을 설정하면 bash가 히스토리에서 중복 명령을 삭제합니다.

export HISTCONTROL="erasedups:ignoreboth"

또한 내 역사 크기도 꽤 높게 올렸습니다. 왜 안돼? 오늘날의 마이크로 프로세서에서는 속도가 느려지지 않는 것 같습니다.

export HISTFILESIZE=500000
export HISTSIZE=100000

내가하는 또 다른 일은 내 역사에서 일부 명령을 무시하는 것입니다. exit 명령을 기억할 필요가 없습니다.

export HISTIGNORE="&:[ ]*:exit"

당신은 확실히 histappend를 설정하고 싶습니다. 그렇지 않으면 bash는 종료 할 때 기록을 덮어 씁니다.

shopt -s histappend

내가 사용하는 또 다른 옵션은 cmdhist입니다. 이를 통해 여러 줄 명령을 하나의 명령으로 기록에 저장할 수 있습니다.

shopt -s cmdhist

마지막으로, Mac OS X (vi 모드를 사용하지 않는 경우)에서는 <CTRL> -S를 스크롤 중지 상태로 재설정해야합니다. 이것은 bash가 정방향 검색으로 해석 할 수 없게합니다.

stty stop ""

6
"Alt-"를 찾습니다. 마지막 명령의 마지막 단어를 반복하기 위해 "!! : *"보다 훨씬 낫습니다.
Weidenrinde

histroy에 대한 추가 사항 : 1. 히스토리를 정기적으로 저장하십시오 (한 번에 여러 쉘을 연 경우 -a를 사용하여). export PROMPT_COMMAND = "history -a"2. 다른 쉘에서 히스토리를 읽기위한 별명. 별명-h = 'history -n; 역사 | grep '
Weidenrinde

수출 HISTIGNORE = "[] *"는 동일해야 귀하의 HISTCONTROL = ignoreboth으로 필요하지 않습니다
Weidenrinde

히스토리에 대한 또 다른 좋은 것은 : 반출 HISTTIMEFORMAT = "% Y- % M- % D %가 H %의 M %는 S :"
Weidenrinde

"cd !! : *"에서 몇 번의 키 입력을 저장하려면 "cd! $"를 시도하십시오. "! $"는 마지막 명령의 마지막 인수로 해석됩니다.
Tim Stewart

43

현재 하나의 하위 디렉토리 나열하는 방법은 무엇입니까?

ls -d */

그것은 간단한 트릭이지만, 그 것을 찾는 데 얼마나 많은 시간이 필요한지 알 수 없습니다!


2
우수한! 지난 몇 년 동안 내가 alias lsd='ls -F | grep --color /'겪을 수있는 최선은이었다 . 그러나 쉽게 구문 분석 할 수 있도록 한 줄에 하나의 디렉토리를 나열합니다. 동일한 작업을 수행하도록 명령을 수정했습니다.ls -d1 */
Artem Russakovskii

어떻게 작동합니까? "ls -d"는 그냥 나열합니다. (이상한) "ls -d * /"작동합니다.
Yoo

1
조금 까다 롭습니다 ... "ls -d"는 "ls -d ./"와 "ls -d /"와 "ls -d ./*/"와 비슷합니다. '-d'스위치 세트 'ls'tu는 디렉토리 항목 만 나열하지만 매개 변수를 제공하지 않으면 현재 디렉토리를 매개 변수로 사용하므로 " * " 있습니다. 디렉토리 목록 ...
edomaur

1
나는 이것을 전에 발견 한 적이 없다고 믿을 수 없다. 좋은 팁.
Nick Dixon

아무 말도 안 돼! :)
dimba

41

ESC.

마지막 bash 명령에서 마지막 인수를 삽입합니다. 생각보다 편리합니다.

cp file /to/some/long/path

CD ESC.


이것은 나를 위해 작동합니다 (bash). esc 키를 누른 다음 마침표 키를 누르십시오. 하이픈이나 아무것도 없습니다.
Howler

9
또한 alt-. 같은 것입니다.
Mark Baker

네, 배쉬 만입니다. 그러나 <esc> (또는 Alt- 또는 Meta-) _는 동일한 함수에 바인딩되어 있으며 <esc> -_도 vi 모드에서 작동합니다.
Nick Dixon

내 zsh에서 @hendry 실제로 작동합니다. 아마도 당신은 vi 모드를 사용합니까?
ZyX

키보드 적중에 kbd-tag를 사용하십시오 : <kbd> ESC </ kbd> (하지만 코드 형식화 / 들여 쓰기와 함께 잘 작동하지는 않습니다).
사용자가 알 수 없음

36

물론, 당신은 "수 diff file1.txt file2.txt"있지만, 배쉬 지원 프로세스 대체 당신을 허용, diff명령의 출력을.

예를 들어, 스크립트가 원하는 결과를 제공하는지 확인하고 싶다고 가정 해 봅시다. 스크립트를 <()로 감싸서 diff빠르고 더러운 단위 테스트 를 하기 위해 피드 할 수 있습니다 .

$ cat myscript.sh
#!/bin/sh
echo -e "one\nthree"
$
$ ./myscript.sh 
one
three
$
$ cat expected_output.txt
one
two
three
$
$ diff <(./myscript.sh) expected_output.txt
1a2
> two
$

다른 예로, 두 서버에 동일한 RPM 목록이 설치되어 있는지 확인하고 싶다고 가정하겠습니다. 각 서버에 sshing, 각 RPM 목록을 별도의 파일에 기록하고 diff해당 파일에 대한 작업을 수행하는 대신 diff내 워크 스테이션에서 수행 할 수 있습니다 .

$ diff <(ssh server1 'rpm -qa | sort') <(ssh server2 'rpm -qa | sort')
241c240
< kernel-2.6.18-92.1.6.el5
---
> kernel-2.6.18-92.el5
317d315
< libsmi-0.4.5-2.el5
727,728d724
< wireshark-0.99.7-1.el5
< wireshark-gnome-0.99.7-1.el5
$

http://tldp.org/LDP/abs/html/process-sub.html 의 Advanced Bash-Scripting Guide에 더 많은 예제가 있습니다 .


35

내가 가장 좋아하는 명령은 "ls -thor"입니다

신의 힘을 소환하여 가장 최근에 수정 한 파일을 읽기 쉬운 형식으로 나열합니다.


6
전혀 쓸모가 없지만 재미있는 명령을 상기 ls -bart -simpson -ruls시킵니다. S, ICNR
filiprem

큰 파일을 빨리 찾을 수 있기 때문에 'ls -tor'도 유용합니다. 또한 천둥 신의 이름에 대한 스웨덴의 원래 철자는 실제로 '토르'입니다.
dala

덴마크어에서는 ls -lort"shit"에 대한 덴마크어 단어를 사용할 수 있습니다 . 어떤 그룹을 생략하고 :) valhal의 분노 못하고
예스퍼 Rønn - 젠슨

1
톨킨과 반지의 제왕과 관련이있는 "ls -lotr"와 같이 말할 수도 있습니다.
ADEpt

28

참신함이 더 많지만 영리합니다 ...

사용 된 상위 10 개 명령 :

$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -nr | head

샘플 출력 :

 242 git
  83 rake
  43 cd
  33 ss
  24 ls
  15 rsg
  11 cap
  10 dig
   9 ping
   3 vi

1
짧고 빠른 버전은 다음과 같습니다.history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
추후 공지가있을 때까지 일시 중지되었습니다.

25

^ R 역방향 검색. ^ R을 누르고 일치시키려는 이전 명령의 단편을 입력 한 후 원하는 명령을 찾을 때까지 ^ R을 누르십시오. 그런 다음 여전히 내 기록에있는 최근에 사용한 명령을 기억할 필요가 없습니다. 배시뿐만 아니라 : 줄 끝의 ^ E, 줄의 시작의 ^ A, 커서의 앞뒤에 각각 ^ U 및 ^ K를 삭제합니다.


2
나는 어떤 이유로 ^ U를 기억할 수 없다. 단어 삭제 삭제 바로 가기도 없습니까?
hoyhoy 2018 년

1
^ W는 커서 앞에있는 단어를 삭제합니다. (이것으로 답을 자유롭게 편집하십시오.)
Jon Ericson

2
^ R은 질문에서 언급되기에 너무 유용합니다 :)
Mark Baker

20

나는 종종 vi, ls 등에 대한 별칭을 가지고 있지만 때로는 별칭을 이스케이프하려고합니다. 명령 앞에 백 슬래시를 추가하십시오.

예 :

$ alias vi=vim
$ # To escape the alias for vi:
$ \vi # This doesn't open VIM

쿨하지 않습니까?


또한 실행할 수 있습니다 command이따 SHELL BUILTIN COMMANDS배쉬 설명서에.
Iceland_jack

17

다음은 몇 가지 구성 조정입니다.

~/.inputrc:

"\C-[[A": history-search-backward
"\C-[[B": history-search-forward

이것은 ^R대신 화살표 키를 사용 하는 것과 동일하게 작동합니다 . 즉, 입력 (예 :) cd /media/한 다음 위쪽 화살표를 눌러 마지막으로 이동 한 항목으로 이동할 cd수 있습니다./media/ 폴더 합니다.

(Gnome Terminal을 사용하므로 다른 터미널 에뮬레이터의 이스케이프 코드를 변경해야 할 수도 있습니다.)

배쉬 완성도 매우 유용하지만 훨씬 더 미묘합니다. 에서 ~/.bashrc:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

이는 프로그램 별 탭 완성을 가능하게합니다 (예 : 명령 행이 다음과 같이 시작될 때 탭 완성 시도) evince 하면 evince가 열 수있는 파일 만 표시되고 탭 완성 명령 줄 옵션도 표시됨).

다음과 같이 잘 작동합니다 ~/.inputrc.

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

+1 bash_completion은 대단합니다
prestomation

Mac에서는 화살표 키를 사용하여 기록 검색을 활성화 할 수 있습니다. bind ' "\ e [A"': history-search-backward bind ' "\ e [B"': history-search-forward
Asmus

17

나는 다음을 많이 사용합니다.

:p수정은 역사의 결과를 인쇄 할 수 있습니다. 예 :

!!:p

마지막 명령을 인쇄하여 다시 실행하기 전에 명령이 올바른지 확인할 수 있습니다. 그냥 입력!!실행하려면 .

비슷한 맥락에서 :

!?foo?:p

문자열 'foo'를 포함하는 가장 최근의 명령에 대한 기록을 검색하여 인쇄합니다.

인쇄 할 필요가 없으면

!?foo

검색을 수행하고 바로 실행합니다.


2
: p를 사용하는 대신 magic-space를 사용할 수도 있습니다. stackoverflow.com/questions/603696/…
Yoo

bashrc에에 confiure의 마술 (magick) 공간을 실행하지 않고 역사적 컨트롤을 확장bind Space:magic-space # !pin<space>
SergioAraujo

16

나는 비밀 무기를 가지고있다 : shell-fu.

대부분의 경우 한 줄에 맞는 수천 가지 스마트 팁, 멋진 트릭 및 효율적인 레시피가 있습니다.

내가 좋아하는 것 (그러나 파이썬이 대부분의 유닉스 시스템에 설치되어 있다는 사실을 사용하기 때문에 약간의 속임수) :

alias webshare='python -m SimpleHTTPServer'

이제 "webshare"를 입력 할 때마다 현재 디렉토리는 포트 8000을 통해 사용할 수 있습니다. usb 키나 원격 디렉토리없이 로컬 네트워크에서 친구와 파일을 공유하고 싶을 때 정말 좋습니다. 스트리밍 비디오 및 음악도 작동합니다.

그리고 물론 완전히 쓸모는 없지만 여전히 많은 고전적인 포크 폭탄 :

$ :(){ :|:& };:

프로덕션 서버에서 시도하지 마십시오 ...


나는 웹 공유해서는 안되는 것 같아요 /
Yoo

나는 당신이 명령을 단순화 할 수 있다고 생각합니다 python -m SimpleHTTPServer(원래 명령이 멋진 것을 놓치지 않는 한
Jesper Rønn-Jensen

Meh. 프로덕션 서버에서는 해당 포크 폭탄이 OS에 의해 스 uel 치됩니다. 모든 사용자가 만들 수있는 프로세스 수에는 제한이 있습니다.
Donal Fellows

3
@Donal : 시도해보고 결과를보고해야합니다.
Michael Foukarakis

12

watch 명령을 다른 명령과 함께 사용하여 변경 사항을 찾을 수 있습니다. 예를 들어 라우터를 테스트 할 때 신호 대 잡음비 등과 같은 최신 정보를 얻고 싶었습니다.

watch --interval=10 lynx -dump http://dslrouter/stats.html

watch 명령은 정말 멋지다. 필자는 약 5 년 전에 Linux Server Hacks 책을 읽었습니다. 그것이 존재한다는 것을 누가 알았습니까?
hoyhoy 2018 년

11
세계에서 '시계'는 배쉬와 어떤 관련이 있습니까?
Artem Russakovskii


11

echo를 사용하여 명령을 구성 하고 셸로 파이프하는 것을 좋아합니다 .

$ find dir -name \*~ | xargs echo rm
...
$ find dir -name \*~ | xargs echo rm | ksh -s

왜? 그렇게하기 전에해야 할 일을 살펴볼 수 있기 때문입니다. 그렇게하면 (홈 디렉토리 제거와 같은) 끔찍한 오류가 발생하면 발생하기 전에 잡을 수 있습니다. 분명히 이것은 파괴적이거나 돌이킬 수없는 행동에 가장 중요합니다.


1
공백이있는 파일 및 폴더의 문제점을 피하기 위해 find -print0 및 xargs -0을 사용할 수 있습니다.
neu242

또는 이름에 공백이있는 파일 및 폴더를 작성하고 작업하지 마십시오. ;-) 분명히 사용자가 생성 한 이름으로 작업하는 경우 제안이 중요합니다.
Jon Ericson

4
"echo"를 제거 할 수 있는데 왜 "| ksh -s"를 추가 하시겠습니까?

GNU find로 파이프 할 필요가 없습니다 :$ find dir -name \\*~ -exec rm {} +
bobbogo

10

큰 파일을 다운로드 할 때 나는 종종 다음을 수행합니다.

while ls -la <filename>; do sleep 5; done

그런 다음 ctrl + c를 완료하면 (또는 ls0이 아닌 경우). watch프로그램 과 비슷 하지만 대신 쉘을 사용하므로가없는 플랫폼에서 작동합니다 watch.

또 다른 유용한 도구는 netcat 또는 nc입니다. 당신이 할 경우 :

nc -l -p 9100 > printjob.prn

그런 다음 다른 컴퓨터에서 프린터를 설정할 수 있지만 대신 netcat을 실행하는 컴퓨터의 IP 주소를 사용할 수 있습니다. 인쇄 작업이 전송되면 netcat을 실행하는 컴퓨터에서 인쇄 작업을 수신하여printjob.prn .


예를 들어 왜 그렇지 wget않습니까?
porges

시도하십시오 watch ls -la <filename>(기본값 2 초가 마음에 들지 않으면 -n5를 사용 하십시오 ).
Ted Percival

1
@Ted watch는 Solaris, Mac OS X 등과 같은 모든 플랫폼에서 사용할 수 없습니다. @Porges, 무슨 뜻인지 잘 모르겠습니다. wget도 포트에서들을 수 있습니까?
dreamlax


10

트리 계층 구조에서 크게 다른 위치에 여러 디렉토리를 사용하는 경우 탐색하는 가장 좋은 방법은 acf_func.sh (아래에 나열)를 사용하는 것입니다. 정의되면 할 수 있습니다

cd-

숫자 메뉴가있는 최근 디렉토리 목록을 보려면

CD -2

두 번째로 최근 디렉토리로 이동합니다.

사용하기 매우 편리합니다.

코드는 다음과 같습니다.

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

10

겁에 질린 엔터를 치기 전에 복잡한 선을 확장하십시오

  • Alt+ Ctrl+ e쉘 확장 라인 ( 키보드에서 Esc, Ctrl+ 를 사용해야 할 수도 있음 e)
  • Ctrl+ _실행 취소
  • Ctrl+ x, *glob-expand-word

$ echo !$ !-2^ * Alt+ Ctrl+ e
$ echo aword someotherword * Ctrl+ _
$ echo !$ !-2^ * Ctrl+ x, *
$echo !$ !-2^ LOG Makefile bar.c foo.h

&씨.


+1, 난 항상 눌러 Enter:)
João Portela

이 중 아무것도 몰랐습니다. 실행 취소는 살인자입니다. 모든 명령 줄 편집에 좋습니다.
Philippe A.

9

나는 항상 부분적이었습니다.

ctrl-E # move cursor to end of line
ctrl-A # move cursor to beginning of line

또한을 사용 shopt -s cdable_vars하면 공통 디렉토리에 bash 변수를 작성할 수 있습니다. 따라서 회사의 소스 트리를 위해 다음과 같은 변수를 만듭니다.

export Dcentmain="/var/localdata/p4ws/centaur/main/apps/core"

그런 다음에 의해 해당 디렉토리로 변경할 수 있습니다 cd Dcentmain.


Home과 End는 crtl-A 및 ctrl-E와 동일한 작업을 수행합니다.
davidfg4 2009

이것은 홈 및 종료 키가없는 Mac 랩톱에서 도움이됩니다.
jamesh 2009

불행히도 ctrl-A는 screen기본적으로 이스케이프 키입니다 . 내에서 ctrl-X로 다시 매핑 .screenrc하지만 이맥스 사용자가 아닙니다.
시스템 일시

cdable_vars 옵션과 관련하여 CDPATH 환경 변수도 있습니다. 그러나 PATH에서와 같이 상위 디렉토리를 설정했기 때문에 다르게 작동합니다. cdable_vars를 사용하면 더 많은 제어권을 얻을 수 있습니다.
Zecc

1
바로 가기 목록에 대한 추가 정보 : CTRL + K는 커서에서 줄 끝까지 모든 것을 삭제하고 CTRL + U는 커서 앞의 모든 것을 삭제하고 ALT + F / ALT + B를 사용하여 한 단어를 앞 / 뒤로 이동 (또는 CTRL + 왼쪽 화살표 / CTRL) + 오른쪽 화살표). cdable_vars +1!
Philippe A.

8

pbcopy

Mac 시스템 클립 보드에 복사됩니다. 명령을 파이프로 연결할 수 있습니다.

pwd | pbcopy


NB! 이것은 Mac 고유의 명령입니다.
dala

alias pbcopy='xsel --clipboard --input' 그리고 : alias pbpaste='xsel --clipboard --output'
wawawawa


7

.bashrc에서 명령 줄에서 'set -o vi'를 사용하면 명령 줄에서 vi 편집 모드가됩니다. '삽입'모드에서 시작하여 정상적으로 입력하고 백 스페이스 할 수 있지만 '큰'실수를하면 esc 키를 누른 다음 vi에서와 같이 'b'와 'f'를 사용하여 이동할 수 있습니다. cw는 단어를 변경합니다. 변경하려는 히스토리 명령을 가져온 후 특히 유용합니다.


7

위의 많은 것들과 유사하게, 현재 가장 좋아하는 것은 키 입력입니다 [alt]. (Alt와 "."키를 함께) 이것은 $!와 같습니다. (이전 명령에서 마지막 인수를 삽입합니다.) 즉시 입력하기가 더 쉽다는 점을 제외하고. (스크립트에서는 사용할 수 없습니다)

예 :

mkdir -p /tmp/test/blah/oops/something
cd [alt].

또한 Alt- [0-9]와 조합 해보십시오 (첫 번째 조합을 눌렀다가 놓은 후 두 번째로칩니다). 예를 들어 마지막 명령이 'mv foo bar'인 경우 "Alt-0 Alt-." 'mv', "Alt-1 Alt-." 'foo', "Alt-2 Alt-"를 제공합니다. 기본 Alt-. 둘 다 '막대기'등을 제공
Sam Stokes

1
Alt-를 눌러보십시오. 두 번 이상 (또는 Alt 키를 누른 상태에서 점을 여러 번 누른 다음 Alt 키를)니다) Ctrl-R을 두 번 이상 누르는 것과 유사합니다.
Yoo

7

&& 명령을 사용하여 여러 명령을 함께 묶습니다 .

./run.sh && tail -f log.txt

또는

kill -9 1111 && ./start.sh

1
하나가 실패하면 다른 명령이 실행되지 않습니다 (프로그래밍과 같이 빨리 실패)
Frederic Morin

1
반대는 논리 또는 '||'를 사용하는 것입니다 오른쪽이 왼쪽이 거짓 인 경우에만 실행됩니다. 예 : <code> command_1 || command_2 </ code>
dala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.