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 suis vraiment désolé. Je ‘ m éditer un script qui ‘ nest pas le mien et ne ‘ pas remarqué . Vraiment désolé.
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 deman page
. Jaurais copié / collé directement à partir de la pageinfo
si la pageman
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
/dev/null
– vous ‘ sudoing cardd
a besoin dun accès en écriture à/dev/r$temp1
(je suppose). Vous ‘ aurez besoin de le faire, peu importe comment vous supprimezdd
‘; la redirection de la sortie vers/dev/null
ne ‘ requiert la racine