쉘 스크립트 디버깅

쉘 스크립트 디버깅

원격 호스트에 대한 SSH 연결을 정의하고 원격으로 실행되는 스크립트를 로컬로 연결 및 디버깅할 수 있는 IDE가 있는지 궁금합니다(Eclipse에서 원격 Java 애플리케이션을 디버깅하는 방법과 비슷합니다). 변수를 한 줄씩 검사할 수 있기를 원합니다.

답변1

추적 출력을 개선하는 쉬운 방법은 다음 코드 조각을 사용하는 것입니다.

  PS4='[${BASH_SOURCE[0]:-inherited}:${LINENO}:${FUNCNAME[0]:-main}] '
  set -o xtrace

그러면 다음이 표시됩니다.

  1. 소스 파일
  2. 소스 줄 번호
  3. 기능 이름

당신은 또한 볼 수 있습니다c42-공통 기능 위키 페이지

출력 예:

   $ c42_loglevel_trace
   $ pidkill --help
   ++ '[' '+ ' == '+ ' ']'
   ++ PS4='[${BASH_SOURCE[0]:-inherited}:${LINENO}:${FUNCNAME[0]:-main}] '
   ...
   [/usr/local/bin/pidkill:224:main] '[' 1 -eq 0 ']'
   [/usr/local/bin/pidkill:230:main] signal=KILL
   [/usr/local/bin/pidkill:231:main] '[' 1 -gt 0 ']'
   [/usr/local/bin/pidkill:233:main] case $1 in
   [/usr/local/bin/pidkill:268:main] shift 1
   [/usr/local/bin/pidkill:269:main] help
   [/usr/local/bin/pidkill:57:help] cat
   pidkill <-h|--help>                                              this help
   [/usr/local/bin/pidkill:70:help] copyLeft
   [/usr/local/bin/pidkill:13:copyLeft] echo ''
   ...

또 다른 옵션은배쉬 데이터베이스:

이것은 O'Reilly and Associates(ISBN 1-56592-054-6)에서 출판되고 Michael Loukides와 Cigy Cyriac Change가 편집한 Bill Rosenblatt의 "Korn Shell 학습"의 Korn Shell Debugger를 완전히 재작성한 것입니다. 그러나 이제 이 코드는 POSIX 표준의 일부도 아니고 많은 POSIX 유사 셸에도 없는 여러 디버깅 지원 기능에 의존합니다. bashdb는 BASH로 작성된 스크립트를 디버깅하는 데에만 사용할 수 있지만 BASH 프로그래밍에 대해 자세히 알아보기 위한 프런트 엔드로도 사용할 수 있습니다. 추가 지원으로 디버거는 함수와 변수가 이미 초기화된 기존 스크립트의 컨텍스트에서 사용될 수 있습니다. 디버거 내에서 기존 코드 조각을 변경하여 실험할 수 있습니다.

답변2

Bash 스크립트 디버깅을 위한 IDE? 그래픽 GUI가 호스트에 ssh를 연결하고 스크립트의 cli 출력을 제공하는 방법을 이해하지 못합니다. 또한 스크립트를 실행할 수 있는 bash 디버거도 모릅니다. 그러나 어떤 종류의 쉘 스크립트를 말하는지는 지정하지 않았습니다.

bash인 경우 이 -x플래그를 사용하여 추적을 활성화할 수 있습니다. 이것은 거의 디버깅입니다. 하지만 침입/탈퇴/오버는 할 수 없습니다. 그래도 매우 유용하다고 생각합니다.

이렇게 하면 shebang에서 직접 활성화할 수 있습니다.

#!/usr/bin/bash -x

또는 추적을 활성화/비활성화하려면 set을 사용하세요.

set -x # enable debugging

set +x # disable tracing

스크립트를 일시중지할 수도 있습니다.read

ENV 변수 /proc/<PID>/environ 는 \0으로 구분되어 있으며 sed를 사용하여 null 문자를 CR로 바꿀 수 있습니다.

cat /proc/10815/environ | sed 's/\0/\n/g'

즐기다

GUI는 잊어버리고 삶을 더 쉽게 만들어 보세요. GUI는 사용자와 소비자를 위한 것입니다.

관련 정보