하나의 sh 파일에서 다른 bash sh 스크립트를 실행하는 방법은 무엇입니까?

하나의 sh 파일에서 다른 bash sh 스크립트를 실행하는 방법은 무엇입니까?

7개의 서로 다른 .sh 파일이 있는데, 각각은 서로 다른 작업을 수행하며 주로 장치를 진단합니다. 예: FanPsu.sh 이것이 출력입니다.

 FANs Status 
    FAN1A | 38h | ok | 29.96  | 11696 RPM   
    FAN1B | 39h | ok | 29.97  | 11868 RPM   
    FAN2A | 3Ah | ok | 29.98  | 11696 RPM   
    FAN2B | 3Bh | ok | 29.99  | 11954 RPM   
    FAN3A | 3Ch | ok | 29.100 | 11610 RPM   
    FAN3B | 3Dh | ok | 29.101 | 12040 RPM   
    FAN4A | 3Eh | ok | 29.102 | 11696 RPM   
    FAN4B | 3Fh | ok | 29.103 | 11954 RPM   

 PSUs Status 
    PSU Mismatch   | 17h | ns | 144.96 | Disabled   
    Status         | 52h | ok | 10.1   | Presence detected   
    Status         | 53h | ok | 10.2   | Presence detected   
    PSU Redundancy | 18h | ok | 144.96 | Fully Redundant 

Drives.sh , 이것이 출력입니다

 Check Drives Status 
    Slot Number        : 0   
    Drive's position   : DiskGroup 0  
    Media Error        : 0   
    Other Error        : 0   
    Predictive Failure : 0   
    Raw Size           : 558.911 GB [0x45dd2fb0 Sectors]
    Firmware state     : Online, Spun Up 
    Inquiry Data       : SEAGATE ST600MM0069 ST31WFJ0RVMG 
    Foreign State      : None   
    Media Type         : Hard Disk Device 
    Temperature        : 39C (102.20 F) 
    S.M.A.R.T alert    : No   

    Slot Number        : 1   
    Drive's position   : DiskGroup 0  
    Media Error        : 0   
    Other Error        : 0   
    Predictive Failure : 0   
    Raw Size           : 558.911 GB [0x45dd2fb0 Sectors]
    Firmware state     : Online, Spun Up 
    Inquiry Data       : SEAGATE ST600MM0069 ST31WFJ0R80Z 
    Foreign State      : None   
    Media Type         : Hard Disk Device 
    Temperature        : 39C (102.20 F) 
    S.M.A.R.T alert    : No   

    Slot Number        : 2   
    Drive's position   : DiskGroup 1  
    Media Error        : 0   
    Other Error        : 0   
    Predictive Failure : 0   
    Raw Size           : 5.821 TB [0x2e93432b0 Sectors]
    Firmware state     : Online, Spun Up 
    Inquiry Data       : SEAGATE XS6400LE70084 0001HSR032V2 
    Foreign State      : None   
    Media Type         : Solid State Device 
    Temperature        : 42C (107.60 F) 
    S.M.A.R.T alert    : No   

 Check Volumes Status 
    Name               : Virtual Disk0
    RAID Level         : 1 
    State              : Optimal 
    Number Of Drives   : 2 

    Name               : Virtual Disk1
    RAID Level         : 0 
    State              : Optimal 
    Number Of Drives   : 1 

그래서 한 번에 하나의 .sh 파일을 제공한 순서대로 하나씩 실행하고 싶으므로 결국에는 각 스크립트를 실행하고 마치 단일 .sh 파일인 것처럼 출력을 제공합니다. 각 .sh 파일을 한 번에 실행하고 싶지 않고, 단 하나의 .sh 파일만 실행하면 모든 .sh 파일이 실행되기를 원합니다.

답변1

이것에 대해 까다로운 것은 없습니다. 쉘 스크립트는 다른 쉘 스크립트를 실행할 수 있습니다. 스크립트를 실행 가능하게 만들었다고 가정하면( chmod a+x FanPsu.sh등) 다음을 수행할 수 있습니다.

#!/bin/bash
FanPsu.sh 
Drives.sh
AnotherScript.sh
# etc.

또는 아직 수행하지 않은 경우:

#!/bin/bash
bash FanPsu.sh 
bash Drives.sh
bash AnotherScript.sh
# etc.

이를 다른 쉘 스크립트(예: AllScripts.sh)로 저장하고 실행 가능하게 만든 후( chmod a+x AllScripts.sh) 실행하십시오.

요즘에는 쉘 인터프리터의 여러 인스턴스가 서로 실행되는 데 따른 오버헤드가 매우 낮습니다. 그러나 어떤 이유로 단일 인스턴스를 갖고 싶다면 스크립트를 함께 연결하는 것이 나을 수도 있지만 아마도 그것에 의존하지는 않을 것입니다. 정확합니다. 어쨌든 별도의 파일로 유지 관리하는 것이 더 쉬울 것입니다. 또 다른 옵션은 각 스크립트를 쉘 함수로 변환한 다음 함수 정의를 사용하여 파일을 가져온 다음 함수를 호출하는 것입니다. 하지만 실제로는 필요하지 않습니다. 다른 스크립트에서 스크립트를 실행하는 것은 전혀 문제가 없습니다.

스크립트가 실패하는 경우 언제든지 실행을 중지하려면 shebang에 올바른 옵션을 제공하거나 수행 방법을 모르는 경우 스크립트 호출에 조건을 추가하면 됩니다. 여기에서 설명할 수 있습니다.

관련 정보