2

コードの特定の部分に問題があります。Java プログラムがいくつかの事前定義された変数を取り、UNIX の「sed」関数を使用して、事前に作成されたシェル スクリプトの文字列「AAA」と「BBB」を置き換えると想定されていることです。これを行うには 3 つの方法があります。「sed」を使用してファイル内の文字列を置き換え、出力を別のファイルに書き込む方法です。「rm」コマンドで元のファイルを削除するもの。「mv」を使用して出力ファイルの名前を元のファイルの名前に変更するもの。シェル スクリプトの 3 つのコピーが 3 つの異なるディレクトリにあり、それぞれを固有の変数に置き換える必要があります。

置換は 3 つのシェル スクリプト ファイルすべてで発生するはずですが、2 つしか発生しません。3 番目のシェル スクリプトでは、そのファイルのバイト サイズが 0 であるため、プロセスが完了していないように見えます。置き換えられないファイルは完全にランダムであるため、実行のたびに同じファイルが機能しないわけではありません。

このエラーが発生する理由がわかりません。誰にも可能な解決策はありますか?コードは次のとおりです。

    public void modifyShellScript(String firstParam, String secondParam, int thirdParam, int fourthParam, String outfileDirectoryPath) throws IOException{
    String thirdDammifParamString = "";
    String fourthDammifParamString = "";
    thirdDammifParamString = Integer.toString(thirdDammifParam);
    fourthDammifParamString = Integer.toString(fourthDammifParam);
    String[] cmdArray3 = {"/bin/tcsh","-c", "sed -e 's/AAA/"+firstDammifParam+"/' -e 's/BBB/"+secondDammifParam+"/' -e 's/C/"+thirdDammifParamString+"/' -e 's/D/"+fourthDammifParam+"/' "+outfileDirectoryPath+"runDammifScript.sh > "+outfileDirectoryPath+"runDammifScript.sh2"};
    Process p;
    p = Runtime.getRuntime().exec(cmdArray3);
}

public void removeOriginalShellScript(String outfileDirectoryPath) throws IOException{
    String[] removeCmdArray = {"/bin/tcsh", "-c", "rm "+outfileDirectoryPath+"runDammifScript.sh"};
    Process p1;
    p1 = Runtime.getRuntime().exec(removeCmdArray);
}

public void reconvertOutputScript(String outfileDirectoryPath) throws IOException{
    String[] reconvertCmdArray = {"/bin/tcsh","-c","mv "+outfileDirectoryPath+"runDammifScript.sh2 "+outfileDirectoryPath+"runDammifScript.sh"};
    Process reconvert; 
    reconvert = Runtime.getRuntime().exec(reconvertCmdArray);
}
4

1 に答える 1