Linux

我如何在我的 cshrc 中 cd 然後 ls

  • December 11, 2018

我希望能夠 cd 進入路徑並ls自動擁有它。我試過做一個功能,比如

cs() { cd "@a" ; ls}

但這會導致錯誤提示“放置錯誤()”,所以我認為我不能執行功能。我也試過

alias cs ' cd !:1 ; ls '

我可以用這個來獲取我的 .cshrc 但是當我呼叫它時,它什麼也沒做,我仍然在同一個文件夾中。

你非常非常親近。Unix 喜歡反斜杠;Unix 早餐吃反斜杠。你需要

alias cs 'cd \!:1; ls'

如果您查看 csh(及其後代)的文件,您會看到它!指的是歷史機制,它可以讓您參考以前的命令。最簡單的例子是!!,它呼叫並重複最近的命令。  !:1表示引用命令中的單詞 #1(其中命令本身是單詞 #0;因此,例如 in grep needle *.txt、  !:0isgrep!:1is needle)。

Bash 和 Bourne shell 的其他後代有一個非常相似的功能。

C shell 別名有點奇怪。當您執行別名時,您輸入的命令 (例如,  cs vacation_photographs)被視為“上一個命令”。因此,當別名執行時,!:1將替換為vacation_photographs.

問題是當別名執行時會發生這種情況*。*  但是當別名被定義時,歷史擴展也會發生。所以,例如,如果你.cshrc

set prompt = '% '
alias cs 'cd !:1; ls'

then!:1被評估prompt,別名被定義為cd prompt; ls。為了能夠引用您鍵入的命令 ( vacation_photographs),您需要將別名cd !:1; ls定義!:1為當它被定義時。

如果你一直在做

alias cs 'cd !:1; ls'

它什麼也沒做*(*甚至沒有給你錯誤資訊),我無法解釋。

引用自:https://unix.stackexchange.com/questions/487420