1

Linux用のコマンドのスター文字に少し問題があります-ディストリビューションを見つける必要があります。このキャラクターの魔女、例えば「fedora」を置き換えると、このコマンドは良い結果をもたらします。この場合、次のように記述します。/ bin / cat:/ etc / *-release:ディレクトリまたはファイルは存在しません。

私のコードは次のとおりです。

    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.FileName = "cat";
    p.StartInfo.Arguments = "/etc/*-release";
    p.Start();
    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

よろしくお願いします。マテイ

4

1 に答える 1

2

シェルから実行する場合cat /etc/*-releaseシェル*は、一致するファイルがある場合はそのリストに展開する責任があります。

プログラムを自分で直接実行する場合(ここではProcessインターフェイスを使用して実行しているように)、シェルの動作を自分で再作成する必要があります。catフル機能のプログラミング言語からファイルを読み取るために実行するのは少しばかげているので、これは実際には最善です-確かに、この言語は論理的に同等のものを提供します:

list = glob(/etc/*-release)
foreach file in (list):
    fd = open(file, "read");
    contents = read(fd)
    close(fd)
    dosomething_with(contents)

glob()そこにあるビットを置き換えるために、好きなメカニズムを使用できます。仲間のスタッカーが別の答えで彼自身のメカニズムを提供しましたglob()

于 2012-04-23T00:34:41.933 に答える