Question

Y at-il des différences entre ":> fichier" et "> fichier"

?
$ : > file.out
$ ls -l file.out
-rw-rw----   1 user    user             0 Mar 18 21:08 file.out
$ > file.out
$ ls -l  file.out
-rw-rw----   1 user    user             0 Mar 18 21:08 file.out
Était-ce utile?

La solution

: est la coquille intégré NO-OP ou opération nulle. Alors oui, la diriger vers un fichier se termine avec un fichier vide, tout comme dirigeant rien à un fichier. Il y a un sens, je suppose, dans lequel votre source est un autre type de rien, mais le résultat est le même. Selon au guide script Bash avancé , le "> file.out" la formulation ne fonctionnera pas sur certains systèmes.

Notez que dans les deux cas (contrairement à « toucher ») le contenu du fichier sera remplacé par rien si le fichier existe déjà.

Autres conseils

Utilisation : > file.out est plus portable non bash. Par exemple, zsh définit le null-commande par défaut en tant cat, non : (sauf dans un mode d'émulation). Si vous finissez toujours par avoir besoin de faire fonctionner le script avec un /bin/sh qui n'est pas bash (par exemple, un système BSD *, tout système d'exploitation à code source fermé, ou même sur certaines distributions GNU / Linux maintenant, où tiret est utilisé), vous ll vous rendre la vie plus facile si vous utilisez : > file.out

Selon Posix, les deux fonctionnent, mais la version avec : avorte si la redirection échoue alors que la version avec juste la redirection retourne juste un état de sortie non nul. Dans ce dernier cas, il est plus portable à utiliser true.

Bash seulement ce droit en mode POSIX.

Les alias ou les fonctions nommées : violent une contrainte POSIX sur l'application et ne sont pas portables.

La seule différence que je peux penser est que vous pouvez redéfinir : via les définitions d'alias ou de fonction. Par exemple, vous pouvez tronquer les fichiers la plupart du temps (en utilisant le comportement par défaut ne rien de :), mais les fichiers forcer à un en-tête standard dans certains cas. La forme > file ne peut être redéfinie.

Par exemple:

#! /bin/bash

test -n "$ADD_COPYRIGHT" &&
  :() { echo "# Copyright (c) 2010 MyName"; echo; }

# Truncate the file to zero size, unless ADD_COPYRIGHT is set, in which case
# the file is truncated to contain only a copyright notice.
: > file

# Add content to the file
some_command >> file
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top