Як придушити повідомлення про помилки з CP?


13

В даний час я шукаю способи придушити команду помилок в Linux, зокрема, команду cp.

Я згоден:

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

Як придушити повідомлення про помилку , яке отримує роздрукований на екрані? Тобто, я не хочу бачити це повідомлення про помилку на своєму моніторі.


1
просто FYI, найкращий спосіб перевірити помилки - це коди виходу. Передача STDERR до / dev / null є стандартною і позбавиться від будь-яких візуальних вказівок на помилки, але перевірка наявності ненульового статусу повернення дозволить вам дізнатися, чи сталася помилка чи ні, принаймні так має бути. ...
Натан Маккой

Ваше питання не ясно. Ви хочете приховати всі повідомлення про помилки від cp? Або ви хочете не мати повідомлення про помилку, якщо підстановка не відповідає жодному файлу? Або якісь інші критерії?
Жил "ТАК - перестань бути злим"

Відповіді:


38

Щоб придушити вихід помилок у bash, додайте 2>/dev/nullдо кінця вашої команди. Це перенаправляє файл 2 (STDERR) на /dev/null. У інших оболонках є подібні конструкції, хоча конкретна конструкція може дещо відрізнятися.


Цікаво, чому я ніколи не думав про це xx
Абдул

8

Перенаправити повідомлення про помилку (STDERR) на /dev/null:

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

Приклад:

$ 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

Ваше питання не ясно. Найрозумніше, що потрібно зробити, - це взагалі не запускатись, cpколи підстановка не відповідає жодному файлу, а не запускати cpта ховати повідомлення про помилку.

Для цього, якщо оболонка є баш, встановіть nullglobпараметр так, щоб шаблон підстановки розширювався ні до чого, якщо він не відповідає жодному файлу. Потім перевірте, чи розширився шаблон на що-небудь, і не дзвоніть cpу цьому випадку.

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

У звичайному sh, перевірити, чи залишився глобус незмінним, вказуючи на неіснуючий файл.

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

Це техніка, необхідна, якщо ви не хочете, щоб cp видав помилку в рамках сценарію оболонки - або, принаймні, я не експерт, але це, здається, працює.
NessBird

0

Додайте це в ~ / .bashrc:

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

тоді:

source ~/.bashrc

2
Рекомендуючи це робити постійно, мені здається дурним. Здається, що набагато краща ідея просто stderrподавати заявку, /dev/nullколи вихід помилок небажаний. Або з використанням іншого імені, ніж cp.
HalosGhost

Я згоден з вами, але це рішення для тих, хто не хоче бачити повідомлення про помилки на своєму моніторі cp.
M122

-1

Ви можете використовувати або:
варіант 1: 2>/dev/null.
2 варіант: 2>&1
Крім того, що ви можете використовувати це в кінці вашої команди, це придушить повідомлення про помилки:

Приклад тут-

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

тут ви не можете отримати будь-яку інформацію про повідомлення про помилку. Ex2:

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

тут ви можете отримати деяку інформацію з нижченаведеного файлу журналу:

$ cat log.txt
cp: cannot stat `nofile.txt': No such file or directory
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.