2015-07-13 36 views
2

我想在zsh中添加全局aliash這將是這個樣子:的zsh:全球別名重定向到臨時文件

alias -g t='> tmp-$(date +%Y%m%d-%h%m%s).txt' 

它應該做的是在當前目錄下創建一個新的時間戳的臨時文件並將輸出重定向到該文件。但是,文件名在zsh被取代時被評估,而不是被調用的別名。

我想我需要的是某種懶惰的評價。有沒有辦法做到這一點?

+1

呃?不,每次使用別名時都會評估文件名,因此您的代碼完全按照您的要求進行。你可以自己測試它。我想不出任何會使zsh在這種情況下以不同方式工作的選項。除非你在函數中使用別名 - 別名在函數定義時擴展,而不是在執行時被擴展。 – Gilles

+0

Grr ...這是我的期望是誠實的。而且,顯然,你是對的。我在別名之後採購了一些模塊,並且每次打開一個新shell時,他們都一直在創建tmp文件,這似乎是這些模塊正在做什麼的問題。將別名移到rc文件的末尾解決了這個問題。萬分感謝。你建議我現在對問題和答案做什麼?編輯答案,刪除答案或刪除問題。或者讓它成爲? – asb

+0

用[實際上重現問題的代碼](https://stackoverflow.com/help/mcve)編輯你的問題(具有預期的和實際的輸出)。 – Gilles

回答

2

好吧,我想出了一個辦法。比我想要的要多:

function redirect-to-tmp() { 
    TMPFILE="./tmp-$(date +%y%m%d-%H%M%S)" 
    cat >>! $TMPFILE 
    echo "Redirected to $TMPFILE" 
} 

function redirect-to-tee() { 
    TMPFILE="./tmp-$(date +%y%m%d-%H%M%S)" 
    tee -a $TMPFILE 
    echo "Redirected to $TMPFILE" 
} 

alias -g t='| redirect-to-tmp' 
alias -g T='| redirect-to-tee' 

讓我知道是否有其他人有更好的答案。

+1

那些'while'循環在這裏不是必要的,更好的替換它們'cat >>! $ TMPFILE'和'tee -a $ TMPFILE' – Ryba

+0

哇!爲什麼我不這麼想。 :D謝謝;這是非常整潔。 – asb