Hata mesajlarını cp'den nasıl bastırırım?


13

Şu anda Linux, özellikle komut, hata komutunu bastırmak için yollar arıyorum cp.

Yaparım:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory

Ekranda yazdırılan hata mesajını nasıl bastırırım ? Yani, bu hata mesajını monitörümde görmek istemiyorum.


1
sadece FYI, hataları kontrol etmenin en iyi yolu çıkış kodlarıdır. / Dev / null Boru STDERR standarttır ve hatalardan herhangi bir görsel endikasyon kurtulmak, ancak olmayan bir sıfır dönüş durumu kontrol edilirken bir hata ya da değil olup olmadığını size bildiririz, en azından o nasıl olduğunu gerekiyordu olmak ...
— Nathan McCoy

Sorunuz net değil. Tüm hata mesajlarını cp'den gizlemek istiyor musunuz? Veya joker karakter herhangi bir dosyayla eşleşmezse hata mesajı almak istemez misiniz? Veya başka kriterler mi?
— Gilles 'SO- kötü olmayı kes'

Yanıtlar:


38

Hata çıktısını bastırmak için komutunuzun sonuna bashekleyin 2>/dev/null. Bu, dosya tanıtıcısı 2'yi (STDERR) konumuna yönlendirir /dev/null. Diğer kabuklarda benzer yapılar vardır, ancak spesifik yapı biraz değişebilir.


Acaba neden bu xx'i hiç düşünmedim
— Abdul

8

Hata mesajını (STDERR) şuraya yönlendirin /dev/null:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null

Misal:

$ cp /srv/ftp/201*/wha*/*.jj ~/.  ##Error message gets printed
cp: cannot stat ‘/srv/ftp/201*/wha*/*.jj’: No such file or directory

$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null  ##No error message gets printed

5

Sorunuz net değil. Yapılacak en mantıklı şey cp, joker karakter cphata iletisini çalıştırmak ve gizlemek yerine hiçbir dosyayla eşleşmediğinde hiç çalışmamaktır .

Bunu yapmak için, kabuk bash ise, joker karakter deseni hiçbir dosyayla eşleşmezse hiçbir şey genişletmeyecek şekilde nullglobseçeneği ayarlayın . Ardından, desenin herhangi bir şeye genişleyip genişlemediğini kontrol edin ve cpbu durumda aramayın .

#!/bin/bash
shopt -s nullglob
files=(/srv/ftp/201*/wha*/*.jj)
if [[ ${#files[@]} -ne 0 ]]; then
  cp "${files[@]}" ~
fi

Düz sh'de, globın değişmeden bırakılıp bırakılmadığını test edin, var olmayan bir dosyayı işaret edin.

set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
  cp "$@" ~
fi

Eğer cp'nin bir kabuk betiğinden bir hata atmasını istemiyorsanız, bu gerekli tekniktir - ya da en azından bir uzman değilim, ama bu işe yarıyor gibi görünüyor.
— NessBird

0

Bunu ~ / .bashrc içine ekleyin:

alias cp='cp 2> /dev/null'

sonra:

source ~/.bashrc

2
Bunun kalıcı olarak yapılmasını tavsiye etmek bana aptalca geliyor. Hata çıkışının istenmeyen olduğu durumlarda boru stderrkullanmak çok daha iyi bir fikir gibi görünüyor /dev/null. Ya da daha farklı bir ad kullanarak cp.
— HalosGhost

Size katılıyorum ama bu, monitöründe herhangi bir hata mesajı görmek istemeyen biri için bir çözüm cp.
— M122

-1

: Eğer birini kullanabilirsiniz
1 seçeneği: 2>/dev/null.
2 seçenek: 2>&1
Komutunuzun sonunda bunu kullanabilirsiniz, ayrıca hata mesajlarını bastırır:

Burada örnek-

$cp nofile.txt b.txt > log.txt 2>/dev/null

burada u hata mesajı hakkında herhangi bir bilgi alınamıyor. ex2:

$cp nofile.txt b.txt > log.txt 2>&1

burada aşağıdaki günlük dosyasından bazı bilgileri alabilirsiniz:

$ cat log.txt
cp: cannot stat `nofile.txt': No such file or directory
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.