2014-01-29 5 views
5

쉘에 매개 변수가있는 명령이 있습니다. 쉘 명령에서 매개 변수를 바꾸는 방법

Command -a -b 

처럼 a b이 매우 긴 디렉토리 이름입니다 가정, 그들은 항상 처음과 마지막 매개 변수가 없습니다.

그러나이 명령을 다시 사용해야합니다. 나는 ctrl+p을 사용하여 명령을 다시 실행하지만 이번에는 역순으로해야합니다. ab 주문.

Command -b -a 

다시 입력하는 대신 빠른 바꾸는 방법이 있습니까?

미리 감사드립니다.

답변

10

예는 history substitution을 사용할 수 있습니다 : 당신은 현재와 이전 단어를 교환 Alt + t을 사용할 수 있습니다

$ echo foo bar 
foo bar 
$ !:0 !:2 !:1   # previous command with second arg then first arg 
echo bar foo 
bar foo 
$ 
+1

첫 번째와 마지막 인수를 교환 할 일이 있다면, 당신은 쓸 수 있습니다 :'!!! 0 $ ^' –

+1

심지어'! 0 :! 2! 1 '. 느낌표를 두 번 올릴 필요는 없습니다. – rojomoke

+0

@rojomoke : cool - 나는 몰랐다. 나는 대답을 업데이트 할 것이다. –

4

.

Here이 바로 가기입니다.

매개 변수가 아니라 단어를 바꿔야한다는 사실을 염두에 두십시오. 예를 들어 주문이 섞여 있다면 grepgrep ~/Documents/myFile searchString과 같은 매개 변수를 사용하고 그 값을 grep searchString ~/Documents/myFileAlt + t으로 수정하려고합니다.

대신 Paul's answer으로 이동하고 !:0 !:2 !:1을 실행하십시오. 사용자가 입력하는 것을 너무 불편하면

당신은 ~/.bash_alias에 그 별명을 만들 수 있습니다 (나를 위해입니다) :

# Swap the first and the second argument of the last command 
alias swapArgs='$(history -p !:0 !:2 !:1)' 
1

대신 쉽게 컷을 할 수 있고을 붙여 인수를 스와핑 마지막 arg는 다른 장소에있다. Ctrl-W은 마지막 인수를 잘라내어 Ctrl-Y에 붙여 넣습니다.

$ # Cursor position is shown as | 
$ ls foo bar| 

$ # Press <Ctrl-W> to cut the argument just before the cursor 
$ ls foo | 

$ # Now press <Alt-B> to move the cursor one argument back 
$ ls |foo 

$ # Now press <Ctrl-Y> to paste the cut argument 
$ ls bar|foo 

$ # Now press <space> to insert a space between the arguments 
$ ls bar |foo 

$ # You can safely press <enter> while the cursor is in the middle of the line 
$ ls bar |foo 
bar foo 
관련 문제