2016-11-29 140 views
0

我試圖使用紅寶石執行shell命令,但我不能將目錄切換到帶有空格的PATH。在紅寶石的shell cd命令

variable = %x[cd #{ENV["HOME"]}/Virtual\\ VMs/] 

這是行不通的。 謝謝

+1

'variable =%x [cd#{ENV [「HOME」]}/Virtual \\ VMs /]'對我有用 – Santhosh

+1

爲什麼你不使用Ruby std中的'Dir.chdir'? https://ruby-doc.org/core-2.2.0/Dir.html#chdir-method –

+0

我用它。謝謝 – eifersucht

回答

1

是絕對安全:

path = File.join [ENV["HOME"], 'Virtual VMs'] 
variable = %x[cd '#{path}'] 

請注意,cd具有空輸出,所以要確保它工作一個可能想要做的不便,如:

path = File.join [ENV["HOME"], 'Virtual VMs'] 
variable = %x[cd '#{path}' && ls -la] 
#⇒ "total 32\ndrwxr-xr-x ....." 
1

什麼是否應該這樣做?你嘗試chdir到一個目錄,但是不要做任何事情。無論如何,你的variable將是空的。除了沒有意義的事實之外,您無法以這種方式自己可靠地執行光盤,因爲它不是可執行文件。你可以看到這個,如果你只是執行%x[cd]。你會得到一個Errno::ENOENT例外。

也許你應該首先在更廣泛的背景下描述你想用你的代碼實現什麼。你想在哪裏改變工作目錄?在Ruby進程中 - 在這種情況下,您必須使用Dir.chdir - 或者在子進程中 - 在這種情況下,您必須在cd之後執行一些命令。

+0

我試圖檢查虛擬機的信息分配在:/根/虛擬VMs /文件夾/文件夾,所以首先我需要改變目錄即時工作 – eifersucht

+0

我的事情Dir.chdir是最好的辦法,但我不能改變路徑上面有空格,系統說消息:Errno :: ENOENT:沒有這樣的文件或目錄@ dir_chdir – eifersucht

+2

再次說明:'Dir.chdir File.join [ENV [「HOME」],'虛擬機]'完美的工作。 – mudasobwa