디렉토리를 CD로 전달

디렉토리를 CD로 전달

내가 본 최신 디렉토리에 대해 퍼지 검색을 수행하고 시간을 절약할 수 있는 간단한 한 줄 기능이 있습니다.

dirs | sed 'y/ /\n/' | fzf | xargs cd

2시간 후에는 무엇이 잘못되었는지 이해하지 못합니다.)

다음과 같은 오류가 계속 발생합니다.

/usr/bin/cd: line 4: cd: ~/Downloads/demo: No such file or directory

디렉토리가 존재하더라도 내가 무엇을 하든 상관없습니다. CD에 어떤 문제가 있으며 왜 작동하지 않습니까?

의견을 보내주셔서 감사합니다. 추가 정보 함수 작성과 같은 다른 접근 방식을 시도했습니다.

fdr() {
     local dir
     dir=`dirs | sed 'y/ /\n/' | fzf`
     cd $dir
}  

올바른 값을 사용해 도 dir위와 같은 오류가 발생합니다.

내 마지막 기능

도움을 주셔서 감사합니다. 서브쉘이 내 머릿속에서 작동하고 있으며 이것이 내 최종 답변입니다. 약간 해킹되었지만 지금은 아닙니다.

fdr() {
  local dir
  myusernmae=`whoami`
  dir=`dirs | sed 'y/ /\n/' | sed "s/~/\/Users\/$myusernmae/g" | fzf +m`
  cd "$dir"
}

답변1

여기에는 세 가지 문제가 있습니다.

  1. cd~/Downloads/demo올바른 경로 가 /Users/snickers/Download/demo.

    일반적으로 cd ~/Downloads/demo명령줄에 입력하면 쉘은 명령을 실행하기 전에 물결표를 홈 디렉토리 경로로 확장합니다 cd. 변수 확장 전에 물결표 확장이 발생하기 때문에 여기서는 이런 일이 발생하지 않습니다("확장 간의 순서를 이해하는 방법은 무엇입니까?").

    bash쉘을 사용한다고 가정하면 를 사용하면 dirs -l전체 경로를 출력하여 이 문제를 우회할 수 있습니다.dirs

  2. cd쉘 내장 명령입니다. macOS 컴퓨터에서 외부 명령으로도 사용할 수 있으므로 /usr/bin/cd다른 많은 Unix 사용자처럼 cd사용 하지 않습니다 xargs. 그러나 외부 cd명령은 현재 셸의 디렉터리를 변경할 수 없습니다. 이것은 "CD는 왜 프로그램이 아닌가?" 그리고"'cd'는 어디에 있나요?” 및 유사한 문제. 쉘 함수의 변형은 쉘의 내장 cd명령을 사용하기 때문에 이 문제를 회피합니다.

  3. 마지막 문제는 두 번째 문제의 변형이며 다른 문제로 인해 실제로 작동하지 않습니다. 즉, 명령이 호출 셸에 대한 외부 명령에 의해 cd실행될 때 작업 디렉터리를 변경할 수 없을 뿐만 아니라 xargs라고 합니다 xargs. 이 명령은 파이프라인의 단계로 서브셸에서 실행됩니다. 하위 쉘에서 쉘을 변경해도 상위 쉘에서는 변경되지 않습니다.

당신은 사용할 수 있어야합니다

fdr () {
   cd "$( dirs -l -p | fzf )"
}

이 줄의 각 줄은 dirs -l -p물결표가 확장된 디렉터리 스택의 디렉터리를 출력합니다. bash이는 이름에 개행 문자가 포함된 디렉터리가 스택에 없다고 가정하지만,~ 할 것이다공백이 있는 디렉토리가 지원됩니다(부분적으로는 변환으로 인해 sed부분적으로는 인용되지 않은 확장으로 인해 사용자 자신의 함수에서는 이를 수행하지 않습니다 $dir).

관련 정보