
Когда я читаю скрипт makefile, я сталкиваюсь со следующей командой скрипта Linux:
mv obj/*.o . 2>/dev/null
Что означает эта команда? Я понимаю, mv obj/*.o .
что это означает, что все файлы с суффиксом o
в obj
папке будут перемещены в текущую папку. Что это 2>
значит? Когда они объединены вместе, в чем смысл? Спасибо!
решение1
Вы смотрите наперенаправление вывода (Bash). 2 означает 'stderr', вывод ошибок. Перенаправляя его в /dev/null
, вы отбрасываете его в небытие. Однако обычный вывод, 'stdout' или 1, все еще отображается (в вашем терминале по умолчанию).
По сути, это просто подавление вывода ошибок команды mv
.
Фрагмент из приведенной выше ссылки поясняет это более обобщенно:
COMMAND_OUTPUT >
# Redirect stdout to a file.
# Creates the file if not present, otherwise overwrites it.
ls -lR > dir-tree.list
# Creates a file containing a listing of the directory tree.
[..]
1>filename
# Redirect stdout to file "filename."
1>>filename
# Redirect and append stdout to file "filename."
2>filename
# Redirect stderr to file "filename."
2>>filename
# Redirect and append stderr to file "filename."
&>filename
# Redirect both stdout and stderr to file "filename."
решение2
Кстати, иногда вы можете захотеть предотвратить отображение на экране, но захотеть захватить его в файл. В этом случае вы можете сделать что-то вроде этого:
mv obj/*.o . > move.log 2>&1