2015-05-09 64 views
-1

我試圖創建一個目錄,如果它不存在,並且進一步在該行下創建該目錄中的日誌文件。這將是在當前用戶的主目錄
僞代碼:Linux shell文件。 mkdir和pushd命令不做我想要的

If directory "/home/LOGS" does not exist 
make directory "/home/LOGS" 

然後只要創建一個日誌文件,它會在該目錄中保存,而不是程序是從運行的目錄。
這是我迄今爲止,它只是不工作...

pushd -n $"../LOGS" >/dev/null 2>&1 

#Create the logs folder 
if [ ! -d $"home/LOGS" ]; then 
mkdir -p $"home/LOGS" 
fi 

如果有幫助,我的文件被保存,象這樣:

 function savefile { 
# Save to file 
    if [ -e $username.log ]; then 
    echo "Username already exists, returning you to the menu." 
    sleep 2 
    clear 
     menu 
    else 
    echo $fullname >> $username.log 
    echo $password >> $username.log 
     curdate=$(date +'%d/%m/%Y %H:%M:%S') 
    echo $curdate >> $username.log 
    echo "Creating your account" 
    sleep 2 
    clear 
    echo "Account created" 
    echo 
    afterBasic 
    fi 
} 

任何幫助將不勝感激。

+1

您是否認爲在測試之前嘗試「pushd」到目錄中可能存在問題,以查看該目錄是否實際存在? –

+0

我以前試過把它放在後面。我現在再試一次。 – Badja

+0

@DavidHoelzer:一般的好點;但請注意,即使按正確的順序,當前目錄中也不會有任何更改,因爲正在使用「pushd -n」。 – mklement0

回答

3

mkdir -p本身提供你想要的邏輯,所以你可以簡單地做:

mkdir -p "$HOME/LOGS" && pushd "$HOME/LOGS" >/dev/null || exit 
  • mkdir -p創建目標目錄,如果它不已經存在,然後更改。
    • 請注意,即使目標已存在,mkdir -p也表示成功。
    • 這允許無條件使用mkdir -p,而不必擔心目錄是否已經存在或沒有。
  • && pushd "$HOME/LOGS" >/dev/null然後改到目錄"$HOME/LOGS",抑制其一貫標準輸出輸出(>/dev/null
    • 注意標準錯誤輸出,不像在你的代碼,是故意抑制,這樣的錯誤信息唐不會迷路。
  • 爲了安全起見,|| exit退出以非零退出代碼腳本(信號故障),如果該目錄無法創建或更改來(因爲這裏的exit命令沒有明確指定的退出代碼,前面的命令的退出代碼被傳遞 - 在這種情況下,根據定義它是非零的)。

請注意,我用"$HOME/LOGS",假設這是你真正想要的;即當前用戶的主目錄中的LOGS子目錄。

如果您想要絕對路徑/home/LOGS,只需從原始字符串中刪除$即可。

$"home/LOGS"將默認取值爲home/LOGS,即相對路徑。 很少使用的$"..."字符串意味着用於本地化

+0

謝謝,我改變了這一點,以得到我需要的東西! – Badja

+0

忘了編輯它,我確實改變了它,編輯了顯示的答案 – Badja