2013-06-08 3 views
3

Stack Overflow에 관한 비슷한 질문을 모두 쳐다 보았고 설명서에 많은 내용을 시도했습니다. 나의 현재 시도는 아래에있다.물고기 셸에 문자열 포함

내가 이루고자하는 것은 컴퓨터 사용자를 기반으로 한 차별적 인 행동입니다. 나는 업무용 컴퓨터와 가정용 컴퓨터를 가지고 있으며 집에 입력 할 때 내가 원하는 코드보다 명령 줄에 "코드"를 입력 할 때 업무용 컴퓨터를 다른 디렉터리로 옮기길 원합니다. 나는이 (내 작품의 이름은, 집이 AFK입니다 SFK) 시도 :이 ("알 수없는 명령은 사용자/SFK /의 .config/생선/포함"고 불평한다, 현재

function code 
    set result (dirh) 
    if [contains "sfk" $result] 
     cd ~/rails 
    else if [contains "afk" $result] 
     cd ~/code 
    else 
     echo $result 
    end 
end 

내 PWD는 사용자/SFK/.config/fish/내가 이것을 입력 할 때). 아마도 목록에만 포함되어있을 것이라고 생각하지만, 문서는 이것에 대해 명확하지 않습니다? 내가 어떻게 이럴 수 있니?

편집

그냥이 시도하고 더 이상 오류가 있지만, 그것이 내 사용자가 dirh 문자열에 포함되어 SFK, 원인 안되는는 다른 케이스에 끝 :

function code 
    set result (dirh) 
    if test (contains "sfk" $result) 
     cd ~/rails 
    else if test (contains "afk" $result) 
     cd ~/code 
    else 
     echo $result 
    end 
end 
+0

모르겠습니까? 2 명의 다른 사용자가 있다면 왜 2 개의 별도의'code' 함수를 생성하지 않는가? – Hauleth

+0

Longish answer - 내 물고기 기능의 90 %가 동일하기 때문에 github에 물고기 물고기가 있습니다. 따라서 두 물고기 사이의 새로운 물고기 기능을 동기화 할 수 있으므로 동일하게 작동합니다. 그러나이 기능은 서로 다릅니다. .gitignored 파일을 컴퓨터 특정 기능을 가지고, 나는 컴퓨터의 사용자 이름에 따라 다르게 동작하는 기능을 갖기를 바랐다. – Sasha

+2

필요한 경로를 폴더에 지정하는 전역 env 변수 설정에 대해 생각해 보았습니까? home 파일'.configrc' 파일을 열고'fish.config' 파일에 저장하십시오. 이 접근법이 보편적 일 것입니다. – Hauleth

답변

6

위에서 언급 한대로이 특정 사용 사례를위한 최상의 솔루션입니다. 그러나 누군가가 다른 것을하고 싶어하는 경우에 대비하여 질문에 답하는 것.

당신이 바로 contains인데, 목록 항목과 정확히 일치합니다. 대신 switch 함수를 사용할 수 있습니다. 와일드 카드 매칭을 지원합니다.

function code 
    set -l result (dirh) 

    switch $result 
     case '*sfk*' 
      cd ~/rails 
     case '*afk*' 
      cd ~/code 
     case '*' 
      echo $result 
    end 
end