Articles

Bash(Unix shell)

Bash 명령 구문은 Bourne 쉘 명령 구문의 상위 집합입니다. Bash 지원 중괄호 확장,명령 라인에 완료(프로그래밍 완료),기본적인 디버깅 및 신호 처리(를 사용하는trap)이후 bash2.05 사이에 다른 기능이 있습니다. Bash 실행할 수 있습니다 대부분의 본 쉘 스크립트를 수정하지 않고 제외하고,본 쉘 스크립트가 걸림돌로 구문을 프린지 행동을 다르게 해석에 Bash 또는 실행하려는 시스템 명령과 일치하는 새로운 Bash 내장,등등. Bash 명령 구문을 포함한 아이디어에서 KornShell(ksh)과 C 쉘(csh)같은 명령줄이 편집,명령의 역사(history$RANDOM$PPID변수,POSIX 명령을 대체 구문을$(…).

할 때 사용자에 tab 키를 내에서 대화 형 command shell Bash 는 자동으로 사용하는 명령 라인 완료 이후,베타 버전 2.04,일치하는 부분적으로 입력 프로그램으로 이름,파일 이름과변수 이름. Bash 명령줄 완료 시스템은 매우 유연하고 사용자 정의,그리고 패키지로 제공되는 경우가 많으로 기능하는 완전한 인수하고 파일 이름에 대한 특정 프로그램과 작업을 합니다.

Bash 의 구문에는 Bourne 쉘에 부족한 많은 확장이 있습니다. Bash 는 외부 프로세스를 생성하지 않고 정수 계산(“산술 평가”)을 수행 할 수 있습니다. 이 목적을 위해((…))$((…))변수 구문을 사용합니다. 구문은 I/O 리디렉션을 단순화합니다. 예를 들어&>연산자를 사용하여 표준 출력(stdout)과 표준 오류(stderr)를 동시에 리디렉션 할 수 있습니다. 이것은 Bourne 쉘 동등한’command > file 2>&1‘보다 입력하기가 더 간단합니다. Bash 지원하는 프로세스는 대체를 사용하는<(command)>(command)구문,대체의 출력(또는 입력)명령어는 파일은 일반적으로 사용됩니다. (이를 지원하는 시스템의/proc/fd/이름없는 파이프 또는 필요한 경우 임시 명명 된 파이프를 통해 구현됩니다).

사용하는 경우’기능’,키워드 Bash 함수의 선언은 호환이 되지 않으로 본/Korn/POSIX 스크립트가(KornShell 같은 문제는 사용하는 경우’기능’)지만,Bash 지 동일한 기능을 선언 구문으로 본고 Korn 쉘,고은 POSIX 준수. 기 때문에 이들과 다른 차이 Bash 쉘 스크립트가 거의 실행에서 본 또는 Korn 쉘 통지 의도적으로 기록으로는 호환성,마음에는 더 적은이 되고 있 일반적으로 리눅스가 더 널리 퍼져 있습니다. 그러나 POSIX 모드에서는 Bash 가 POSIX 와 더 밀접하게 부합합니다.

Bash 는 여기 문서를 지원합니다. 버전 2.05 이후 b Bash 는<<<연산자를 사용하여”여기 문자열”에서 표준 입력(stdin)을 리디렉션 할 수 있습니다.

Bash3.0 은 perl 을 연상시키는 구문을 사용하여 프로세스 내 정규 표현식 일치를 지원합니다.

2009 년 2 월 Bash4.0 은 연관 배열에 대한 지원을 도입했습니다. 연관 배열 인덱스는 AWK 또는 Tcl 과 유사한 방식으로 문자열입니다. 이들은 다차원 배열을 에뮬레이트하는데 사용될 수있다. Bash4 는 라이센스를 GPLv3 로 전환합니다; 일부 사용자는이 라이센스 변경이 MacOS 가 이전 버전을 계속 사용하는 이유라고 의심합니다. Apple 은 마침내 2019 년 MacOS Catalina 의 출시로 운영 체제에서 Bash 사용을 중단했습니다.

중괄호 expansionEdit

교대라고도 불리는 중괄호 확장은 C 쉘에서 복사 한 기능입니다. 대체 조합 세트를 생성합니다. 생성 된 결과는 파일로 존재할 필요가 없습니다. 확장된 각 문자열의 결과는 정렬되지 않고 왼쪽에서 오른쪽 순서로 유지됩니다:

$ echo a{p,c,d,b}eape ace ade abe$ echo {a,b,c}{d,e,f}ad ae af bd be bf cd ce cf

사용자가 사용하지 않아야 중괄호 확장에서 휴대용 쉘 스크립트이기 때문에,셸을 생산 하지 않는 동일한 출력.

$ # A traditional shell does not produce the same output$ /bin/sh -c 'echo a{p,c,d,b}e'a{p,c,d,b}e

경우 괄호 확장과 함께 와일드카드,괄호 확장 첫 번째,다음의 결과로 와일드카드로 대체되는 일반적으로. 따라서 현재 디렉토리의 JPEG 및 PNG 이미지 목록은 다음을 사용하여 얻을 수 있습니다:

ls *.{jpg,jpeg,png} # expands to *.jpg *.jpeg *.png - after which, # the wildcards are processedecho *.{png,jp{e,}g} # echo just show the expansions - # and braces in braces are possible.

이외에 교대,중괄호를 확장할 수 있는 데 사용에 대한 순차적인 범위 사이에 두 개의 정수 또는 캐릭터로 구분하여 두 번니다. 최신 버전의 Bash 를 사용하면 세 번째 정수가 증분을 지정할 수 있습니다.

$ echo {1..10}1 2 3 4 5 6 7 8 9 10$ echo file{1..4}.txtfile1.txt file2.txt file3.txt file4.txt$ echo {a..e}a b c d e$ echo {1..10..3}1 4 7 10$ echo {a..j..3}a d g j

경우 괄호 확장이 결합된 변수 팽창 변수를 확장한 후에 수행 중괄호 확장,어떤 경우에는 사용하면 스크롤해야 볼 수 있습의evalbuilt-in,따라서:

$ start=1; end=10$ echo {$start..$end} # fails to expand due to the evaluation order{1..10}$ eval echo {$start..$end} # variable expansion occurs then resulting string is evaluated1 2 3 4 5 6 7 8 9 10

시작 scriptsEdit

이 섹션에 포함된 지침,통보,또는 콘텐츠입니다. 위키 백과의 목적은 훈련이 아니라 사실을 제시하는 것입니다. How-to 콘텐츠를 다시 작성하거나 Wikiversity,Wikibooks 또는 Wikivoyage 로 이동하여이 기사를 개선하는 데 도움을주십시오. (1 월 2019)

Bash 가 시작되면 다양한 dot 파일에서 명령을 실행합니다. Bash 쉘 스크립트와 달리 dot 파일에는 일반적으로 실행 권한이 활성화되어 있지 않으며#!/bin/bash와 같은 인터프리터 지시문이 없습니다.

레거시 호환 Bash 시작 exampleEdit

~/.bash_profile아래와 호환되는 셸을 제공합 의미와 유사 csh 에 대해~/.bashrc~/.bash_login && cmd&&경우 그렇지 않습니다.

 && . ~/.profile # set up environment, once, Bourne-sh syntax onlyif ; then # are we interactive? && . ~/.bashrc # tty/prompt/function setup for interactive shells && . ~/.bash_login # any at-login tasks for login shell onlyfi # End of "if" block

운영 체제 문제에 Bash startupEdit

의 일부 버전에는 유닉스와 리눅스에 포함 Bash 시스템을 시작하는 스크립트는 일반적으로 아래에/etc디렉토리입니다. Bash 이의 일환으로 표준 초기화,그러나 다른 시작 파일들을 읽을 수 있습니다 다른 순서보다 문서화 Bash 시작 시퀀스입니다. 기본 컨텐츠의 루트 사용자의 파일이 있을 수도 있습 문제 뿐만 아니라,해골의 파일 시스템을 제공하는 새로운 사용자 계정에 설치됩니다. 시작하는 스크립트를 실행 X 윈도우 시스템은 또한 놀라운 것으로 사용자의 배에서 시작 스크립트를 시도를 설정한 사용자 환경 변수를 시작하기 전에 창의 관리자입니다. 이러한 문제할 수 있는 자주 사용하여 해결하는~/.xsession~/.xprofile~/.profile—제공하는 환경변수는 Bash 쉘 windows 양산에서 창의 관리자와 같이 필요 xterm 또는 그놈 터미널도 있습니다.

PortabilityEdit

호출 Bash 과 함께--posixset -o posix에서 스크립트가 원인이 강타하 준수에 매우 밀접하게 POSIX1003.2 표준입니다. 이식성을 목적으로하는 Bash 쉘 스크립트는 적어도 POSIX 쉘 표준을 고려해야합니다. POSIX 에서 찾을 수없는 일부 bash 기능은 다음과 같습니다:

  • 특정한 확장된 호출 옵션
  • 중괄호 확장
  • 배열 및 연관 배열
  • 두 부류를]장 테스트 구성하고 그것의 일치 정규식
  • 두 번 괄호 안의 산술 평가를 구축(만$((... ))은 POSIX)
  • 특정 문자열 조작 작업에서 매개 변수를 확장
  • 로컬한 범위 변수를
  • 프로세스로 대체
  • Bash-특정 내부 명령
  • Coprocesses
  • $EPOCHSECONDS 및$EPOCHREALTIME 변수를

