경고: 줄 편집이 활성화되지 않았습니다

경고: 줄 편집이 활성화되지 않았습니다

터미널을 지우는 데 유용한 명령을 찾았 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

누군가 설명해 주실 수 있나요?

  1. 이 문제를 어떻게 해결할 수 있나요?
  2. 무슨 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

관련 정보