2013-06-29 21 views

回答

4

你肯定可以定義一個函數來做到這一點:

$ go_up() { for i in $(seq $1); do cd ..; done } 
$ go_up 3 # go 3 directories up 
+0

打我30秒:)(+1) – user000001

+1

我接受它作爲第一個和確切回答這個問題。我把'.bash_profile'加入了你的答案和Jens的'up2'和'up3'(甚至沒有'up4')。截至目前,似乎後者更實用。 –

3

我不知道,做任何命令,但很容易給自己創造一個。例如,只需添加

cdn() { 
    for ((i=0;i<${1-0};i++)) 
    do 
    cd .. 
    done 
} 

~/.bashrc文件,並創建一個新的後殼,你可以只運行

cdn N 

,你會被N目錄

+0

我明白了。所以簡短的回答是,「沒有內置任何東西,爲自己寫一個腳本」。 –

+0

@PiotrMigdal至少有5個SO用戶還沒有看到過,如果有什麼說的話...... – user000001

2

您可以使用上移單線for環:..

for i in {1..3}; do cd ../; done 

n

例如更換3

[email protected]:~/test/5/4/3/2/1$ pwd 
/home/m/test/5/4/3/2/1 

[email protected]:~/test/5/4/3/2/1$ for i in {1..3}; do cd ../; done 

[email protected]:~/test/5/4$ pwd 
/home/m/test/5/4 

...但我不認爲它會比打字cd..然後打tab每個級別要快得多你想要去向上!! :)

1

一種有趣的方式:

cdupn() { 
    local a 
    [[ $1 =~ ^[[:digit:]]+$ ]] && printf -v a "%$1s" && cd "${a// /../}" 
} 

它是如何工作的?

  • 我們首先檢查參數確實是一個數字(一串數字)。
  • 我們用$1空格填充變量a
  • 我們執行cd其中a中的每個空格已被替換爲../

用途爲:

cdupn 42 

往上走至第四十二父目錄。

該方法的專業是,你仍然可以cd -回到以前的目錄,不像使用循環的方法。

絕對值得放入您的.bashrc。或不。

3

好吧,另一個非常有趣的答案,那就是真的一行代碼,上去42個父目錄:

cd $(yes ../|head -42|tr -d \\n) 

同gniourf_gniourf的其他答案,這是cd -友好(和它只是一個幾個字符比最短的答案長)。

用您最喜歡的號碼替換42


現在你明白了美妙的命令yes驚人的力量,你可以加入黑暗的一面,用邪惡的命令eval,雖然我們在這我們可以使用反引號可怕:

eval `yes 'cd ..;'|head -42` 

這是迄今爲止最短的一行,但它真的很糟糕:它使用eval,反引號,它不是cd -友好。但是,嘿,它工作得很好,很有趣!

2

你多長時間超過五個關卡?如果答案是不要過於頻繁我建議你把這些cd -友好的別名,在您的個人資料:

alias up2='cd ../..' 
alias up3='cd ../../..' 
alias up4='cd ../../../..' 
alias up5='cd ../../../../..' 

優勢

  • 沒有bashims,沒有zshisms,沒有kshisms。
  • 可與任何支持別名的外殼搭配使用
  • 可讀性和可理解性。
+0

通常2-3個級別...用「_not_很大。 –

+0

@PiotrMigdal正好;複雜的編譯器甚至使用它,工程師們爲它發明了一個詞:**循環展開**。 – Jens

+1

我在@LevLevitsky文章中加入了'.bash_profile'' up2'和'up3'以及'goup()'。我會看到我將在練習中使用哪一個(如果有的話))。 –