Bash: Cómo capturar la salida de una camiseta "interior" en WSL
Actualmente, estoy usando el siguiente comando (en funcionamiento) para comprimir y cifrar algunas carpetas:
backup_folders "${srcFolders}" - $@ | encrypt > "${targetFile}"
backup_folders
y encrypt
son funciones Bash autoescritas que hacen lo que dice su nombre. backup_folders
creará un archivo tar.gz y lo escribirá stdout
para canalizarlo a pasos de procesamiento adicionales como encrypt
los anteriores.
Ahora me gustaría saber la fecha del archivo más reciente en la secuencia de archivos. Para lograr esto, agregué la siguiente función:
get_newest_content() {
local newestDate=$(tar --list --verbose --xz --full-time | awk '{ print $4 $5}' | sort -r | head -1)
>&2 echo "Newest date of archive: ${newestDate}"
}
Luego actualicé mi comando desde arriba para incluir esta función como esta:
backup_folders "${srcFolders}" - $@ | tee >(get_newest_content) | encrypt > "${targetFile}"
Esto también funciona en la medida en que la fecha más reciente se determine e imprima correctamente (ignorando algunos problemas de formato por ahora). Pero prefiero tener esta información contenida en una variable. Por lo tanto, necesito capturar la salida de la función en T en el tubo interior.
Probé las soluciones mencionadas aquí en SO y también aquí , todas apuntando a escribir el resultado en get_newest_content
otra secuencia, por ejemplo, así (probé múltiples variaciones):
{ date=$(backup_folders "${srcFolders}" - $@ | tee >(get_newest_content) | encrypt > "${targetFile}"); } 2>&1
Desafortunadamente, no tuve éxito, date
siempre está vacío o cualquier valor con el que lo inicialicé para probarlo.
Como estoy trabajando bajo WSL (al menos supongo, esta es la razón...), no tengo /dev/fd/3
una versión superior disponible. (Solo 0
, 1
, 2
y 255
). Lo intenté 255
también, pero no tuve éxito.
Al no ser un desarrollador de Bash con mucha experiencia, me gustaría pedir ayuda ahora. Probablemente la solución sea bastante sencilla y el problema esté frente al monitor. ^^
Estás buscando algo como esto:
date=$({ backup_folders "${srcFolders}" - $@ | tee >(get_newest_content >&3) | encrypt > "${targetFile}";} 3>&1)