쉘 스크립트 라인의 끝에서 앰퍼샌드 란 무엇을 의미합니까?


118
sh sys-snap.sh &

무엇입니까 sh? 무엇입니까 sys-snap.sh? 왜 &줄 끝에 넣어야 합니까? 누구든지 구문을 설명 할 수 있습니까?

포함하지 않는 &I 누를 때까지 스크립트가 프롬프트로 돌아 가지 않을 Ctrl+를 C. 함께 &내가 눌러 입력하고 작동합니다.


2
이중 앰퍼샌드 &&는 단일 앰퍼샌드와 다른가 &?
Charlie Parker

1
@CharlieParker 그것에 대한 답을 찾은 적이 있습니까? 나는 그 차이를 스스로 알아 내려고 노력하고 있습니다. (편집 : Nevermind, 더 아래로 발견)
Drazen Bjelovuk

답변:


94

sh기본 Bourne 호환 쉘 (보통 bash 또는 dash)입니다.

sys-snap.shsh실행 되는 명령을 포함하는 쉘 스크립트 입니다. 당신이 그 내용을 게시하지 않기 때문에 나는 그 이름으로 무엇을 추측 할 수 있습니다. 모든 현재 프로세스, 현재 메모리 사용량, 데이터베이스 상태 등으로 로그 파일을 만드는 동일한 파일 이름을 가진 CPanel 관련 스크립트를 찾을 수 있습니다. 스크립트가 shebang 행 ( #!/bin/sh또는 이와 유사한)으로 시작되면 실행 가능하게 만들 수 있습니다. 과 chmod +x sys-snap.sh및 사용하여 직접 시작 ./sys-snap.sh현재 디렉토리에있는 경우.

함께 &프로세스가 백그라운드에서 시작, 그래서 당신은 쉘을 계속 사용할 수 있으며, 스크립트가 완료 될 때까지 기다릴 필요가 없습니다. 잊어 버린 경우 현재 실행중인 프로세스를 중지하고 (또는을 사용하여 전경에서 ) Ctrl-Z계속 진행할 수 있습니다. 자세한 정보는 작업 제어를 참조하십시오.bgfg


4
sh일반적으로 bash또는 dashLinux 기반 시스템 (또는 최신 OS / X) 에서만 . BSD에서는 일반적으로 Ash의 또 다른 변형 (대시는 NetBSD sh를 기반으로하며 Almquist Shell을 기반으로 함) 또는 pdksh 파생물입니다. 상용 Unices에서는 일반적으로 ksh88입니다.
Stéphane Chazelas

1
@ jofel : 아래 스크립트가 실행 중이고 실수로 Ctrl-C를 실행하면 어떻게됩니까? 내 스크립트가 실행됩니까 아니면 종료됩니까? 예 : sh sys-snap.sh &
Hussain7

2
@ Hussain7 Ctrl-C는 항상 포 그라운드의 현재 프로세스로 전송됩니다. 쉘 스크립트가 시작되어 &백그라운드에서 시작 되면 새 쉘 프롬프트 만 표시됩니다.
jofel

2
이중 앰퍼샌드 &&는 단일 앰퍼샌드와 다른가 &?
Charlie Parker

7
@CharlieParker 예, "&&"는 "and"기능입니다. && 이후의 명령은 이전 명령이 성공한 경우에만 호출됩니다. 예 "true && echo works"출력 "작동하지만"false && echo no output "은 echo 함수를 호출하지 않습니다
jofel

87

이것은 job control유닉스에서 알려져 있습니다 . 는 &백그라운드에서 명령을 넣어 쉘을 알려줍니다. 이것은 sys-snap.sh명령을 계속 실행 하지만 병렬 명령을 계속 수행 할 수 있도록 쉘로 돌아갑니다.

현재 jobs명령으로 실행중인 작업 목록을 볼 수 있습니다 . 명령을 사용하여 명령으로 돌아갈 수 있습니다 ( '전경으로') fg. 어느 다시 더 프롬프트를 볼 수없는 상태로 명령을 끌어 당신은 발행해야 Ctrl- C죽이는 과정을. 그러나 해당 프로세스를 일시 중지 (일시 중지)하여 Ctrl-를 발행 할 수 있습니다 Z. 일시 중지 sys-snap.sh되고 프롬프트로 돌아갑니다. 그런 다음 그것은 (당신이 그것을 발행 한 것처럼 배경 수 & 로) bg명령, 그것은 것입니다 재개 그것에서 실행 상태를 일시 정지 것 Ctrl- Z에 넣어했다.

한 번에 둘 이상의 작업을 수행 할 수 있습니다 (로 표시 jobs).

[1]-  Running          sys-snap.sh &
[2]+  Running          another-script.sh &

당신은 배경과 그들의 작업 번호를 사용하여 전경, 할 수 %1있을 것 sys-snap.sh하고 %2있을 것입니다 another-script.sh. 당신이 사용하는 경우 fg또는 bg그것으로 표시 작업에 대한 조치 명령을 것이다 인수없이 +에서 jobs위의 출력.

fg %1

둘 것이다 sys-snap.sh떠나는 동안, 다시 전경에 another-script.sh백그라운드에서.

당신은 실행할 수 있습니다 Ctrl- C로 전경하지 않고 작업을 실행하는 순서 kill명령을 kill %1동등한를 보낼 것 Ctrl- Csys-snap.sh.

bash 쉘을 사용하는 경우, man bash명령에는 'JOB CONTROL'섹션 아래에 자세한 섹션이 있습니다.

의 이름에 관해서 sys-snap.sh는 유닉스 파일에서 파일 이름은 임의적입니다 (동적 로더 파일과 같은 몇 가지 예외가 있음). 쉘 스크립트로 실행 perl하거나 php등의 다른 명령을 호출하기 위해 특정 파일 확장자를 가질 필요는 없습니다 . 일반적으로 명확성을 제공하는 데 사용됩니다.이 경우 .sh에는 Bourne 쉘을 사용하는 쉘 스크립트입니다 /bin/sh.

기능적인 부분 sys-snap.sh( less명령 과 같은 내용을 볼 때 )은 Shebang 입니다. 첫 번째 줄에는 다음 중 하나가있을 것입니다.

#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash

또는 유사합니다. 기본적으로 #!(와 같은 /bin/sh) 명령 은 실행되고 나머지 스크립트 파일의 내용은 한 번에 한 줄씩 제공됩니다. chmod명령으로 파일을 실행할 수 있도록 파일을 실행 파일로 설정해야합니다 . 권한이 설정되지 않은 shebang경우 오류가 발생하므로 효과가 없습니다.

bash: sys-snap.sh: command not found

또는 명시 적 경로 ./sys-snap.sh( .현재 작업 디렉토리를 의미)로 실행하면 다음과 같은 결과가 나타납니다.

bash: ./sys-snap.sh: Permission denied

다른 대안은 실행 권한없이 그대로두고 / bin / sh를 명시 적으로 실행하여 요청하는 것입니다.

/bin/sh sys-snap.sh &

3
이것은 좋은 대답입니다. 가능한 한 가지 제안은 프로세스를 시작하고 프로세스를 종료하지 않고 프로세스를 시작한 쉘을 종료하는 nohup데 종종 사용되기 때문에 그 기능을 추가하는 것 &입니다.
Tommy

@Drav, jobs첫 번째 명령이면 항상 비어있는 것이 사실 입니까?
Pacerier

사용합니다 &에만이 이탈 (분리) 명령의 끝에서 stdin(그러나 stdoutstderr명령 / 스크립트가 백그라운드에서 실행 만에 쓰는 경우 의미) stdout, 당신은 상황에 실행할 수있는 것은 어디에서 Ctrl + c출력을 중지하지 않습니다하지만 당신은 수있을 것입니다 명령을 입력하십시오. 백그라운드 프로세스가 작성 stdout중이지만 포 그라운드에서 실행되고 있지 않으므로 중지 할 수 없습니다. 자세한 내용은 여기를 참조하십시오 .
vadasambar

4

sh껍질입니다. 어떤 쉘이 시스템에 정확히 의존하는지. bash표준 쉘로 사용하는 시스템의 예 :

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash

$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)

sys-snap.sh어떤 종류의 쉘 스크립트가 될 것이므로 쉘 스크립트를 sh sys-snap.sh실행합니다.

&쉘 프로세스가 백그라운드에서 실행되도록합니다. 그렇지 않으면 &스크립트가 끝날 때까지 포 그라운드로 유지됩니다. 스크립트는 어느 쪽이든 작동하지만 추가 명령을 실행하기 전에 스크립트가 끝날 때까지 기다리는 것입니다.


1

서버가 hostgator에 있습니까?

이 스크립트 sys-snap.sh는 시스템의 모든 로그 파일과 데이터를 수집하기 위해 hostgator 팀이 작성한 특수 스크립트이므로 시스템 정보를 모니터링하고 수집 할 때 해당 출력을 사용합니다.


아니요 hostgator를 사용하지 않습니다.
user4951

1
@ J.Chang이 스크립트는 cPanel의 일부이며 Hostgator와 수백 개의 다른 호스트가 사용합니다.
472084

@ 472084, 어떤 cpanel 버전입니까?
Pacerier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.