
Eu tenho um programa Perl que aceita um argumento (a intenção é alterar o diretório “cd”) sem gerar um processo filho.
$FPATH/pcd.pl permite ao usuário escolher entre vários possíveis candidatos a diretório, etc.
O truque é chegar ao diretório desejado sem ficar em um processo gerado. A seguir está a invocação que não consigo trabalhar (ksh shell):
. $FPATH/pcd.pl $*|ler dir . cd $dir
Não importa qual diretório real seja retornado para "$dir", o ".cd $dir" nunca chega ao diretório desejado. Por favor, avise. Obrigado.
Responder1
Não entendo muito bem sua linha de código; talvez tenha sido distorcido.
Minha abordagem seria um pouco diferente: primeiro, crie um alias que pegue a saída de um programa e faça um cd para isso:
alias mycd='cd $(select-dir)'
Em seguida, faça o programa imprimir o menu em stderr e a escolha em stdout, por exemplo assim:
#!/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[<>]);