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.