0

シェルスクリプトが埋め込まれたコードをperlで書いています:

#!/usr/bin/perl

use strict;
use warnings;

our sub main {

    my $n;
    my $n2=0;


    $n=chdir("/home/directory/");

    if($n){
        print "change directory successful $n \n";

        $n2 = system("cd", "section");
        system("ls");
        print "$n2 \n";
    }
    else {
        print "no success $n \n";
    }
    print "$n\n";
}

main();

しかし、うまくいきません。私がlsをするとき。ls は新しいファイルを表示しません。それを行う別の方法は誰でも知っています。chdir() を使用できることはわかっていますが、それだけが問題ではありません。作成した他のコマンドは、単純にシェル コマンドを組み合わせたものです。それで、私のコンパイラがシステムごとに新しいプロセスを作成するのではなく、シェルスクリプトを同じプロセスに接続したままにするために、perlでcliを正確に使用する方法を知っている人はいますか...何をすべきか本当にわかりません。

編集は、質問を改善するために使用されています。質問が明確な場合は、編集を気にしないでください。編集:システムは単一のプロセスであるため、毎回死ぬという暴徒による良い点。しかし、私がやろうとしているのは、シェル スクリプトの制御の流れを決定するアルゴリズムに従う perl スクリプトを作成することです。では、これらすべてのシェル コマンドが同じプロセスに従うようにするにはどうすればよいでしょうか。

4

2 に答える 2

1

system("cd", "section");プログラムを実行しようとcdしますが、あなたのマシンにはそのようなプログラムはありません。

各プロセスには独自の現在の作業ディレクトリがあり、あるプロセスが別のプロセスの現在の作業ディレクトリを変更できないため、このようなプログラムはありません。(できればプログラムが左右に誤動作します。)

Perl プログラムにシェル スクリプトを実行させようとしているようです。これには、Perl でシェルを再作成する必要があります。(より具体的な目標には、より単純な解決策があるかもしれません。)


私がやろうとしているのは、シェル スクリプトの制御の流れを決定するアルゴリズムに従う perl スクリプトを作成することです。

最小限の変更:

指示/コマンドを要求するシェル スクリプトを作成します。Perl スクリプトで、Expectを使用してシェル スクリプトを起動し、回答/コマンドをフィードします。

于 2013-07-09T18:39:18.893 に答える