こんにちは、このプログラムを picodb という実行可能ファイルにコンパイルし、Linux でシェル bash スクリプトを使用して実行しようとしています。
int main(int argc, char** argv) {
Debbuger DB(argc,argv);
char command[12];
int len;
bool valid;
while(1)
{
valid=true;
cin.clear();
cin>>command;
len=strlen(command);
if(command[0]=='t')
{
if(strcmp(command,"trace")==0 || len==1)
{
cin>>command;
valid=DB.Trace(command);
}
else valid=false;
}
else if(command[0]=='r')
{
if(strcmp(command,"redirect")==0 || len==1)
{
char stream[6],file[15];
cin>>stream; cin>>file;
valid=DB.Redirect(stream,file);
}
else valid=false;
}
else if(command[0]=='b')
{
if(strcmp(command,"blocking-mode")==0 || len==1)
{
cin>>command;
valid=DB.Blocking_mode(command);
}
else valid=false;
}
else if(command[0]=='l')
{
if(strcmp(command,"limit-trace")==0 || len==1)
{
int n;
cin>>n;
valid=DB.Limit_Trace(n);
}
else valid=false;
}
else if(command[0]=='g')
{
if(strcmp(command,"go")==0 || len==1)
{
DB.Go(argv[1]) ;
}
}
else if(command[0]=='q')
{
if(strcmp(command,"quit")==0 || len==1)
return 0;
else
valid=false;
}
else if(command[0]=='h')
{
if(strcmp(command,"help")==0 || len==1)
DB.Help();
else valid=false;
}
else valid =false;
if(valid==false)
{
cout<<"Invalid command"<<endl;
}
}
}
スクリプトは次のとおりです。
#!/bin/bash
./picodb << EOF
t file_management
r stdin input.txt
EOF
しかし、このスクリプトを実行すると、プログラムは無限ループに入り、「t file_management」を取得し、この入力を停止または変更することはありません。文字列コマンドを出力しましたが、常に最初の引数に値 " t file_management" が含まれています。私は自分が間違っていることを理解できません。ターミナルでプログラムを実行して、手動で入力してみましたが、正常に動作しました。
編集:明確にするために、これはユーザーインターフェイスであると想定されています.quitと入力するまでループから抜け出すことはありません.問題は、bashを介して読み取られるものが無限に繰り返されることです.