ある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 

そのため、一度に1つの.shファイルを提供した順番で1つずつ実行したいので、最終的には各スクリプトを実行し、まるで単一の.shファイルのように出力を提供します。各.shファイルを一度に実行したくないので、1つの.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に正しいオプションを指定するか、実行方法がわからない場合は、スクリプト呼び出しに条件を追加するだけです。ここで説明できます。

おすすめ記事