2016-10-30 5 views
1

실행시 명령 줄에 일부 텍스트 (실행할 명령)를 입력하고 커서를 끝에 놓는 bash 스크립트를 만드는 방법이 있습니까?bash 스크립트의 명령 줄 입력

명령을 실행하면 안되므로 [Enter] 키를 눌러야 만 명령이 실행됩니다. 난 단지 명령에있는 매개 변수 중 일부를 때때로 바꿀 수 있기를 원합니다.

예 : 내가 지금까지 가지고하는 것은 나에게 요구하는 명령, echo'ing 단지 스크립트입니다

# ./do_command.sh 
    # some__very_long_command_with_plenty_of_params param1 param2 param3 | <- and the cursor 
is here waiting for me to just approve hitting the [Enter] or possibly tweak the params before doing so 

복사 붙여 넣기.

+0

대신에./do_command.sh를 수정하여 매개 변수를 수정하거나 조정할 필요가 없도록하십시오. 그렇게하면 긴 명령을 스크립트에 넣고 자동으로 실행할 수 있습니다. – VM17

+0

일부 매개 변수를 사용하여 명령을 자주 실행해야하기 때문에 가끔씩 약간 변경되었습니다. 나는 기본 매개 변수를 검사하고 (가능하다면) 변경할 수 있기를 원하며 ([Enter] 키를 눌러) 승인하면된다. – araches

답변

1

정확하게 Bash 만 사용하여이 작업을 수행 할 수 있는지 잘 모르겠습니다. 터미널 응용 프로그램의 일부 추가 기능이 필요할 수 있습니다. 내가 생각할 수있는

옵션은 :

  • 는 PARAMS 많은 각 매우 긴 명령에 대한 선택적 매개 변수와 배쉬 함수를 작성. 이 함수는 또한 명령을 인쇄하고 확인을 요청할 수 있습니다. 예를 들어

:

myfunc() { 
    param1=${1:default1} 
    param2=${1:default2} 
    cmd="command --param $para1 --param $param2" 
    echo running $cmd 
    read -p "<ENTER> to run, <CTRL-C> to abort" 
    $cmd 
} 
  • 텍스트 완료 도구를 사용하여 같은 당신이 인수는 문자의 특정 순서를 쓸 때 메시지를 표시하고 때 결과를 쓸 것이다 Dash, TextExpander로 Press ENTER; 온라인 확장과

  • 사용 배쉬 별칭 : PARAMS 듬뿍 매우 긴 명령의 각각에 대한 별칭을 만든 다음 별칭을 입력하지만, (아직) enter 키를 누릅니다하지 않는 눌러 CTRL-ALT-E ; 선이 확장되어 검토하고 수정 한 다음 ENTER을 누를 수 있습니다. 예를 들어

:

$ aliase myfunc="command --param 1 --param 2" 
$ myfunc <CTRL-ALT-E> 
$ command --param 1 --param 2 
  • 사용 '해시 태그 영구 역사': 한 번 PARAMS 듬뿍 매우 긴 명령을 사용하여 명령을 실행할 수 있지만 그 라인을 제공하는 메모와 함께 종료 이름'.

    $ command --param 1 --param 2 # myfunc 
    

    그런 다음 CTRL-R

    (reverse-i-search)`my': command --param 1 --param 2 # myfunc 
    
    을 입력 : 그렇다면, 당신은 이름 ('해시 태그') 예를 들어

를 검색 할 수 CTRL-R을 사용할 수 있습니다

을 입력하여 명령을 검색하십시오.

+0

고마워, 별칭 다음 Ctrl + Alt + 전자 정확히 내가 무엇을 찾고 있었 않습니다. 그것은 내가 전용 스크립트에서 .bashrc로 명령을 이동하게하지만 그것은 내 경우에는 더 좋다. – araches

0

do_command은 실제로는 read 명령의 래퍼입니다.

cmd="some__very_long_command_with_plenty_of_params" 
args=("foo bar" "param2" "param3") 
read -e -i "$(printf '%q' "$cmd"; printf ' %q' "${args[@]}")" cmd 
eval "$cmd" 

일반적으로, eval는 사용할 수 없습니다, 그러나 여기, 당신은 특별히 eval을 할 수 있도록 설계되었습니다 무엇 임의의 명령을 실행하려고합니다. 이것은 bash 프롬프트에서 직접 명령을 입력하는 것보다 위험합니다.

-e 명령은에 Readline 라이브러리를 사용하여 일반 프롬프트와 마찬가지로 명령 줄을 편집하도록 지시합니다. -e은 기본값을 제공합니다. printf 명령은 명령 이름과 기본 인수가 eval 명령으로 다시 사용할 수있는 방법으로 인쇄되도록합니다. %q은 따옴표를 사용하지 않습니다. 이 반드시 이스케이프 처리되어야하는 문자 만 이스케이프 처리하기 위해 백 슬래시를 사용하므로 foo bar은 또는 'foo bar'이 아닌 으로 표시됩니다.