나는 경로에 CD를 넣고 ls
자동으로 얻을 수 있기를 원합니다. 나는 다음과 같은 것을 실행하려고 시도했습니다.
cs() { cd "@a" ; ls}
하지만 이로 인해 "Error in position()" 오류가 발생하므로 함수를 실행할 수 없을 것 같습니다. 나도 시도했다
alias cs ' cd !:1 ; ls '
이를 사용하여 .cshrc를 가져올 수 있지만 호출하면 아무 작업도 수행되지 않으며 여전히 같은 폴더에 있습니다.
답변1
당신은 매우 가깝습니다. 유닉스는 백슬래시를 좋아합니다. 유닉스는 아침 식사로 백슬래시를 먹습니다. 당신은해야합니다
alias cs 'cd \!:1; ls'
csh(및 그 자손)에 대한 문서를 보면 !
이전 명령을 참조할 수 있는 기록 메커니즘을 참조하고 있음을 알 수 있습니다. 가장 간단한 경우에는 !!
가장 최근의 명령을 호출하고 반복합니다.
!:1
참조된 명령의 단어 #1을 나타냅니다(여기서 명령 자체는 단어 #0입니다. 예를 들어 in grep needle *.txt
,
!:0
is grep
및 !:1
is needle
).
Bash 및 Bourne 셸의 다른 자손에는 다음과 같은 기능이 있습니다.매우비슷한.
C 쉘 별칭은 약간 이상합니다. 별칭을 실행할 때 다음 명령은입력한 내용
(예를 들어 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'
하지만 작동하지 않습니다아무것(오류 메시지도 표시하지 않음) 이것을 설명할 수 없습니다.