내 cshrc에서 cd와 ls를 어떻게 사용합니까?

내 cshrc에서 cd와 ls를 어떻게 사용합니까?

나는 경로에 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!:0is grep!:1is 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'

하지만 작동하지 않습니다아무것(오류 메시지도 표시하지 않음) 이것을 설명할 수 없습니다.

관련 정보