私のCコードで単純なシェルスクリプトを実行しようとしています。
単純化のために他のすべてを削除しました。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#define SHELL "/bin/sh"
int main()
{
execl("/home/amir/Desktop/OSAssignment/script.sh","script.sh",NULL);
return 0;
}
私のCプログラムとscript.shはDesktop->OSAssignment->にあります。
プログラムをコンパイルして実行しましたが、何も表示されません(execコマンドの下または上にprintfステートメントを置くと正常に印刷されます)。
これは私のシェルスクリプトファイルです
echo "Hi"
ベストアンサー1
明示的なインタプリタなしで実行されたスクリプトは実行可能であり、正しい#!
-line を持っている必要があります。
-lineが存在しない#!
か実行できない場合は、インタプリタを使用して次のようにスクリプトを実行する必要があります。
sh /path/to/script.sh
execl()
また、呼び出しが失敗したことを確認するには、戻りコードを確認する必要があります。失敗した場合は、perror()
エラーメッセージの印刷を使用できます。perror
システムのマニュアルを参照してください。