Comment supprimer la sortie dd?

Jai un script bash qui crée un fichier en utilisant dd. Le problème est que dd jette une grande quantité de sortie qui va gâcher la sortie de mon script. En cherchant dans les environs, j « ai trouvé une solution:

dd if=boot1h of="/dev/r$temp1" >& /dev/null 

Y a-t-il une alternative ou redirige vers /dev/null le seul moyen?

Commentaires

  • Je ‘ m perdu sur votre dernière phrase,  » le script ne doit pas demander de privilèges « . Cela ‘ ne semble avoir rien à voir avec redirection vers /dev/null – vous ‘ sudoing car dd a besoin dun accès en écriture à /dev/r$temp1 (je suppose). Vous ‘ aurez besoin de le faire, peu importe comment vous supprimez dd ‘; la redirection de la sortie vers /dev/null ne ‘ requiert la racine
  • Je ‘ suis un idiot. Cette opération nétait pas autorisée à cause de lutilisation de / dev / r $ temp1 /. I

je suis vraiment désolé. Je ‘ m éditer un script qui ‘ nest pas le mien et ne ‘ pas remarqué . Vraiment désolé.

  • donc le problème est que lutilisateur ordinaire ne peut pas écrire dans / dev / r $ temp1 ou dans dev / null
  • Don ‘ t vous en inquiétez; Je lai un peu modifié pour supprimer la partie déroutante
  • Si vous ‘ nutilisez aucun des dd ‘ s fonctionnalités avancées, utilisez plutôt cat, head ou tail.
  • Réponse

    De la page de manuel dd(1):

     status=noxfer suppress transfer statistics 

    donc:

    dd if=boot1h of="/dev/r$temp1" status=noxfer 

    Cela affiche toujours le

    0+1 records in 0+1 records out 

    garbage lorsque dd se termine, donc la redirection vers un puits de données est vraiment votre seule option.

    Commentaires

    • Javais ‘ peur de.
    • Je crois que status = noxfer, pourrait être lié au signal SIGUSR1, qui montre normalement le transfert statistique. Cependant, je ne suis pas disposé à tester si ‘ est vrai ce que je dis.

    Réponse

    Ajoutez status=none:

    dd if=boot1h of="/dev/r$temp1" status=none 

    À partir de dd (coreutils) 8.21 docs :

     "status=LEVEL" Transfer information is normally output to stderr upon receipt of the "INFO" signal or when "dd" exits. Specifying LEVEL will adjust the amount of information printed, with the last LEVEL specified taking precedence. "none" Do not print any informational or warning messages to stderr. Error messages are output as normal. "noxfer" Do not print the final transfer rate and volume statistics that normally make up the last status line. "progress" Print the transfer rate and volume statistics on stderr, when processing each input block. Statistics are output on a single line at most once every second, but updates can be delayed when waiting on I/O.  

    Commentaires

    • @roaima – juste curieux, pourquoi éditer une citation de la page de manuel?
    • @don_crissti Jai senti que le (manque de) contexte lors de lextraction de la citation de la page de manuel signifiait quil fallait une forme de mots légèrement différente. Tel quil se trouve dans la page de manuel , ‘ va bien; ici ça avait lair étrange.
    • @roaima – daccord – curiosité satisfaite 🙂 – mais notez que vous créez un lien vers le info page; la réponse initiale ici avait la citation exacte de man page . Jaurais copié / collé directement à partir de la page info si la page man est ambiguë mais vraiment, cest à vous de décider … Oh, btw, merci beaucoup pour votre autre commentaire sur ma réponse concernant le tri par jour de la semaine.
    • Doesn ‘ t semble être disponible dans dd (coreutils) 8.13: dd: invalid status flag: `none' Try `dd --help' for more information.
    • IMO Cela devrait être la réponse acceptée

    Réponse

    Pour référence future:

    Pour supprimer complètement la sortie de dd, redirigez stderr vers / dev / null comme ceci:

    dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null 

    Cela fonctionne bien si vous voulez, par exemple, chronométrer le processus à laide de la commande time dans bash et affecter le résultat à une variable, sans obtenir aucune des sorties produites par dd.

    référence: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html

    Réponse

    Quelque chose comme ça devrait également fonctionner pour vous avec les versions récentes de BASH et ZSH:

    dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null 

    P.S. Ceci est juste un exemple que jai exécuté …

    Réponse

    Avec nimporte quelle application ou commande Unix, vous pouvez supprimer toute sortie avec

    cmd >/dev/null 2>&1

    Le premier bit redirige la sortie standard (unité numéro 1) vers / dev / null. Mais vous avez besoin de la deuxième partie pour rediriger AUSSI la sortie derreur (numéro dunité 2) au même endroit que le numéro 1.

    Sous UNIX, STDIN = 0, STDOUT = 1 et STDERR = 2


    Commentaires

    • En fait, stderr a le descripteur de fichier 2 . (Je suppose que  » STDERR = 3  » est juste une faute de frappe.)
    • Il nest pas souhaitable de supprimer toute sortie . Si une erreur se produit, nous aimerions voir le message derreur.
    • cmd 2>logfile.txt semble plus adapté

    Réponse

    Si je comprends bien ce que vous essayez de faire, mettez-vous cette commande sudo dans le script et attendez-vous le script pour demander votre mot de passe lorsquil y est exécuté? Dans ce cas, vous faites les choses de manière compliquée.

    Une solution plus simple consiste à écrire le script de la manière habituelle (cest-à-dire sans sudo) et exécutez-le en tant que superutilisateur . La raison derrière cela est que si le script a besoin dun accès superutilisateur, donnez-lui simplement laccès (pourquoi attendre une certaine commande?). Dans le script, pour vérifier sil est exécuté en tant que root, procédez comme suit:

    if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi 

    Commentaires

    • non. Cest ‘ que je ne veux pas ‘ faire. Je ne ‘ t ne veux pas que le script soit exécuté en tant que root uniquement parce que je ne ‘ pas que dd affiche la sortie. Votre vérification serait correcte si je veux que le script soit exécuté en tant que superutilisateur.
    • @dierre Alors pourquoi avez-vous besoin de sudo en premier lieu? Les utilisateurs normaux devraient pouvoir rediriger les choses vers /dev/null très bien.
    • Je ‘ m en utilisant Ubuntu et ‘ s me donnant lopération non autorisée … euh …
    • Je ‘ je suis désolé. Je nai ‘ pas remarqué que je créais quelque chose sous / dev /. Le script nest pas le mien, je lai édité. Je ‘ je suis vraiment désolé.

    Réponse

    vous pouvez rediriger la sortie vers un fichier normal cest-à-dire:

     dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log 

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *