Ja. Hier ist etwas, das ich für meinen eigenen Gebrauch geschrieben habe, um alte Befehlszeilen-Fortran-Programme zu verpacken, die nach Dateipfaden fragen. Es ermöglicht das Entweichen zurück zur Shell für z.B. läuft 'ls'. Dies funktioniert nur in einer Richtung, d. H. Es fängt Benutzereingaben ab und gibt sie an ein Programm weiter, aber Sie erhalten das meiste von dem, was Sie wollen. Sie können es an Ihre Bedürfnisse anpassen.
#!/usr/bin/perl
# shwrap.pl - Wrap any process for convenient escape to the shell.
# ire_and_curses, September 2006
use strict;
use warnings;
# Check args
my $executable = shift || die "Usage: shwrap.pl executable";
my @escape_chars = ('#'); # Escape to shell with these chars
my $exit = 'exit'; # Exit string for quick termination
open my $exe_fh, "|$executable @ARGV" or die "Cannot pipe to program $executable: $!";
# Set magic buffer autoflush on...
select((select($exe_fh), $| = 1)[0]);
# Accept input until the child process terminates or is terminated...
while (1) {
chomp(my $input = <STDIN>);
# End if we receive the special exit string...
if ($input =~ m/$exit/) {
close $exe_fh;
print "$0: Terminated child process...\n";
exit;
}
foreach my $char (@escape_chars) {
# Escape to the shell if the input starts with an escape character...
if (my ($command) = $input =~ m/^$char(.*)/) {
system $command;
}
# Otherwise pass the input on to the executable...
else {
print $exe_fh "$input\n";
}
}
}
Gibt es einen Weg, um Dinge wie die Pfeiltasten und die Geschichte zu bekommen mit Ihrem Skript zu arbeiten? – Annan
Nicht, dass ich davon weiß. Dies sind Shell-Builtins und gehen davon aus, dass die Shell interaktiv läuft (was in diesem Fall nicht der Fall ist). Wenn Sie mehr Funktionalität als das wollen, dann suchen Sie wirklich Ihre eigene Shell zu schreiben - was nicht so schwer ist wie es klingt. Siehe z.B. http://linuxgazette.net/111/ramankutty.html –