터미널을 지우는 데 유용한 명령을 찾았 bind -x '"\C-r"':reset
지만 간단한 bash 스크립트를 만들고 싶었습니다.
#!/bin/bash
bind -x '"\C-r"':reset
산출:
alfred@alfred-laptop:~/bash$ ./bind
./bind: line 2: bind: warning: line editing not enabled
누군가 설명해 주실 수 있나요?
- 이 문제를 어떻게 해결할 수 있나요?
- 무슨
warning: line editing not enabled
뜻인가요?
답변1
해당 스크립트를 소싱해야 합니다. . ./bind
또는 source ./bind
현재 세션에서 해당 키 바인딩을 활성화하려면 다음을 수행 하십시오 .
정상적으로 실행하면 터미널이 없으므로 해당 오류 메시지가 표시됩니다. 또한 작동하려면 스크립트가 실행되는 동안에만 활성화됩니다.
해당 키 바인딩을 지속하려면 해당 명령을 ~/.bashrc
.
답변2
비슷한 메시지가 있었지만 내 메시지는 대화형(로그인) 셸 외부에서 실행되는 스크립트에서 나온 것이었습니다. CGI 스크립트를 통해 실행되는 쉘 스크립트였습니다. 내 메시지는 다음과 같습니다.
/home/richard/.bash_profile: line 4: bind: warning: line editing not enabled
실제로는 4번째 줄에 없었지만 bind
해당 파일에 있는 유일한 내용은 다음과 같습니다.
bind 'set completion-ignore-case on'
물론 이는 줄 편집이 활성화된 경우, 즉 대화형 쉘인 경우에만 의미가 있습니다.
답변3
허용되는 답변을 개선하려고 노력하고 있습니다.
TTY가 필요하기 line editing not enabled
때문에 비대화형 쉘에서 실행하면 " "이 표시됩니다 .bind
bind
다음과 같이 명령을 검사로 묶으십시오 .
if [ -t 1 ]
then
# standard output is a TTY
bind -x '"\C-r"':reset
fi
답변4
대신 쉘이 대화형인지 테스트하겠습니다.
내 배포판의 bashrc 파일에서 찾은 코드 블록은 다음과 같습니다.
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
# if [[ $- != *i* ]] ; then
# # Shell is non-interactive. Be done now!
# return
# fi