![디렉토리를 CD로 전달](https://linux55.com/image/168407/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20CD%EB%A1%9C%20%EC%A0%84%EB%8B%AC.png)
내가 본 최신 디렉토리에 대해 퍼지 검색을 수행하고 시간을 절약할 수 있는 간단한 한 줄 기능이 있습니다.
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
여기에는 세 가지 문제가 있습니다.
cd
~/Downloads/demo
올바른 경로 가/Users/snickers/Download/demo
.일반적으로
cd ~/Downloads/demo
명령줄에 입력하면 쉘은 명령을 실행하기 전에 물결표를 홈 디렉토리 경로로 확장합니다cd
. 변수 확장 전에 물결표 확장이 발생하기 때문에 여기서는 이런 일이 발생하지 않습니다("확장 간의 순서를 이해하는 방법은 무엇입니까?").bash
쉘을 사용한다고 가정하면 를 사용하면dirs -l
전체 경로를 출력하여 이 문제를 우회할 수 있습니다.dirs
cd
쉘 내장 명령입니다. macOS 컴퓨터에서 외부 명령으로도 사용할 수 있으므로/usr/bin/cd
다른 많은 Unix 사용자처럼cd
사용 하지 않습니다xargs
. 그러나 외부cd
명령은 현재 셸의 디렉터리를 변경할 수 없습니다. 이것은 "CD는 왜 프로그램이 아닌가?" 그리고"'cd'는 어디에 있나요?” 및 유사한 문제. 쉘 함수의 변형은 쉘의 내장cd
명령을 사용하기 때문에 이 문제를 회피합니다.마지막 문제는 두 번째 문제의 변형이며 다른 문제로 인해 실제로 작동하지 않습니다. 즉, 명령이 호출 셸에 대한 외부 명령에 의해
cd
실행될 때 작업 디렉터리를 변경할 수 없을 뿐만 아니라xargs
라고 합니다xargs
. 이 명령은 파이프라인의 단계로 서브셸에서 실행됩니다. 하위 쉘에서 쉘을 변경해도 상위 쉘에서는 변경되지 않습니다.
당신은 사용할 수 있어야합니다
fdr () {
cd "$( dirs -l -p | fzf )"
}
이 줄의 각 줄은 dirs -l -p
물결표가 확장된 디렉터리 스택의 디렉터리를 출력합니다. bash
이는 이름에 개행 문자가 포함된 디렉터리가 스택에 없다고 가정하지만,~ 할 것이다공백이 있는 디렉토리가 지원됩니다(부분적으로는 변환으로 인해 sed
부분적으로는 인용되지 않은 확장으로 인해 사용자 자신의 함수에서는 이를 수행하지 않습니다 $dir
).