2010-10-08 3 views
0

Pourquoi est que certaines commandes nécessitent l'instruction echo, mais d'autres peuvent simplement être écrits sans:shell d'écriture de script bash commandes

#!/bin/bash

aptitude upgrade

echo "mysql-server-5.1 mysql-server/root_password password $DB_PASSWORD" | debconf-set-selections

Répondre

2

Les commandes qui se nourrissent de stdin pour certaines entrées à traiter, sont généralement alimentés par la commande echo. Echo saute la chaîne qui lui est fournie sur stdout, qui à son tour est dupliquée sur stdin en utilisant le tube "|". Donc, pour les commandes qui ne nécessitent pas d'entrée de stdin ou utilise une autre méthode d'entrée à traiter peut être écrit sans commande echo.

1

aptitude upgrade: upgrade est un argument du programme aptitude. Si vous voyez une sortie sur votre écran, cela signifie à l'intérieur de aptitude, il fait un peu "écho" à stdout.

Il est également possible d'écrire des programmes pour entrer stdin dans un tube "|", comme dans votre deuxième cas. par exemple, un programme en Python qui prend en stdin,

import fileinput 
for line in fileinput.input(): 
    print line 

et de prendre dans les arguments

import sys 
file = sys.argv[1] 

Une combinaison de ces 2 fera le programme en mesure de prendre en stdin ou un argument. Ce sera comment aptitute ou debconf-set-selections est mis en œuvre, selon la langue sur laquelle il est construit.