Bash: Cómo capturar la salida de una camiseta "interior" en WSL

Resuelto ahuemmer asked hace 7 meses • 1 respuestas

Actualmente, estoy usando el siguiente comando (en funcionamiento) para comprimir y cifrar algunas carpetas:

backup_folders "${srcFolders}" - $@ | encrypt > "${targetFile}"

backup_foldersy encryptson funciones Bash autoescritas que hacen lo que dice su nombre. backup_folderscreará un archivo tar.gz y lo escribirá stdoutpara canalizarlo a pasos de procesamiento adicionales como encryptlos 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_contentotra secuencia, por ejemplo, así (probé múltiples variaciones):

{ date=$(backup_folders "${srcFolders}" - $@ | tee >(get_newest_content) | encrypt > "${targetFile}"); } 2>&1

Desafortunadamente, no tuve éxito, datesiempre 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/3una versión superior disponible. (Solo 0, 1, 2y 255). Lo intenté 255tambié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. ^^

ahuemmer avatar Feb 16 '24 00:02 ahuemmer
Aceptado

Estás buscando algo como esto:

date=$({ backup_folders "${srcFolders}" - $@ | tee >(get_newest_content >&3) | encrypt > "${targetFile}";} 3>&1)
oguz ismail avatar Feb 15 '2024 17:02 oguz ismail