
子プロセスを生成せずに引数(ディレクトリ「cd」を変更することを意図)を受け入れる Perl プログラムがあります。
$FPATH/pcd.pl を使用すると、ユーザーはいくつかのディレクトリ候補などから選択できます。
秘訣は、生成されたプロセスに残されることなく、目的のディレクトリに到達することです。以下は、動作しない呼び出しです (ksh シェル)。
. $FPATH/pcd.pl $*|ディレクトリを読み込む . $dirをcdする
「$dir」に実際のディレクトリが返されても、「. cd $dir」では目的のディレクトリに到達できません。アドバイスをお願いします。ありがとうございます。
答え1
そこに書かれているコード行がよく分かりません。おそらく文字化けしているのでしょう。
私のアプローチは少し異なります。まず、プログラムの出力を取得して cd を作成するエイリアスを作成します。
alias mycd='cd $(select-dir)'
次に、プログラムにメニューを stderr に出力させ、選択肢を stdout に出力させます。たとえば、次のようになります。
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my @entries = ('..', grep {-d} glob("*"));
for my $i (0..$#entries) {
printf STDERR (" %2d: $entries[$i]/\n", $i);
}
$| = 1;
print STDERR ("cd to: ");
say($entries[<>]);