2011-09-23 24 views
6

我想在腳本中運行簡單的shell命令,但即使使用chomp或chop也無法擺脫新行。從Ruby的shell命令中刪除換行

有什麼我失蹤?

 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或添加任何寶石?

+0

到底是什麼問題?什麼是預期的輸出? – Geo

回答

7

使用String#strip刪除所有打包的空白或String#chomp(注意'm')僅刪除單個尾隨換行符。

String#chop刪除最後一個字符(或\r\n對),如果該命令不總是以換行符結束,那麼這可能是危險的。

我認爲你的代碼不起作用,因爲結果在輸出結尾有多個換行符\空白符。 (如果是這樣,strip將適用於您。)但是,您可以通過刪除對chop的呼叫,然後使用p uputs u.inspect來驗證此情況,以查看輸出中實際存在哪些字符。

而且,對於您的信息,在調用不帶參數的方法時,Ruby中慣用的方法是省略括號。 u = foo.chop

+0

Thanx @phrogz。我發佈了u.inspect的輸出。我仍然遇到同樣的問題,我是不是以正確的方式調用它? – codeObserver

+0

@codeObserver使用'u.chomp'不會做任何事情,因爲這是該方法的非變異版本。你需要做'u.chomp!'或'u = u.chomp'。 '.strip'與'.strip!'相同。 – Phrogz

+0

thnx。這解決了它。 – codeObserver

3

str.chomp wll從字符串中刪除換行符。 str.chop只刪除最後一個字符。

2

你爲什麼呼喚殼的東西很簡單:

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

thnx glenn。基本上我仍然在學習Ruby,並嘗試將一些shell腳本移植到Ruby。所以作爲第一次迭代試圖在ruby結構中本地運行shell命令,然後我將通過掃除不必要的 – codeObserver

+0

然後'chomp'就是你想要的。 –