サブルーチンなどの他のシェルスクリプトを呼び出すには?

サブルーチンなどの他のシェルスクリプトを呼び出すには?

別のシェルスクリプトを呼び出して、完了するまでどのように待つことができますか?

入力パラメータを渡して結果コードをもう一度受け取りたいです。残りのコードを実行し続けます。

答え1

どのシェルを使っているのか言っていないので、bashを仮定すれば、

#!/bin/bash

/path/to/other/script arg1 arg2
rc=$?

rc変数には他のスクリプトの戻りコードが含まれます。達成しようとしている目標に応じてより多くのことを試すこともできますが、質問は非常にあいまいなので、ここで始めるのが最善です。

答え2

実行する作業に応じて、2つの主な可能性があります。

  • 他のプログラムと同様に、他のスクリプトを呼び出すことができます。

    /path/to/other/script foo bar
    echo "The script exited with status $?"
    
  • 他のスクリプトを「インポートする」ことができます。つまり、実行中のシェルにそれを読み、その内容を実行させることができます。このようにして呼び出されたスクリプト(変数の割り当て、現在のディレクトリの変更など)は、呼び出し元の環境を変更します。他のスクリプトの組み込み関数.(ただポイント)を呼び出します。一部のシェルにはsource異なる名前があります.。このように引数を渡すことはできませんが(一部のシェルでは可能ですが、すべてではありません)、呼び出されたスクリプトは呼び出し元のすべての変数にアクセスできます。

    . /path/to/other/script
    

どちらか他のスクリプトへのパスを省略すると、自動的に現在のディレクトリが検索されます$PATH。一部のシェルは現在のディレクトリを自動的に探しますが、他のスクリプトはそうではありません(標準動作ではありません)。

答え3

これを行う別の方法があります。

実際のKorn Shellを使用している場合(pdkshはわからない)、関数を動的にロードできます。

PATH どこかに「main」というファイルを作成します。

#!/bin/ksh
echo "Main ksh script"
echo "Calling georgi, probably in another file"
georgi $1 $2 $3
echo "Back from georgi"
franco $1 $2 $3

たとえば、別の場所に「georgi」というファイルを作成します/tmp

function georgi {
        echo "Enter function georgi $1 $2 $3"
}

function franco {
        echo "Enter function franco $1 $2 $3"
}

ファイルをデフォルトの実行可能にします。 「georgi」ファイルの作成いいえ実行可能。 FPATHという変数をエクスポートします。

export FPATH=/tmp

「main」ファイルを実行します。

% ./main aaa bbb c123 
Main ksh script
Calling georgi, probably in another file
Enter function georgi aaa bbb c123
Back from georgi
Enter function franco aaa bbb c123

これはやや曖昧で、最初に呼び出された関数の後に自動ロードされたファイルの名前を指定し、PATHとFPATHにある場合は自動ロードされたファイルを実行可能ファイルとしてマークしないなど、正確に正しい操作を実行する必要があります。

関連情報