2011-09-23 18 views
6

Estoy intentando ejecutar comandos simples de shell en mi script, pero no puedo deshacerme de nuevas líneas incluso usando chomp o chop.Deshágase de newline desde comandos de shell en Ruby

¿Hay algo que me falta?

 u=`echo '#{l}' | cut -d: -f4`.chop() 
     p2=`echo '#{l}' | cut -d: -f3`.chop() 
     p1=`echo '#{l}' | cut -d: -f2`.chop() 
     h=`echo '#{l}' | cut -d: -f1`.chop() 


#  **Cant get newlines to go after p1 and p2 !! ??** 
     path="#{p1}/server/#{p2}abc" 
     puts path 


Output: 
/usr (p1) 
/server 
/bin (p2) abc 
Expected Output: 
/usr/server/binabc 

¿Alguna sugerencia?

Según algunas sugerencias, cambió mi código para:

h, p1, p2, u = l.split /:/ 
u.strip 
u.chomp 

puts u.inspect 

Salida: "string\n"

Básicamente había intentado usar mordisco antes y estaba golpeando el mismo problema. ¿Debo llamar a chomp de una manera diferente o agregar alguna gema?

+0

¿Cuál es exactamente el problema? cual es la salida esperada? – Geo

Respuesta

7

Utilice String#strip para eliminar todos los espacios en blanco del embalaje, o String#chomp (tenga en cuenta la 'm') para eliminar una sola nueva línea final.

String#chop elimina el último carácter (o \r\n par) que podría ser peligroso si el comando no siempre termina con una nueva línea.

Supongo que su código no funcionó porque los resultados tenían múltiples newlines \ whitespace al final de la salida. (Y si es así, strip funcionará para usted.) Sin embargo, puede verificar esto eliminando la llamada al chop, y luego usando p u o puts u.inspect para ver qué caracteres están realmente en la salida.

Y para su información, es idiomático en Ruby omitir paréntesis al llamar a métodos que no toman ningún argumento, p. u = foo.chop.

+0

Thanx @phrogz. Publiqué la salida de u.inspect. Todavía estoy golpeando el mismo problema, ¿no lo estoy invocando de la manera correcta? – codeObserver

+0

@codeObserver El uso de 'u.chomp' no hará nada, ya que esta es la versión no mutante del método. Tienes que hacer 'u.chomp!' O 'u = u.chomp'. Lo mismo aplica para '.strip' contra' .strip! '. – Phrogz

+0

thnx. Eso lo solucionó – codeObserver

3

str.chomp wll eliminará el carácter de nueva línea de las cadenas. str.chop solo elimina el último carácter.

2

¿por qué llama a la cáscara de algo tan simple:

h, p1, p2, u = l.split /:/ 
+0

thnx glenn. Básicamente, todavía estoy aprendiendo Ruby y tratando de portar algunos guiones de shell a Ruby. Así que, como primera iteración, intenté simplemente ejecutar comandos de shell de forma nativa en una estructura de ruby ​​y luego tomaría un pase para eliminar el – codeObserver

+0

innecesario. Entonces 'chomp' es lo que quieres. –

Cuestiones relacionadas