
У меня есть программа на Perl, которая принимает аргумент (намерение — сменить каталог «cd»), не порождая дочерний процесс.
$FPATH/pcd.pl позволяет пользователю выбирать среди нескольких возможных кандидатов на каталоги и т. д.
Хитрость заключается в том, чтобы попасть в нужный каталог, не оставаясь в порожденном процессе. Ниже приведен вызов, который я не могу заставить работать (оболочка ksh):
. $FPATH/pcd.pl $*|read dir . cd $dir
Независимо от того, какой реальный каталог возвращается в "$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[<>]);