명령을 실행하지 않고 터미널 프롬프트에 입력하는 방법

명령을 실행하지 않고 터미널 프롬프트에 입력하는 방법

실행하려는 내용을 간단히 입력할 수 있다는 것을 알고 있습니다.

func()
{
    cd scripts
    ./excellent/script
}

그러나 내가 원하는 것은 ./excellent/script입력하지 않고 명령줄에 입력하는 것입니다. 그런 식으로 실행하면 func필요한 것을 거기에 넣고 데모가 준비될 때까지 기다립니다.

$ func
$ ./excellent/script

답변1

이것은 기본적으로 달성될 수 있습니다. 실제로 일어나는 일은 명령줄 프롬프트가 가짜 프롬프트일 뿐이라는 것입니다. 그러나 입력하는 내용은 즉시 실행되므로 실제 명령 프롬프트일 수도 있습니다.

func() {
    cd scripts
    read -e -p '$ ' -i './excellent/script' command
    eval $command
}

프롬프트가 그보다 더 복잡하다면 올바르게 보이도록 하기 위해 $해당 행 앞에 -p '$ 'echo -ne "[whatever] "이나 이와 유사한 행을 제거하고 추가해야 할 수도 있습니다 read.

답변2

readline을 사용하는 경우(예: bash 사용) 텍스트 값을 할당하는 간단한 함수에 키 누르기를 바인딩할 수 있습니다.

bind -x '"\C-T": READLINE_LINE=./excellent/script'

클릭하면 주어진 텍스트가 포함된 현재 명령줄(입력)이 삭제됩니다 Controlt. 이 아이디어의 단점은 여러 예제를 준비하려는 경우 키보드 단축키가 부족하다는 것입니다.

에서 영감을 받다모스베이의 여기에 대답하세요.

관련 정보