2017-11-07 3 views
0

사용자가 입력 한 것처럼 명령 줄에 일부 문자열을 삽입 할 수있는 bash 스크립트/함수를 작성하고 싶습니다. 준비 수정할 수,사용자가 입력 한대로 명령 줄에 명령을 입력하십시오.

prompt> magic 

PRESSE를 입력하고 직접 명령 줄에 주입 및 결과 받거나 실행 : 그런 다음 배쉬 유형에

function magic() { 
    echo "ls -a" > 'whatever output that would do the trick' 
} 

:

예를 들어, 함수 마법을 정의 Enter 키 :

prompt> ls -a 

간단히 말해서,이 기능은 alias-exp 과.

누구나이를 달성하는 방법에 대한 아이디어가 있습니까?

답변

1

여기에 자동 응답. 더 많은 검색 및 몇 가지 테스트 후, 나는 마침내 "간단한"스크립트 트릭을 할 달성 :

function magic { 
if [ "$READLINE_LINE" = "magic" ] 
then 
    #Do magic 
    READLINE_LINE="ls -al" 
    READLINE_POINT=6 
else 
    #exec any other command 
    $READLINE_LINE 

    #For unknown reason : have to add manually the command in history 
    history -s "$READLINE_LINE" 

    # Clear buffer for next command 
    READLINE_LINE="" 
    READLINE_POINT=0 
fi 
} 

# Bind Enter key to magic function 
bind -x '"\C-M" : magic' 

매직!

0
당신은 비슷한 지원하기 위해 배쉬의 programmable completion 기능을 사용하여 시도 할 수

: 전형적인 것은,

prompt> magic<tab> 

당신이 뭔가 다른 명령 행을 대체 할 magic에 대한 탭 완료 스크립트를 작성할 수 있다고 생각을하더라도 캐럿 왼쪽에있는 텍스트를 변경하지 않고 더 많은 단어를 추가 할 수 있습니다.

+0

감사합니다. 이것은 정확히 묻는 질문의 대답이 아니므로 누군가가 다른 해결책을 가지고 있다면 대답을 받기 전에 조금 더 기다릴 것입니다. – jseguillon

+0

또한이 게시물에 설명 된 다른 방법을 발견 : https://unix.stackexchange.com/questions/251155/using-bind-to-read-the-current-command-line 이 바인딩 솔루션으로 나는 쓸 수 : '기능의 마법() { READLINE_LINE = "LS -a" READLINE_POINT = 5 } 는 바인드 -x ' "\ EW": "마법"'' 하지만이에, 나는 방법을 모른다 매직 함수에서 현재 버퍼를 읽거나 이미 입력 된 것이없는 경우에만 READLINE을 변경합니다. 누구? – jseguillon

관련 문제