2016-05-04 5 views
1

system()関数に問題があります。System()のパラメータC

コマンドx回を実行する小さなプログラムを作成したいと思います。

次のコードは、コマンドを起動することです:私は私のシェルで直接それを書くとき

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/wait.h> 
#include <string.h> 
#include <unistd.h> 

int main(int argc, char *argv[]) 
{ 
    char command[100]; 
    strcpy(command, "(time lance REF_CLIENT_FOUR002542_C FE-ERPCP-REF_CLIENT_FOUR.zip F > result.txt) 2> time.txt"); 
    system(command); 
    return 0; 
} 

私のコマンドが働いているが、私はこのプログラムを使用するとき、私はこのエラーを取得:

./lance: [[: introuvable 
./lance: [[: introuvable 
./lance: [[: introuvable 
./lance: [[: introuvable 
./lance: erreur de syntaxe ligne 34: `(' inattendue 

このエラー意味:

./lance: [[ : not found
./lance: syntax error at line 34 : ' ( ' unexpected

私はそのシステムがのように私のコマンドを実行しようと思いますですが、これはプログラムではなくコマンドのように実行したいので時間ランスです...

私はすでにループなしでこのプログラムを実行しようとしましたが、それでも同じです。

私はまた、ls -lのような簡単なコマンドを試しました。それは働いている。

誰かが私を助けることができれば、私はとても感謝しています!

編集:私の目的は、実行時間に関するデータを得るためにスクリプトを実行することです。そのため、私はこのプログラムを書いています。

EDIT2:これは私のスクリプト「ランス」の一部です:

if [[ $# -ne 3 ]] # 1st not found 
then 
    echo "bla" 
    exit 1 
fi 

if [[ ! -f ${1} ]] # 2nd not found 
then 
    echo "bla" 
    exit 1 
fi 

if [[ ! -f ${2} ]] # 3rd not found 
then 
    echo "bla" 
    exit 1 
fi 

if [[ "${3}" != "F" && "${3}" != "Z" ]] #4th not found 
then 
    echo "bla" 
    exit 1 
fi 

if [[ -d TRAVAIL ]] # This is the line 34 
then 
    mv TRAVAIL TRAVAIL_$(date +%d%m%y%H%M%S) 
fi 

EDIT3:!間違っていたものを見つけるために私を助けてALKためのおかげで私のコードですが、私は#/ binが/追加しました私のスクリプトの1行目でbashを実行し、今は動作しています。

+1

コマンドラインから '(time lance REF_CLIENT_FOUR002542_C FE-ERPCP-REF_CLIENT_FOUR.zip F> result.txt)2> time.txt'と入力するとどうなりますか? –

+0

Cであなたのユースケースを実装するのはちょっとしたことでナットを壊すようなものです。いくつかの基本的なシェルスクリプトを見たいと思っています。 – alk

+0

'system()'のやり方でコマンドを実行しようとしましたか?私。 '/ bin/sh -c"(time lance ...) "' - '$ SHELL'についていくつか仮定しているかもしれません。 –

答えて

0

./lance: syntax error at line 34 : '(' unexpected

ライン34上の予期しない(文字があります。スクリプトをデバッグする

は、スクリプトへの最初のステートメントとして、この

set -x 

を置きます。

+0

私のコードを更新しました。私が理解していないことは、私がプログラムで動作している行コマンドで直接スクリプトを実行するときです。私はあなたのヒントをデバッグするために使用しましたが、見つからなかったすべての./lanceは最初の投稿時に(私は最初の投稿にこのコード部分を追加します) –

+0

@ArthurDessez:エラー './lance:[[:introuvable' does "* lance not found *"を意味するのではなく、 '。/ lance'ファイル中の' '[' "not found *"でした。 – alk

+0

@ArthurDessez:スクリプトが実行する必要のあるシェルを定義していることを確認してください。bashを使ってスクリプトを実行させる場合は、この '#!/ bin/bash'をスクリプトの第1行に入れてください。 'system()'は '/ bin/sh'を使います。あなたのテストを実行するログインはおそらく別のものを使用します。また、 '/ bin/sh'がリンクであるかどうか、そして何をチェックしたいのです。 – alk

1

system()を使用する場合、fork()を入力する必要はありません。後者ははるかに高いレベルの呼び出しです、それはシェルをフォークし、コマンドを実行するように頼んでいます。スクリプトlance

+1

' system() 'への呼び出しは並列ではなく、順番に実行されるので、プログラムの振る舞いは異なります。 – alk

+0

私はfork()を削除しました –

+0

@ArthurDessez: "*私はfork()*を取り除いたので、あなたが期待していない可能性が高いのでwait()'も削除します。ここでRTFMしてください:http://man7.org/linux/man-pages/man2/wait.2.html – alk

関連する問題