는 경우에 한 조각의 코드를 사용하여 같은 기능,그것은”bashism”–문제가 있는 휴대용. 데비안의checkbashisms와 빛나는 비다르 Holen 의shellcheck사용할 수 있는지 확인하는 스크립트가 포함되지 않은 이러한 부분입니다. 목록에 따라 다릅니다 실제 대상 쉘:데비안의 정책에서 허용하는 일부 확장 프로그램에서 스크립트(그들이에),하자 스크립트를 지원하는 전 POSIX 본 껍질과 같은 autoconf 의구성,은 더욱 제한적 기능에서 그들이 사용할 수 있습니다.

키보드 단축 cutsedit

주요 기사: GNU Readline

Bash 는 readline 을 사용하여 기본(Emacs)키 바인딩을 사용하여 명령 줄 편집을위한 키보드 단축키를 제공합니다. Vi-바인딩은set -o vi를 실행하여 활성화 할 수 있습니다.

프로세스 managementEdit

Bash 셸에는 배치 및 동시 모드의 두 가지 명령 실행 모드가 있습니다.

명령을 실행에서 일괄(즉,순서대로)그들은 그들로 구분해야 합니다 캐릭터”;”,또는 별도의 줄에는

command1; command2

이 예제에서,때 command1 가 완료되면 2 의 실행합니다.

