如何在我的 cshrc 中 cd 然后 ls

如何在我的 cshrc 中 cd 然后 ls

我希望能够 cd 进入路径并ls自动获取它。我尝试过执行诸如

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

但这会导致错误“错误放置()”,所以我认为我无法执行函数。我也尝试过

alias cs ' cd !:1 ; ls '

我可以用它来获取我的 .cshrc ,但是当我调用它时,它不会执行任何操作,而且我仍然在同一个文件夹中。

答案1

你们非常非常亲密。 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'

然后!:1被评估作为prompt, 别名定义为cd prompt; ls.为了能够引用您键入的命令 ( vacation_photographs),您需要将别名定义为cd !:1; ls,因此您需要使用反斜杠来推迟对 的解释!:1,因此它将在运行别名时而不是当它被定义时。

如果你一直在做

alias cs 'cd !:1; ls'

但它不起作用任何事物(甚至不给你错误消息),我无法解释这一点。

相关内容