Estoy escribiendo una secuencia de comandos para ssh en una lista de máquinas y comparar una variable a otro valor .. Me he encontrado con un problema (tengo un par de soluciones, pero en este momento estoy solo me preguntaba por qué este método no funciona).Variable messy bash
VAR=`ssh $i "awk -F: '/^bar/ {print \$2}' /local/foo.txt"`
($ i habría un nombre de host Los anfitriones son de confianza, no se da ninguna solicitud de contraseña.)
Ejemplo de foo.txt:
foo:123456:abcdef
bar:789012:ghijkl
baz:345678:mnopqr
Estoy asumiendo que es un problema con comillas, o se necesita en alguna parte. He intentado varios métodos (citas diferentes, usando $() en lugar de ``, etc.) pero parece que no puedo hacerlo bien. Mi script funciona correctamente usando lo siguiente:
VAR=`ssh $i "grep bar /local/foo.txt" | awk -F: '{print \$2}'`
Como dije, solo una curiosidad, cualquier respuesta es apreciada.
Olvidé la publicación de mi salida: awk está escupiendo toda la línea coincidente, no la segunda sección. Jugando con las comillas y un poco, parece que recibí un error sobre el comando "{print" no encontrado, etc., como si hubiera una nueva línea en alguna parte.
podría obtener más respuesta de ServerFault, relacionada con mi pregunta allí: http://serverfault.com/ques ciones/99886/ssh-not-redirecting-stdout-to-local-terminal –
¿Qué sucede si elimina el símbolo de intercalación del primer ejemplo? Tal vez haya un personaje invisible al comienzo de la línea. – danben
@Lance Roberts: esta pregunta es sobre awk, no sobre ssh, y como tal es apropiado para el desbordamiento de pila. – danben