배경의 실행 command1 발생할 수 있습을 사용하여(상징&)의 끝에서 실행 명령,프로세스에서 실행됩니다 배경을 즉시 반환을 제어하여 포탄 수 있도록 계속 실행하는 명령입니다.

command1 &

또는 동시 실행의 두 command1 및 2 의,그들에서 실행해야 합니다 Bash 쉘에서는 다음과 같은 방법으로:

command1 & command2

이 경우에는 command1 은 백그라운드에서 실행&상징,즉시 반환을 제어하는 쉘을 실행 2 의 전경.

프로세스가 포 그라운드에서 실행되는 동안 ctrl+z 를 입력하여 프로세스를 중지하고 컨트롤을 bash 로 되돌릴 수 있습니다.

모든 프로세스의 목록에서 모두 배경 및 중단할 수 있습 달성에 의해 실행하는jobs

$ jobs- Running command1 &+ Stopped command2

출력에서 괄호 안의 숫자는 말한 작업 id 입니다. 플러스 등을 의미한 기본 프로세스에 대한bgfg. “실행 중”및”중지됨”텍스트는 프로세스 상태를 나타냅니다. 마지막 문자열은 프로세스를 시작한 명령입니다.

프로세스의 상태는 다양한 명령을 사용하여 변경할 수 있습니다. fgbgbgfg을 취할 수 있습 작업 id 를 같이 그들의 첫 번째 인수를 지정하는 프로세스합니다. 하나가 없으면jobskill명령을 사용하여 신호를 보내 프로세스를 조기에 종료 할 수 있습니다. 작업 id 를 지정해야합니다 후에는 퍼센트 기호:

kill %1

조건 executionEdit

Bash 공급”if”명령을 구분하는 실행하는 명령에 따라 달라지는 종료 코드를 설정하여 선례를 명령입니다. 예:

cd "$SOMEWHERE" && ./do_something || echo "An error occurred" >&2

여기서./do_something 만 실행하는 경우 cd(change directory)명령이”successful”(반환되는 종료 상태로)및 에코 명령만 실행할 경우 cd 또는다./do_something 명령은”오류”(0 이 아닌 종료 상태)를 반환합니다.

모든 명령에 대해 종료 상태는 특수 변수$?에 저장됩니다. Bash 는 또한if 를 지원합니다...;그럼...;다른...나는 이것이 내가하는 일을 이해하지 못한다고 생각한다...;;$other_pattern)...;;esac조건부 명령 평가 양식.이 문제를 해결하려면 어떻게해야합니까? Bash 에서 발견 된 널리보고 된 2014 년 9 월 버그에 대해서는 Shellshock(소프트웨어 버그)을 참조하십시오.

bashbug 라는 외부 명령은 Bash 쉘 버그를보고합니다. 명령이 호출되면 채울 양식과 함께 사용자의 기본 편집기를 불러옵니다. 양식은 Bash 유지 관리자에게(또는 선택적으로 다른 이메일 주소로)우편으로 발송됩니다.

프로그램 completionEdit

Bash 프로그램 완료 후,completecompgen명령을 사용할 수 있기 때문에 베타 버전의 2.04 에서 2000. 이러한 시설이 복잡한 지능형료 등을 제공하 탭을 완성할 수 있는 프로그램 옵션 및 그 후,사용자가 선택한 옵션을 필요로 하는 파일이름으로 다음 입력,만 자동차-완료 파일의 경로(그리고 다른 옵션)다음에 대한 토큰을 발급합니다.