Redirecciones, pipes y variables
La potencia del shell esta en combinar programas pequenos. Las redirecciones mueven stdin/stdout/stderr; los pipes conectan la salida de un comando con la entrada del siguiente.
stdout y stderr
bash
comando > salida.txt # sobrescribe stdout
comando >> salida.txt # append stdout
comando 2> errores.txt # solo stderr
comando > todo.txt 2>&1 # stdout+stderr al mismo archivoEjemplo:
bash
ls /existe /no-existe >out.txt 2>err.txtPipes
bash
cat access.log | grep " 500 " | wc -l
ps aux | grep node | grep -v grep
docker ps | awk '{print $1,$2}'Patron mental:
txt
datos -> filtro -> filtro -> resumenVariables de entorno
bash
export NODE_ENV=production
echo "$NODE_ENV"
echo "Home es $HOME"Listar:
bash
env | sort
printenv PATHVariables utiles: PATH, HOME, USER, PWD.
En un solo comando:
bash
NODE_ENV=test npm testSustitucion de comandos
bash
echo "Hoy es $(date +%F)"
files=$(ls | wc -l)
echo "Entradas: $files"Comillas
bash
echo "$HOME" # expande
echo '$HOME' # literal
echo "Hola $USER"Usa comillas dobles cuando haya espacios:
bash
cp "$archivo" "$destino"Historial y expansion
bash
history | tail
!! # repite ultimo comando
sudo !! # tipico: olvidaste sudoErrores habituales
comando > file 2>&1vscomando 2>&1 > file(el orden importa).- Olvidar comillas con rutas con espacios.
- Hacer
export SECRET=...y luego pegar el historial en un ticket.
Buenas practicas
- En scripts,
set -euo pipefail(capitulo siguiente). - No imprimas secretos; redirige logs con cuidado.
- Prefiere pipes cortos y legibles a monstruos de una linea sin comentarios.
Ejercicio
- Guarda
ls -laen un archivo y los errores de un path inventado en otro. - Cuenta lineas de un log (o de un
.md) que contenganerror(case insensitive). - Exporta una variable y usala en un
echo.
Siguiente paso
Continua con Scripts basicos.
