문제

나는 내 소프트웨어의 요구 사항 인 'CD'명령을 수정하는 Bash에 대한 내장을 작성했습니다. Bash 자체와 독립적으로 로딩 가능한 것을 실제로 배포하는 방법이 있습니까? 나는 소스 코드에서 쉘을 패치하고 컴파일하여 사람들이 해제 할 수 있다는 것을 알고 있기 때문에 "추가 기능"의 낙하 만 배포하는 것을 이상적으로 배포하고 싶습니다.

사용자가 디렉토리에 얼마나 오랫동안 있는지 시간을내어 원하는 위치를 결정할 수 있습니다. 이 기능입니다. http://github.com/joelthelion/autojump/tree/master 성능 문제를 위해 bash 내장으로 다시 작성했습니다. 이 구현이 사용됩니다 $PROMPT_COMMAND 일하기 위해서는 통합 된 것을 원했습니다.

도움이 되었습니까?

해결책

무엇을 수정했는지는 확실하지 않지만 어쨌든 bash (적어도 ksh93 IIRC는 개념을 소개했습니다 zsh) 지원, 사용 enable -f file name 구문, 내장 기능을 외부 동적으로로드 된 모듈로로드합니다.

이 모듈은 일반 파일 인 모듈이 대상 버전/아키텍처와 호환되는 한 확실히 독립적으로 배포 할 수 있습니다. 이 질문을했을 때 5 년 전 이미 사실이었습니다.

귀하의 경우 한 가지 문제는 내장 내장을 과부하시키는 문서화 된 방법이없는 것 같습니다. cd 전자의 액세스 능력을 유지하면서 동적으로로드 된 것.

간단한 해결 방법은 MyCD와 같이 다른 이름으로 사용자 정의 된 CD를 구현하는 것입니다.

int mycd_builtin(list)
WORD_LIST *list;
{
  int rv;
  rv=cd_builtin(list);
  if(rv == EXECUTION_SUCCESS) {
    char wd[PATH_MAX+1];
    getcwd(wd,sizeof(wd));
    // do your custom stuff knowing the new working directory
    ...
  }
  return (rv);
}

그런 다음 일반적인 버전 대신 사용될 별칭 또는 더 나은 쉘 기능을 사용하십시오.

cd() {
  mycd "$@"
}

사용자 정의가 표준 명령의 동작에 영향을 미치지 않으므로 스크립트를 사용하여 스크립트를 깨뜨릴 위험이없는 한, 접근 방식에는 아무런 문제가 없습니다.

다른 팁

내장 CD를 변경하는 것은 모든 관리자에게 도움이되고 외국 사용자에게는 환영받지 못합니다. 'Smart-CD'를 명명하고 사용자가 .bashrc 또는 .profile에 포함시켜 기능을 원하는지 결정할 수있는 문제는 무엇입니까? 그런 다음 원하는 것을 설정할 수 있습니다.

또한 디렉토리에 얼마나 오래 있었는지 사용하는 것은 선호도를 꽤 열악한 표시입니다. 유휴 (밤새 잊혀진 쉘 /TMP), 장기 실행 스크립트 (야간 CRON 작업) 및 실제 활동을 어떻게 구별 할 수 있습니까?

별명, 소프트 링크, $ 변수, 스크립트와 같은 좋아하는 디렉토리에 바로 가기를 만드는 다양한 방법이 있습니다. 시스템의 다른 사용자가 사용 패턴을 환영한다고 가정하는 것은 오만입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top