L'exécution IDL programme de bash avec des variables
J'ai écrit un programme en IDL pour générer des nuages de points basé sur des arguments de ligne de commande. Je peux appeler avec succès le programme directement dans le terminal comme ceci:
idl -e "scatterplot_1_2d_file.pro" $infile $outfile $title, $xtitle $ytitle $xmin $xmax $ymin $ymax $échelle de temps
Où $* reportez-vous à certains littéraux de chaîne tapée. Le problème c'est que je pensais que je serais en mesure de simplement taper que très la ligne, en mettant dans les noms de variable à la place de la littéraux, dans un script bash, et de générer un million de nuages de points alors que je suis en pause. Malheureusement, si je le fais de cette façon, j'obtiens l'erreur:
idl: l'option-e ne peut pas être spécifié avec des fichiers de commandes
Donc ma prochaine tentative a été d'essayer d'écrire ces commandes à un IDL fichier de commandes que je ne puis exécuter.
Qui tentent ressemble à ceci:
#!/bin/bash
indir=/path/to/indir/
outdir=/path/to/outdir/
files=`ls $indir`
batchfile=/path/to/tempbatchfile.pro
echo .r "/path/to/scatterplot_1_2d_file.pro" >> $batchfile
for file in $files
do
name=${file%\.*}
echo scatterplot_1_2d_file $indir$name.txt $outdir$name.jpg $name "Gauge Precipitation (mm)" "NMQ Precipitation (mm)" "*" "*" "*" "*" 2 >> $batchfile
done #done file
echo exit >> $batchfile
idl <<EOF
@/path/to/scatterplot_1_2d_file
EOF
rm $batchfile
Je ne sais pas si la majeure partie des erreurs de script génère sont pertinentes, donc je vais juste poster le début et je vais poster le reste plus tard si vous en avez besoin:
[foo]$ bash script_thing.sh
IDL Version 6.3 (linux x86 m32). (c) 2006, Research Systems, Inc.
Installation number: 91418.
Licensed for personal use by XXXXXXXXX only.
All other use is strictly prohibited.
PRO scatterplot_1_2d_file
^
% Programs can't be compiled from single statement mode.
At: /path/to/scatterplot_1_2d_file.pro, Line 1
% Attempt to subscript ARGS with <INT ( 1)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 2)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 3)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 4)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 5)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 6)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 7)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 8)> is out of range.
% Execution halted at: $MAIN$
% Attempt to subscript ARGS with <INT ( 9)> is out of range.
% Execution halted at: $MAIN$
Je ne sais pas si je suis juste en train de faire quelque chose qui ne peut pas être fait, mais il ne SEMBLE pas comme elle. Des conseils?
OriginalL'auteur Frank Harris | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
Il y a deux façons d'aller à ce sujet: à l'aide de
COMMAND_LINE_ARGS
ou la construction d'un valide IDL appel de routine. Cette routine utilise à la fois:L'appeler à partir de la ligne de commande dans l'une des deux façons suivantes:
OriginalL'auteur mgalloy
Je ne sais pas IDL, mais voici des correctifs pour votre script Bash qui sont susceptibles de vous aider:
Pour fixer votre version en ligne de commande, utilisez le cite:
Toujours citer les variables quand ils sont étendus.
OriginalL'auteur Dennis Williamson