2010-12-07 8 views
4

Je crée un script qui va calculer différentes informations sur les répertoires. Je dois donner l'option à l'utilisateur de créer un fichier. De nombreuses vérifications de fichiers différentes sont effectuées, mais une en particulier me donne du chagrin:créer un fichier dans bash, comment puis-je utiliser 2>/dev/null au cas où il n'est pas possible de créer?

Si le nom de fichier est coché et n'existe pas, le script doit essayer de le créer. Si la création échoue, l'utilisateur doit être averti qu'il n'a pas pu être créé. J'ai donc une variable (fichier) qui est le nom donné par l'utilisateur au fichier qu'il souhaite créer. J'utilise ensuite:

echo -n "Creating the file: '$file'" 
touch "$file" 
if [ -e "$file" ]; then 
    echo "..........File created" 
    else echo"...........Creation failed" 
fi 

Est-ce que le> 2/dev/null va après la ligne de touche? Quelle serait la syntaxe appropriée pour supprimer le message d'erreur, et afficher uniquement Création du fichier: (fichier) ......... La création a échoué?

Merci beaucoup

Répondre

3

Vous devez utiliser 2> et non >2 pour rediriger l'erreur standard.

touch "$file" 2> /dev/null 

Mais même avec ce changement votre script a un bug:

Supposons que le touch échoue parce que le fichier existe, mais vous n'êtes pas autorisé à le toucher. Ensuite, vous vérifiez si le fichier existe en utilisant la vérification -e qui renvoie true et vous imprimez File created ce qui est incorrect.

Pour résoudre ce problème, vous devez vérifier la valeur de retour de la commande touch comme:

if touch "$file" 2> /dev/null ; then 
echo "..........File created" 
else 
echo "..........File failed" 
+0

bon sang, Il me manquait l'espace après>. quel bonehead. Merci pour les yeux frais – unit

+0

Je viens de l'essayer, avec la touche "$ fichier" (espace) 2> (espace (andnospace))/dev/null et un message d'erreur apparaît toujours à l'écran – unit

+0

Cela donne un coup de pied! Merci beaucoup! – unit

0

Vous voulez réellement:

touch "$file" 2> /dev/null 

(notez 2> plutôt que >2)

+0

Comme je l'ai dit en réponse à l'autre affiche (désolé d'être redondant), je l'ai essayé de cette façon, et l'erreur apparaît toujours sur l'écran, il lit "Création du nom de fichier: '(nom de fichier)' touche: ne peut pas toucher (nomfichier) ': Autorisation refusée ....... Echec de – unit

+0

Unité, je ne peux pas répliquer vos résultats Par exemple, appuyez sur/bin/bash 2>/dev/null ne produit aucune sortie –

+0

@unit: s'il vous plaît poster votre * exact * code - vous avez probablement une faute de frappe ou un autre problème trivial ... –