シェルスクリプトからシェルスクリプトを実行する方法

シェルスクリプトからシェルスクリプトを実行する方法

私はMac OSXでbashを使用しています。

私はというシェルファイルを持っていますmyshell.sh。私はそれをたくさんするために使います。

以下を含む Entry.sh ファイルがあります。

# content of entrance.sh
./myshell.sh arg1 arg2
./myshell.sh arg3 arg4

しかし、実行するとentrance.shエラーが発生します。

./entrance.sh: line 2: myshell.sh: command not found

myshell.sh を直接実行できます。

どうですか?

答え1

./myshell.shスクリプトが次のmyshell.sh場所にあることを示します。現在の目次。このスクリプトを他の場所で実行すると機能しません。あなたできるフルパスを使用してください。しかし、この場合、唯一の合理的な解決策は次のとおりです。

  1. myshell.shあなたの場所に場所を追加します$PATHmyshell.sh実際にはどこにでも呼び出す必要があります)。したがって、PATH="$PATH":/dir/of/myshell外部スクリプトの先頭に追加します。

  2. myshell.shどこからでもアクセスできるようにどこかに配置します(システムの他のすべての実行可能ファイルと同様)。その/usr/local/bin可能性が最も高いです。通常役に立つ場合にのみ、このスクリプトを使用してください。

スクリプトがそのディレクトリのローカルファイルに依存している場合(他の場所で呼び出すと競合が発生して破損する可能性があります)、そのファイルを現在の形式にしておく必要があります(実際に呼び出すべきではない場所で呼び出すのを防ぎます)。あるいは、cdスクリプト内で正しい場所に移動するために使用されます。注意してください。シェルスクリプトで絶対パスを使用します。cd問題が発生し、もはや失敗すると問題が発生しやすくなります。ディレクトリをエスケープして、親ディレクトリ全体を乱雑にすることができます。..cd

ほとんどの場合、ソリューション#1をお勧めします。

答え2

cdYoMismoが提案したように、スクリプトまたはスクリプトディレクトリでフルパスを使用する必要があります。

# content of entrance.sh
/full/path/myshell.sh arg1 arg2
/full/path2/myshell.sh arg3 arg4

または(しかし、これは非常に醜い解決策です)

# content of entrance.sh
cd /full/path
./myshell.sh arg1 arg2
cd /full/path2
./myshell.sh arg3 arg4

答え3

私の意見では、./myshell.shに実行権限がないか( 'chmod + x myshell.sh'を実行する必要があります)、現在のディレクトリにはありません(entry.shと同じディレクトリに移動する必要があります)。

./entrance.shと同じディレクトリで./myshellを呼び出してみてください。同じ結果が得られますか?

あるいは、スクリプトの実行についてより確実にするには、そのスクリプトから bash を直接呼び出すこともできます。

/bin/bash ./myshell arg1 arg2

関連情報