2010-05-05 31 views
2

J'ai un script shell C qui appelle deux programmes C - l'un après l'autre avec un certain le traitement des fichiers avant, entre-deux et après.Comment regrouper du code C/C++ avec C-shell-script?

Maintenant, en tant que tel j'ai trois fichiers différents - un C shell script et 2 .c file s.

Je dois donner ce script à d'autres utilisateurs. Le problème est que je dois distribuer trois fichiers - que les utilisateurs doivent conserver dans le même dossier et ensuite exécuter le script.

Existe-t-il une meilleure façon de procéder?

[Je sais que je peux faire un fichier de code C sur ces deux ... mais je serai encore avec un script shell et un code C. En fait, les deux codes C font des choses complètement différentes ... donc je veux qu'ils soient séparés]

+0

Vous pouvez utiliser sh/bash au lieu de csh. J'utilise tcsh comme shell interactif, mais bash est beaucoup mieux pour les scripts. – KeithB

Répondre

3

On dirait que vous êtes inquiet que vos utilisateurs ne sont pas assez malins pour comprendre comment résoudre les problèmes comme les erreurs command not found et autres. Si absolument vous devez masquer la "complexité" d'une collection de fichiers, vous pourriez avoir votre script créer les autres fichiers. Dans la plupart des autres circonstances, je dirais que cette approche ne fera qu'augmenter la charge de travail de votre support, car les utilisateurs semi-expérimentés sont moins susceptibles de savoir comment résoudre le problème. Si vous choisissez de compter sur la présence d'un compilateur sur le système que vous utilisez, vous pouvez stocker le code C en tant que collection de commandes cat $STRING >> file.c pour créer vos deux fichiers C, que vous compilerez et utiliserez ensuite. Si vous souhaitez utiliser des programmes précompilés à la place, vous pouvez utiliser le même processus de base, mais utilisez xxd pour générer les chaînes dans votre script et inverser le processus de conversion pour obtenir des binaires de travail. Remarque: N'oubliez pas de chmod le binaire pour qu'il soit exécutable.

+0

@torak: merci! – Lazer

0

Utilisez un fichier zip ou tar? Et vous vous rendez compte que les fichiers .c ne sont pas exécutables, vous devez d'abord les compiler en &?

+0

Fichier zip ou tar par défaut n'est pas un exécutable, donc vous demandez aux utilisateurs d'extraire avant d'exécuter – DVK

+0

@Keith Randall: les commandes de compilation et de liaison sont là dans le script shell. – Lazer

1

Utilisez la commande shar pour créer une archive auto-extractible.

ou mieux encore d'utiliser unzipsfx avec l'option AUTORUN.

Ceci fournit aux utilisateurs UN fichier, et seulement une commande à exécuter (par opposition à l'un pour l'untarring et l'autre pour l'exécution).

REMARQUE: La commande unzip à exécuter doit utiliser l'option "-n", de cette façon seule la première exécution extrairait les fichiers et la suivante ignorerait l'extraction.

+0

Pourquoi "ou mieux encore utiliser unzipsfx"? En ajoutant l'exécutable unzip à l'archive, sa plate-forme est beaucoup moins indépendante que shar. –

+0

@jcordasc - shar AFAIK n'autorise pas l'exécution automatique (par exemple, exécute automatiquement votre script lors du désarchivage) – DVK

0

Vous pouvez inclure le code c à l'intérieur du script shell comme here document:

#!/bin/bash 

cat > code.c << EOF 
line #1 
line #2 
... 
EOF 

# compile 
# execute 

Si vous voulez obtenir la fantaisie, vous pouvez tester l'existence de l'exécutable et sauter les compiler si elles existent.

Si vous faites beaucoup de programmation shell, le reste de la Advanced Bash-Scripting Guide mérite également d'être consulté.