아래 예에서 $
bash 프롬프트 로 ⏎
Enter 키를 누르는 것을 상징하기 위해 명령/별칭을 어떻게 구성합니까 foo
?
$ foo bar⏎
Enter 키를 누르기 전에 "bar"를 수정할 수 있도록 "bar"(또는 명령에 전달하는 다른 문자열)가 명령줄에 입력/입력/미리 채워지거나 입력됩니까? 예를 들어
$ bar
…
$ barbaz⏎
시도했지만 성공하지 못했고 echo bar > /dev/pts/123
하고 싶지 않습니다 xdotool
. 가능합니까?
편집: 사용 사례 예, "greppy 자동 완성":
기억하기 어려운 매개변수가 많이 포함된 긴 명령이 필요한 경우가 많습니다. 예제를 파일에 저장합니다.
명령.txt:
ffmpeg -i infile.mp4 -c:v copy -c:a copy -y transcoded.mp4
sox in.wav out.wav remix 1 0
이제 위에 지정된 명령이 있으면 이를 이라고 부르겠습니다 inject
. 별칭을 가질 수 있습니다.
grepcomplete () {
inject $(grep $0 commands.txt)
}
그래서 내가 기억할 때 나는 필요하다혼합뭔가 그런데 기억이 안 나네요삭스해당 매개변수를 입력한 grepcomplete remix
다음 sox in.wav out.wav remix 1 0
입력한 것처럼 명령줄에 앉아 편집하고 조정할 준비가 된 다음 Enter 키를 눌러 실행할 수 있습니다. 아무것도 선택, 복사, 붙여넣기할 필요가 없습니다.
Kamil이 의견에서 제안한 것처럼 bash의 기록 검색(Ctrl-R)을 사용하고 history -r commands.txt
bashrc에서 비슷한 작업을 수행하여 나만의 "기록"을 제공할 수 있습니다.
그래도 내 접근 방식의 좋은 점은 예를 들어 구문 강조를 통해 모든 일치 항목을 표시하여 쉽게 해킹할 수 있다는 것입니다.
내가 이 질문에 직접 대답하고 이 명령의 구현을 제공했다는 점에 유의하십시오 inject
.
답변1
다음은 다음에서 영감을 얻은 작고 추악한 솔루션입니다.Perl 솔루션을 통해 각 프롬프트 뒤에 문자열 삽입, TIOCSTI 사용파이썬에 적응하다:
다음과 같은 bash 기능.bashrc
inject () {
(python -c "import fcntl; import termios; import sys
with open('/dev/stdout', 'w') as fd:
for c in ' '.join(sys.argv[1:]): fcntl.ioctl(fd, termios.TIOCSTI, c)" "$@" &)
}
용법:
inject foo bar
노트:
- 지금은 유니코드를 처리할 수 없습니다!
for char in str
범인이 의심되는데요 ? - 서브셸의 배경 구조
( foo &)
프롬프트 전에 문자열의 이중 반향 방지 - 인수 사이의 공백을 먹습니다:
inject foo bar
=inject foo bar
. 사용inject "foo bar"
. - 타이밍에 따라 다르므로 경쟁 조건이 있을 수 있는 것 같나요?
- bash 하위 쉘 없이 수행할 수 있고 파이프, xargs 등에 더 적합할 수 있는 Python 스레딩/다중 처리 기능이 있는 다른 버전이 있습니다. 이것은 내 사용 사례에 가장 깨끗하고 간단한 솔루션입니다.
답변2
를 사용하여 구성할 수 있습니다 ~/.inputrc
. 파일이 없으면 파일을 만들고 다음 내용을 추가합니다.
Control-P: "foo "
이제 새 터미널을 열고 Ctrl+를 누르면 커서가 있는 곳에 P문자열이 foo
입력됩니다. 자신에게 맞는 단축키를 선택할 수 있으며 작동해야 합니다.
답변3
xdotool
TTY 쉘이 아닌 X 환경에서만 작동하며 Wayland에서는 작동하지 않을 수도 있습니다.
나는 당신이 질문하고 있는 것 같은 느낌이 듭니다나만의 bash 완성 스크립트 만들기. 그런 다음 키를 "주입"(통화 완료)합니다 Tab
.
기본 아이디어는 사용자가 키를 누를 때 bash가 제안하는 내용을 complete
나타내는 다음 명령 입니다.Tab
$ complete -W "now tomorrow never" dothis
그런 다음 입력하십시오.
$ dothis to<Tab>
채우기:
$ dothis tomorrow
귀하의 예를 들어,
$ complete -W bar foo
$ foo<Space><Tab>
생산할 것이다
$ foo bar
추가로 편집할 수 있습니다.
명령 자체는 대화형 셸 생성 중에 실행될 complete
수 있습니다 .~/.bashrc
답변4
Fish에서는 이 기능을 사용하는 것과 동일합니다 commandline
. 예를 들어:
commandline 'echo next command'