2010-07-11 6 views
1

Je veux savoir s'il existe un moyen d'utiliser Bash (Shell Script) pour faire des pages Web, comme Perl, C++ et d'autres via CGI. Et s'il y a un moyen, où je peux trouver un bon hébergement gratuit pour cela?Shell script pour le Web

+0

Il serait utile de fournir plus de détails sur ce que vous essayez de faire. – rboarman

+0

pourquoi voudriez-vous faire ceci? – eruciform

+0

Je veux utiliser Shell Script comme les gens utilisent PHP. Et je le veux, parce que je me demande si je pourrais porter des projets que j'ai réalisés en utilisant Bash sur une page web. –

Répondre

5

Ceci est certainement possible, et à peu près n'importe quel hébergement partagé basé sur Linux (ou basé sur BSD, je suppose) serait capable de le faire. Je l'ai fait pour de petites pages de test, etc sur mon compte à bas prix 1 & 1.

Sur mon hôte, je viens d'appeler un fichier "foo.cgi", et j'ai mis la ligne #!/bin/sh en haut. Fonctionne bien. Bien sûr, c'est un gâchis pour tout ce qui est compliqué.

#!/bin/sh 

cat <<banana 
Content-Type: text/html 

<html> 
    <head> 
    <title>Hello, World!</title> 
    </head> 
    <body> 
    <h1>Hello, World!</h1> 
    </body> 
</html> 
banana 

De toute évidence, un vrai script pourrait faire autre chose. Les informations HTTP sont généralement dans les variables d'environnement, mais je ne peux pas me rappeler exactement comment cela fonctionne et cela peut varier en fonction du serveur web impliqué.

+0

Ensuite, vous faites cela en utilisant CGI? Pourquoi vous utilisez 'cat'. Je ne peux pas utiliser 'echo'? –

+0

Bien sûr, vous pouvez utiliser 'echo', mais la syntaxe pour renvoyer quelque chose qui contient des retours à la ligne est plus bizarre. –

+0

@Pointy: Vous avez dit que vous avez utilisé 1 & 1. Alors c'est la société d'hébergement qui devrait travailler avec CGI et Bash? –

1

Même s'il est possible de le faire, il ne serait pas pratique d'essayer d'utiliser des scripts shell pour servir de pré-processeur pour les pages Web. Je suppose que vous pourriez toujours créer un gestionnaire Apache qui déclencherait votre script shell et Apache prendrait la sortie de votre script shell et le renvoyer au client. Cependant, l'utilisation d'un script shell de cette manière poserait de nombreux problèmes de sécurité (dont aucun n'est insurmontable mais ils seraient néanmoins difficiles).

+0

Eh bien, ce n'est pas vraiment différent de l'utilisation de PHP ou Python. – Pointy

+0

Eh bien ... un peu. Perl et Python peuvent être "corrigés" dans le serveur web en utilisant leurs propres modules (respectivement mod_perl et mod_wsgi), de sorte que l'interpréteur fonctionne réellement en tant que partie du serveur, et il finit par être plus rapide que d'avoir à démarrer un processus distinct pour chaque demande. –

+0

Le "gestionnaire Apache qui déclencherait votre script shell et Apache prendrait la sortie de votre script shell et le lançait au client" est-ce: http://en.wikipedia.org/wiki/Common_Gateway_Interface – slowdog

2

C'est très possible, et au moment où j'ai commencé dans l'entreprise, c'était la façon dont les choses étaient faites. La vraie différence étant, c'est que PHP fournit un moyen très pratique d'accéder aux données d'entrée, comme dans bash (bien que je suppose qu'il existe des utilitaires pour vous aider).) vous auriez besoin d'analyser et de gérer les entrées brutes au lieu des variables "cuites". En fonction de ce que vous essayez d'accomplir, c'est soit pratique soit l'autre extrême. Moi-même, j'utilise un script bash pour compiler ma page d'accueil avec des nouvelles et des bandes dessinées quotidiennes, mais celle-ci ne nécessite aucune entrée, mais simplement une routine cron.

2

Je vous recommande d'envisager de créer un wrapper PHP ou Python autour de votre script shell si vous préférez ne pas effectuer une réécriture totale. Laissez le script shell faire le backend et le wrapper fait le reste.

1

Voilà comment vous pouvez intégrer un saut de ligne, ... dans une chaîne entre guillemets (double):

NL=" 
" 
CR="$(printf "\r")" 

echo "abc${NL}def" 

IFS="" 
echo abc${NL}def 

printf "%q\n" "abc${CR}${NL}def"