
¿Cómo se ve un comando como?
awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt
Preceder esto con "watch" da este error:
awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)
La respuesta a:Usando el comando watch con un argumento que contiene comillasera escapar de los signos $ reemplazándolos con \$. Pero eso me da el error:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0:
Quería hacer esto en el comentario de esa pregunta pero no tenía suficientes puntos para hacer comentarios.
Preguntas similares donde las respuestas que les funcionaron no funcionaron en este caso:
1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(La respuesta fue nuevamente escapar del signo $).
2), 3) y 4) se enumeran en los comentarios ya que no puedo publicar más de 2 enlaces sin 10 puntos de reputación.
Respuesta1
Hay cuatro enfoques.
1. Coloque el comando entre comillas dobles.
Es necesario aplicar escape tanto a las comillas dobles como a los signos de dólar:
watch "awk 'NR%2==0 {printf \"%s %8.0f\", \$1, \$5}'" filename.txt
2. Coloque el comando entre comillas simples.
Entre comillas simples, no es necesario escapar ni "
ni . $
Sin embargo, no es posible incluir comillas simples dentro de una cadena entre comillas simples. Si necesitamos que aparezca una comilla simple, la solución es finalizar la cadena entre comillas simples y agregar una comilla simple escapada, \'
. Se parece a esto:
watch 'awk '\''NR%2==0 {printf "%s %8.0f", $1, $5}'\' filename.txt
3. Enfoque híbrido
Combinando lo anterior, ponemos la primera parte de la cadena entre comillas dobles y la segunda parte entre comillas simples:
watch "awk 'NR%2==0 {printf "'"%s %8.0f", $1, $5}'\' filename.txt
4. Sin comillas pero completamente escapado
Si no encerramos el comando entre comillas, necesitaremos escapar de todos los caracteres activos del shell necesarios. Eso incluye espacios, comillas, llaves y signos de dólar:
watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \$1,\ \$5\}\' filename.txt
Respuesta2
Este es un hilo antiguo pero este problema nunca desaparecerá. Aquí está, escape los caracteres awk ', $ y %:
$ watch -d -n 10 'ls -ltr | grep exec_setsid_ | grep out | tail -1 | awk '\'{ print \$9 }\'' | xargs tail -25'
¡Este comando mostrará las últimas 25 líneas del archivo "exec_sedsid_*.out" más nuevo que se creó en la carpeta actual!
¡Pronto!