
Quando leio um script do makefile, encontro o seguinte comando de script do Linux:
mv obj/*.o . 2>/dev/null
O que esse comando significa? Entendo mv obj/*.o .
que todos os arquivos com sufixo o
na obj
pasta serão movidos para a pasta atual. O que 2>
significa? Quando eles são combinados, qual é o propósito? Obrigado!
Responder1
Você está olhandoredirecionamento de saída (Bash). 2 significa 'stderr', a saída de erro. Ao redirecioná-lo para /dev/null
, você o descarta no esquecimento. A saída regular, 'stdout' ou 1 ainda é mostrada (no seu terminal por padrão).
Basicamente, isso apenas silencia a saída de erro do mv
comando.
Um trecho do link acima explica isso de forma mais geral:
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."
Responder2
A propósito, às vezes você pode querer impedir a exibição na tela, mas pode querer capturá-la em um arquivo. Se for esse o caso, você pode fazer algo assim:
mv obj/*.o . > move.log 2>&1