Избавьтесь от новой строки из команд оболочки в Ruby - PullRequest
6 голосов
/ 23 сентября 2011

Я пытаюсь запустить простые команды оболочки в моем скрипте, но не могу избавиться от новых строк, даже используя chomp или chop.

Что-то мне не хватает?

      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

Есть предложения?

Согласно некоторым предложениям, изменил мой код на:

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

puts u.inspect

Выход: "string\n"

По сути, я раньше пытался использовать chomp и столкнулся с той же проблемой. Нужно ли называть chomp по-другому или добавлять какой-нибудь драгоценный камень?

Ответы [ 3 ]

8 голосов
/ 23 сентября 2011

Используйте либо String#strip, чтобы удалить все пробелы, либо String#chomp (обратите внимание на 'm'), чтобы удалить только один завершающий символ новой строки.

String#chop удаляет последний символ (или \r\n пара), который может быть опасным, если команда не всегда заканчивается новой строкой.

Я предполагаю, что ваш код не работал, потому что в результате в конце выходных данных было несколько символов новой строки \ пробела. (И если это так, strip будет работать для вас.) Однако вы можете проверить это, удалив вызов к chop, а затем используя p u или puts u.inspect, чтобы увидеть, какие символы на самом деле находятся в выходных данных.

И для вашего сведения, в Ruby идиоматично опускать круглые скобки при вызове методов, которые не принимают аргументов, например u = foo.chop.

4 голосов
/ 23 сентября 2011

str.chomp удалит символ новой строки из строк. str.chop удаляет только последний символ.

2 голосов
/ 23 сентября 2011

Почему вы вызываете оболочку для чего-то такого простого:

h, p1, p2, u = l.split /:/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...