Fehler "Undefinierte Variable" im Shellskript der Sun Grid Engine

1291
Eamorr

Ich habe das folgende Sun Grid Engine-Übergabeskript:

#!/bin/sh # sun grid engine cluster  # use current working directory #$ -cwd  # merge error output into standard output stream #$ -j yes #$ -o generate_databases.log  # request to cpu number #$ -pe make 4  currentdir=`/bin/pwd` echo "current working directory: $currentdir" 

Und hier ist meine Ausgabe

/home/eamorr/sge currentdir: Undefined variable. 

Wie Sie sehen, gibt die Variable 'currentdir' den Wert undefined zurück.

Wie kann ich das beheben?

1
Sind Sie sicher, dass `/ bin / pwd` richtig ist? Funktioniert es, wenn es manuell aufgerufen wird? Bobby vor 11 Jahren 0
Die Tatsache, dass das Skript das aktuelle Verzeichnis (`/ home / eamorr / sge`) ausgibt, deutet darauf hin, dass es` pwd` findet. Und selbst wenn nicht, sollte es diesen Fehler nicht verursachen; `foo = \` / no / such / command \ `` sollte immer noch einen Null-String für 'foo` zuweisen oder das Skript abbrechen. Scott vor 11 Jahren 0

1 Antwort auf die Frage

1
Stefan Seidel

Are you sure it's bash? The backtick operator is not portable. There are several ways to (possibly) fix this:

  1. use #!/bin/bash in the first line to make dure it's bash not anything else
  2. avoid the backticks: currentdir=$(pwd) or currentdir=$(/bin/pwd)
  3. or even simpler currentdir=$PWD
Hallo, danke für den Kommentar. Ich bin nicht sicher, ob es bash ist ... Ich habe `currentdir = $ (/ bin / pwd)` ausprobiert, aber es wurde `Illegal Variablenname` zurückgegeben Eamorr vor 11 Jahren 0
Es ist also höchstwahrscheinlich kein Bash. Probieren Sie dann Option (1) aus, aber tatsächlich wird wahrscheinlich eine proprietäre SUN-Shell verwendet, die sich ganz anders verhält als andere bekannte Shells. Stefan Seidel vor 11 Jahren 0