我希望能够 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
、
!:0
isgrep
和!:1
is 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'
但它不起作用任何事物(甚至不给你错误消息),我无法解释这一点。