Ich rufe ein Perl-Programm von einem Bash-Skript auf. Dieses Perl-Skript funktioniert, wenn ich seine Argumente über die Befehlszeile auszeichne, aber wenn ich es vom Bash-Skript aus anrufe, gibt es einen Fehler.
Hier ist der relevante Teil des Bash-Skript:
for ((i=1; i<=$z; i++))
do
if (($i%2 == 0)); then
~/Desktop/SNP_finder.pl `awk 'FNR == '$i <"${d}".fasta` `awk ...` "${d}".txt
else
...
und das Skript Perl:
local $, = "\t";
my @read = split('', $ARGV[0]);
my @reference = split('', $ARGV[1]);
my $filename = $ARGV[2];
...
open(my $fh, '>>', $filename) or die;
print $fh "Reference ", "SNP ", "Location\n";
...
I SNP_finder.pl
fein aus dem Terminal-Fenster laufen kann, aber wenn ich eine Pipe an dieser Bash Skript gibt mir den Fehler Use of unitialized value $filename
und behauptet, dass der Wert $filename
''
ist.
Bitte zeigen Sie alle im Skript verwendeten 'awk'-Befehle an. Wie führst du den Befehl aus dem Terminalfenster aus? –
Ich weiß, dass die "awk" Empfehlungen gut sind, weil die Verrohrung gut funktioniert, ohne den Dateinamen hinzuzufügen. Aber sie sind: 'awk 'FNR ==' $ i <" $ {d} ". Fasta' und' awk 'FNR == 2' <"$ {d}". Fasta' – quantik
Vielleicht könnte es sich lohnen Kopieren Sie Ihren '~/Desktop/SNP ...' Befehl, außer den Namen des 'perl' Programms in' echo' zu ändern, um zu sehen, was die 'awk' Befehle (und die Dateinamenerweiterung) in Ihrem Skript werden? Es scheint, dass, wenn es von der Befehlszeile aus arbeitet, aber nicht innerhalb des Skripts, etwas in der Umgebung des Skripts anders ist (irgendeine nicht initialisierte Variable oder eine andere Einstellung oder ein anderer Ort), die das Problem verursacht. Sie wissen, was Ihnen die 'awk'-Befehle in der Befehlszeile geben, aber was ist mit dem Skript? –