Mam skrypt bash, który tworzy jakiś plik przy użyciu dd
. Problem polega na tym, że dd generuje dużą ilość danych wyjściowych, które będą popsuć dane wyjściowe mojego skryptu. Rozglądając się, znalazłem rozwiązanie:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Czy istnieje alternatywa lub przekierowanie /dev/null
na jedyny sposób?
/dev/null
- sudo, ponieważdd
potrzebuje dostępu do zapisu/dev/r$temp1
(zakładam). Musisz to zrobić bez względu na to, jak tłumiszdd
wyniki; przekierowanie wyjścia do/dev/null
nie wymaga rootacat
,head
lubtail
zamiast tego.Odpowiedzi:
Ze strony podręcznika
dd(1)
:a zatem:
Nadal wyświetla to
śmieci po
dd
wyjściu, więc przekierowanie do ujścia danych jest naprawdę jedyną opcją.źródło
Dodaj
status=none
:Z dokumentów dd (coreutils) 8.21 :
źródło
info page
; pierwotna odpowiedź tutaj miała dokładny cytat zman page
. Skopiowałbym / wkleiłbym bezpośrednio zeinfo
strony, jeśliman
strona jest niejednoznaczna, ale tak naprawdę zależy od ciebie ... Och, dziękuję bardzo za twój inny komentarz do mojej odpowiedzi dotyczącej sortowania według dnia tygodnia.dd
bezstatus=
)dd: invalid status flag: `none' Try `dd --help' for more information.
Dla przyszłego odniesienia:
Aby stłumić wyjście dd całkowicie przekieruj stderr do / dev / null w następujący sposób:
Działa to dobrze, jeśli chcesz na przykład zmierzyć czas procesu za pomocą komendy time w bash i przypisać wynik do zmiennej, bez uzyskiwania danych wyjściowych dd.
odniesienie: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
źródło
Coś takiego powinno również działać w przypadku najnowszych wersji BASH i ZSH:
PS To tylko przykład, który uruchomiłem ...
źródło
Za pomocą dowolnej aplikacji lub polecenia Uniksa możesz pomijać wszystkie dane wyjściowe za pomocą
cmd >/dev/null 2>&1
Pierwszy bit przekierowuje standardowe wyjście (jednostka numer 1) do / dev / null. Ale potrzebujesz drugiej części, aby TAKŻE przekierować wyjście błędu (jednostka nr 2) w to samo miejsce co numer 1.
W systemie UNIX STDIN = 0, STDOUT = 1 i STDERR = 2
źródło
stderr
ma deskryptor pliku 2 . (Zakładam, że „STDERR = 3” to tylko literówka.)cmd 2>logfile.txt
wydaje się bardziej dostosowanyJeśli dobrze rozumiem, co próbujesz zrobić, czy umieszczasz to
sudo
polecenie w skrypcie i oczekujesz, że skrypt wyświetli monit o podanie hasła, gdy zostanie uruchomione? W takim przypadku po prostu robisz rzeczy w skomplikowany sposób.Bardziej przejrzystym rozwiązaniem jest napisanie skryptu w zwykły sposób (tj. Bez
sudo
) i uruchomienie go jako administratora . Powodem tego jest to, że jeśli skrypt wymaga dostępu administratora, to po prostu daj mu dostęp (po co czekać na określone polecenie?). W skrypcie, aby sprawdzić, czy jest uruchamiany jako root, wykonaj coś takiego:źródło
sudo
? Normalni użytkownicy powinni mieć możliwość przekierowywania rzeczy na/dev/null
dobre.możesz przekierować dane wyjściowe do zwykłego pliku, tj .:
źródło