2011-05-19 34 views
1

目錄在腳本中,我有這條線的Linux:訪問包含空格

#!/bin/sh 

log="${var}logs/console logs/since2_%m-%d-%Y.log" # <-- console logs has a space 

我如何可以訪問此文件?

把引號喜歡:

log="${var}logs/"console logs"/since2_%m-%d-%Y.log" 

抵消了引號它,逃避引號使得它試圖找到包含字符「

+0

我認爲你需要提供更多的信息,或許是一個簡單的測試程序。您顯示的某些錯誤消息不會在代碼中發生。 – 2011-05-19 06:53:11

+0

@Seth那些下面提供的 – dukevin 2011-05-19 06:56:56

回答

2

問題不在於問題中引用的內容。這是一個可用的示例腳本。除了定義之外,請注意使用$日誌的引用。如果您需要進一步的幫助,請發佈完整腳本或人員可以運行的最小工作子集來重現問題。

#!/bin/sh 
var=/tmp/ 
log="${var}logs/console logs/since2_%m-%d-%Y.log" 
mkdir -p "$log" 
rmdir "$log" 
fortune | tee "$log" 
echo ---- 
cat "$log" 
+0

+1這是一個很好的例子:它將(1)引用到'log'時引用該值,(2)將「$ log」作爲參數展開時引用該引用。 – karmakaze 2011-05-19 07:22:36

-2

我覺得log="${var}logs/console\ logs/since2_%m-%d-%Y.log"應該工作文件一次嘗試
。 這個想法是逃避[空間]

+0

不起作用,我得到這個:'tee:logs/since2_%m-%d-%Y.log沒有這樣的文件或目錄' – dukevin 2011-05-19 06:36:42

+0

不,這將達到一個名爲'console \日誌',與... -e-backslash-space-l- ... – Gilles 2011-05-19 07:00:49

1

變量$ IFS包含字段分隔符,默認情況下是空格,所以請嘗試

oldifs="$IFS" 
IFS=" 
" 

log="${var}logs/console logs/since2_%m-%d-%Y.log" 

# do whatever you want with $log now 

IFS=$oldifs 
+0

不起作用,我得到這個:'tee:logs/since2_%m-%d-%Y.log沒有這樣的文件或目錄' – dukevin 2011-05-19 06:37:14

+0

我reedited答案,這應該現在:) – 2011-05-19 06:47:24

+0

啊感謝都鐸王朝,恥辱有沒有一個更乾淨的方式來做到這一點 – dukevin 2011-05-19 06:59:49

3

您遇到的問題可能是您使用$ log的位置,您應該使用「$ log」來保留空格。

+0

didn 't work'./starter.sh:line 5:log =/home/duke/aa/servers/demo/var/logs/console logs/since2_%m-%d-%Y.log:沒有這樣的文件或目錄' – dukevin 2011-05-19 06:44:57

+1

同意了,日誌的定義會沒問題,但是當你使用$ log nother聲明它將被解釋爲沒有周圍引號的單獨單詞。 – Tom 2011-05-19 06:50:00

+0

@凱文:karmakaze的回答是正確的。如果你仍然有問題,它在腳本的不同部分。發佈整個腳本。 – Gilles 2011-05-19 07:01:43

0

如果你打算今天在該文件名日期:

log="$(date "+${var}logs/console logs/since2_%m-%d-%Y.log")" 
touch "$log" 

我建議你使用%Y-%m-%d作爲排序都cronologically和詞彙。