Comment supprimer le fichier de code fortran?
J'ai besoin de supprimer un fichier à partir d'un Fortran
code. Je suis sur ubuntu 12.04, x86_64
. Je ne comprends pas pourquoi la procédure décrite ci-dessous ne fonctionne pas. Merci de m'aider à clarifier la situation (en fait, sur certains systèmes, cela fonctionne, mais pas sur le mien).
Il est une autre façon: je peux appeler directement commande unix rm -f file
, mais j'aimerais savoir quel est le problème avec ma méthode. Merci.
L'étape 1. faire simple script del.sh et le mettre dans ~/bin
$ cat del.sh
[ $# -ge 1 ] && rm -f $1
$ chmod u+x del.sh; mv del.sh ~/bin
L'étape 2. Code Fortran, del.pour:
character*100 cmd
character*30 file
call getarg(1,file)
write(cmd,100) file
100 format('source del.sh ',a30)
call system(cmd)
end
L'étape 3. Compilez et exécutez:
$ ifort -o del del.for
$ ./del file
Résultats:
sh: 1: source: not found
Quel est le problème? Le simple "source del.sh fichier' œuvres, mais pas de code Fortran... qui est source de confusion.
Du code Fortran:
100 format('del.sh ',a30)
100 format('bash del.sh ',a30)
fonctionne parfaitement, mais
100 format('sh del.sh ',a30)
ne fonctionne pas. J'ai bash
installé, mais pas de csh
. Merci.
- Saviez-vous qu'un fichier peut également être supprimés en l'ouvrant avec le statut de "GRATTER" et puis le fermer. Ce est portable sur tous les systèmes d'exploitation et il n'est pas nécessaire de jouer avec les scripts, ou ce que la commande de systèmes d'exploitation est pour la suppression d'un fichier.
- tasse et @AlexanderVogt : merci pour les réponses. Oui, Fortran pouvez supprimer les fichiers, je le sais. L'idée de l'appel de script dans le code Fortran devrait rendre votre programme plus flexible: le script peut être facilement modifiés et adaptés à vos besoins sans avoir à recompiler le projet. Par exemple, au lieu de la suppression du fichier, j'ai peut-elle sauvegarde et ainsi de suite. Aussi un autre ma question était: pourquoi l'approche décrite ne fonctionne pas? Je suis juste curieux...
- l'ancien f77 standard en fait tout simplement dit "ZÉRO ne doit pas être spécifié avec un fichier nommé". Je ne sais pas comment portable c'est vraiment pour supprimer un fichier nommé de cette façon?
- Bon point. Suppose que la meilleure option est de s'ouvrir avec le statut d'ancien et de proximité avec les supprimer, comme suggéré par AlexanderVogt.
- Cela fonctionne si vous ajoutez #!/bin/sh en haut de votre script? Est-ce que /bin/sh existent?
- l'ajout de ligne d'en-tête comme
#!/bin/sh
n'aide pas et oui/bin/sh
existe (désolé - n'a pas remarqué votre question plus tôt).
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas laisser Fortran faire le travail pour vous? Ce code est portable (comparer la coupe du commentaire):
source
est une commande interne du shell qui charge un autre script dans le processus en cours (par opposition à son exécution dans un sous-processus).Vous n'avez pas besoin de
source
lors de l'appel d'un script à partir de Fortran, comme vous l'avez découvert. Les deuxdel.sh
etbash del.sh
travaillé, et l'un de ceux qui représentent la façon dont vous devriez le faire.La
system
appel invoque le shell pour exécuter votre commande, le shell dépend du système/environnement. Puisque vous obtenezsh: 1: source: not found
, la coque qui est invoquée n'a pas compris lasource
de commande, qui est unbash
builtin. Sur Ubuntu, par défaut/bin/sh
est liée à/bin/dash
, pas/bin/bash
, etdash
ne comprends passource
. Au lieu de cela, à l'aide de la.
(portable) builtin au lieu desource
:devrait fonctionner, si
del.sh
est dans votre$PATH
.C'est pourquoi je pense que l'on devrait tous les travaux:
Mais vous avez différemment? Dans ce cas, ça me dépasse 🙂
. del.sh
,sh del.sh
, etsource del.sh
versions ne fonctionnent pas etbash del.sh
,del.sh
fonctionne très bien. Il peut-être seulement à cause de ma configuration. Je ne comprends pas pourquoi il est si à l'exception de Jim réponse. Mais vous avez raison, nous devrions commencer à creuser avec le message d'erreur:sh: 1: source: not found
. J'ai essayé de nombreuses variantes, par exemplesh del.sh
ne fonctionne pas même en ligne de commande sidel.sh
est dans$PATH
, si je enregistrez le script en local puissh
œuvres. Merci!!!!source del.sh
) doivent travailler lorsqu'il est appelé avecsystem
commande en Fortran. Apparemment, il peut ou peut ne pas fonctionner. Je vais vérifier le shebang option - merci.Dans votre script shell, vous ne précisez pas le programme dans la première ligne. Essayez d'ajouter:
que la première ligne dans del.sh. Lorsque bash commence sans que, il peut exécuter le script avec la commande /bin/sh, ce n'est pas /bin/bash comme vous le souhaitez. (Je ne suis pas en mesure de confirmer pour l'instant, mais je sais que j'ai eu du mal dans le passé, si j'utilise bash-code spécifique mais oubliez pas de mettre le shebang en haut.) Lorsque bash commence avec la ligne, il va voir qu'elle doit être exécutée avec bash à la place. Depuis votre code s'affiche pour indiquer que l'appel à elle en tant que bash argument directement œuvres, je dirais que cela devrait résoudre votre problème.
Le meilleur de tous.
S'il vous plaît essayer
system
déclaration.