디렉토리별로 별칭을 설정하는 방법은 무엇입니까?


18

별명 go이 있지만 다른 디렉토리에서 다른 일을하고 싶습니까?

한 디렉토리에서는 실행해야 cmd1하지만 다른 디렉토리에서는 실행해야합니다.cmd2

그건 그렇고, 이미 위의 디렉토리로 전환하기위한 별칭이 있으므로 go별칭 할당을 별칭 에 추가 할 수 foo있습니까?

alias "foo=cd /path/to/foo"

OSX의 bash (?)에서 작업 중입니다.


1
이것이 makefile을위한 것입니다.
itsbruce

답변:


16

당신이 요구하는 것을 완전히 확신하지는 못하지만, 별칭은 별칭에있는 것으로 확장됩니다. 별명이 두 개인 경우 다른 명령, 별명까지 추가 할 수 있습니다.

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

다른 상황에서는 기능을 지정할 수 있습니다. .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

더 많은 선택 사항이있는 경우 케이스 구조를 더 잘 사용할 수 있습니다.


4

나는 당신이 매우 "디렉토리 지향적"이라는 느낌을 얻었고,이 경우 이것은 당신의 정신을 더 잘 맞출 수 있습니다.

(그러나 솔직히 말해서 이것이 나쁜 생각이라고 생각합니다. 명령을 전역 적으로 사용하고 싶습니다.)

.bashrc넣어, alias go="./.cmd"(다음 source ~/.bashrc).

그런 다음, 이러한 각 디렉토리에,라는 스크립트 넣고 .cmd다음을, chmod +x .cmd그럼 그냥, go당신의 일을.


2
그것은 많은 작업입니다 ... 여기의 사용 사례가 있습니다 : 테스트를 실행할 때 특정 테스트를 실행하기 위해 rspec-all의 별칭을 지정하고 싶습니다. 그러나 어떤 테스트는 프로젝트에 따라 다릅니다. 그리고 그것은 디렉토리에 의해 결정됩니다.
B Seven

2
내가 볼 수 있듯이 두 가지 옵션이 있는데, 위에서 설명한 @Bernhard와 같은 하나의 기능을 사용하고 디렉토리에 따라 분기하거나 (말한 것처럼) 디렉토리에 매개 변수를 넣을 수 있습니다. 생각해 보면, 스크립트 일 필요는 없습니다 touch .TESTNO; echo 2 > .TESTNO. 각 디렉토리에 파일 ( )을 넣은 다음 함수에서 해당 파일을 찾고 .TESTNO 파일의 테스트 번호에 따라 분기하십시오. 포함합니다. 전혀 어려운 것은 아니지만 아마도 이것에 대한 별칭을 사용할 수 없습니다. 기능을 사용해야합니다.
Emanuel Berg

2

나는 그것을 달성하는 프로젝트를 진행하고 있습니다. 확인하십시오 : localalias .

데모는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

충분히 웃긴, 실제로 go데모에서 예제로 사용 했습니다. 나는 디렉토리 전환 (데모에 대해 바꿔야 할 것)을 보여주지 않았지만 la명령을 가진 기능 은 실제로 정의 된 디렉토리에 로컬입니다.


1
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

비슷하지만 "go"는 특정 디렉토리에서 다른 기능을 원하는 명령이라고 가정합니다.


1

.bashrc에 다음 함수를 추가하면

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

.aliases 파일이있는 디렉토리로 cd 할 때마다 소스가됩니다.

다른 사람이 컴퓨터에서 파일을 만들 수있는 경우 보안에주의하십시오.

이 트릭을 사용하면 별칭이 제거되지 않지만 함수에서 원하는만큼 많은 코드를 작성할 수 있습니다.

ondir 은이 트릭을 사용하며 많은 종과 휘파람을 가지고 있습니다.

http://swapoff.org/ondir.html#download


나는 이것이 영리하다고 생각하지만 그것이 의지하기 때문에 위험 해 보인다 .bashrc. cron예를 들어 에는 작동하지 않습니다 .
ctbrown

bashrc에 위험한 것이 있는지 확실하지 않습니다. 나는 이것이 별칭의 표준 / 올바른 장소라고 생각합니다. 환경의 특성상 서로 다릅니다. 질문은 다른 환경이 필요하다는 것입니다. cron이 비슷한 환경 을 원한다면 cron에서 사용자 .bashrc를 소싱하는 것을 막을 수있는 것은 없습니다 . NB cron은 isatty와 chum을 사용하기 때문에 항상 대화식 쉘과 다르게 작동해야합니다.
teknopaul

사실 bashrc 자체에는 위험이 없습니다. 문제는 디렉토리로 변경되는 프로세스가 bashrc를 소스로 할 수있는 방법이 없다는 것입니다. 대화식 세션 인 경우 한 가지입니다. 해당 디렉토리가 bash 쉘을 사용하거나 사용하지 않을 수있는 사용자 및 프로세스간에 공유되는 경우에는 상당히 다릅니다. .bash_aliases는 일부 시스템에서 bash 별명에 대한 선호 위치입니다.
ctbrown
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.