저는 IDE가 미래의 물결이라는 것을 알고 있지만 항상 vim
Linux 터미널에서 코딩하고 있습니다. 늙은 개에게는 새로운 재주가 있습니다.
어쨌든 긴 패키지 이름을 처리할 때는 탐색이 어려워집니다. 예를 들어 터미널에서 프롬프트의 일부로 현재 경로를 볼 수 있습니다. 가끔 나는 여기에 있다:
/foo/bar/src/com/example/yomama/
내가 도달하고 싶은 곳:
/foo/bar
나는 몇 가지 멋진 별칭을 가지고 있습니다:
alias 1down="cd .."
alias 2down="cd ..;cd .."
alias 3down="cd ..;cd ..;cd .."
alias 4down="cd ..;cd ..;cd ..;cd .."
alias 5down="cd ..;cd ..;cd ..;cd ..;cd .."
그래서 내가 그것을 입력하면 4down
, 펑! 나는 여기 있다 /foo/bar
.
내 현재 작업 디렉토리는 다음과 같습니다.
/foo/bar/src/com/example/yomama/
/up 2에서 /foo/bar에 접근할 수도 있습니다.
그래서 올라갈 금액을 계산하는 것이 더 쉽기 때문에 2up 기능을 구현하는 것이 좋을 것입니다. 이에 대한 쉘 스크립트 작성을 시작하기 전에 보다 우아한 솔루션을 제공할 수 있는 쉘 도구가 있는지 알고 싶습니다. 구현할 수 있는 문장을 아는 사람이 있으면 보너스 포인트입니다 Nup
.
PS: 이미 갖고 있어요
alias bar = "cd /foo/bar"
여기서는 좀 더 일반적인 해결책을 찾고 있습니다.
$PWD
PPS: 나는 항상 클릭할 수 있는 콘텐츠를 프롬프트에 추가하는 것이 정말 멋지다고 생각했습니다. 그래서 bar
, cd
및 을 클릭합니다 /foo/bar
. 하지만 아마도 그래픽 IDE로 이동하고 종료해야 할 것 같습니다 ;-)
편집하다:
Nup에 대한 나의 정의는 약간 혼란스럽습니다.
Nup은 PWD의 루트에서 시작하는 N번째 경로 위치로 이동합니다. 따라서 현재 /a/b/c/d/e/f/g/h/i에 있다면 4up은 /a/b/c/d로 이동합니다. 마찬가지로 5down은 /a/b/c/d를 얻습니다.
기본적으로 "cd .."를 여러 번 힘들게 입력하거나 "cd /a/b/c/d"를 지정하지 않고도 경로를 탐색할 수 있습니다.
답변1
파일의 두 가지 기능을 .bashrc
사용하면 디렉터리 스택을 사용하여 일부 탐색을 수행할 수 있습니다.
function down ()
{
if [[ -z "$1" ]]
then
n=1
else
n=$1
fi
for ((i=0; i<$n; i++ ));
do
pushd .. > /dev/null
done;
}
function up ()
{
if [[ -z "$1" ]]
then
n=1
else
n=$1
fi
for ((i=0; i<$n; i++ ));
do
popd > /dev/null
done;
# dirs -c # To clear directory on up motion
}
down N
및 를 각각 사용할 수 있는 위치입니다 up N
.
사용 예:
~/tmp/bash/dir1/dir2/dir3$ down 4
~/tmp$ up 2
~/tmp/bash/dir1$ up 2
~/tmp/bash/dir1/dir2/dir3$ down 2
~/tmp/bash/dir1$ down 1
~/tmp/bash$ up 3
~/tmp/bash/dir1/dir2/dir3$
물론 up N
사용하기 전에는 사용할 수 없습니다 down N
. 예상치 못한 일이 발생하거나 오류 메시지가 나타날 수 있습니다.
답변2
앞뒤로 이동하고 이전에 있던 디렉토리로 돌아갈 수 있는 방법은 다음과 같습니다. 이는 파일 시스템의 다른 부분을 앞뒤로 탐색할 때 특히 유용합니다(개발 중에 매우 일반적임).
지원하다:
up # (go up any # of directories)
goback
goback # (the # is optional to go back any #)
prev (go to the last dir you were in)
또한 이를 통해 시스템의 어느 디렉터리에나 CD를 넣은 다음 이전 디렉터리로 돌아갈 수 있습니다. 이는 마지막 디렉터리의 위치를 저장하기 때문입니다.
노트:이 콘텐츠의 초축약 버전을 보려면 맨 아래로 스크롤하세요.
1 단계:(nano/vim) ~/.bashrc를 편집하고 맨 아래에 다음을 추가합니다.
declare -a DIR_STACK
cd() {
DIR_STACK+=("$PWD")
builtin cd "$@" && pwd || { unset 'DIR_STACK[-1]'; return 1; }
}
up() {
local count=${1:-1}
for _ in $(seq 1 $count); do
[[ $PWD != / ]] && DIR_STACK+=("$PWD") && builtin cd .. || { echo "Error: Reached root directory."; return 1; }
done
pwd
}
goback() {
local count=${1:-1}
while [[ ${#DIR_STACK[@]} -gt 1 && count -gt 0 ]]; do
builtin cd "${DIR_STACK[-2]}"
unset 'DIR_STACK[-1]' && ((count--))
done
[[ $count -eq 0 ]] && pwd || echo "Error: Cannot go back any further."
}
prev() {
[[ -n $OLDPWD ]] && builtin cd - > /dev/null && pwd || echo "Error: No previous directory stored."
}
2 단계.소스 ~/.bashrc
3단계.작동 방식은 다음과 같습니다.
[root@agent colors]# pwd
/etc/xdg/colors
[root@agent colors]# cd /
/
[root@agent /]# goback
/etc/xdg/colors
[root@agent colors]# cd ..
/etc/xdg
[root@agent xdg]# goback
/etc/xdg/colors
[root@agent colors]# cd ../../
/etc
[root@agent etc]# goback
/etc/xdg/colors
[root@agent colors]# up 2
/etc
[root@agent etc]# goback
/etc/xdg/colors
[root@agent colors]# cd ..
/etc/xdg
[root@agent xdg]# prev
/etc/xdg/colors
[root@agent colors]# cd /
/
[root@agent /]# goback 3
/etc/xdg/colors
[root@agent colors]# up 3
/
[root@agent /]# goback 3
/etc/xdg/colors
.bashrc의 간단한 버전(가독성이 낮음):
declare -a DIR_STACK
cd() { DIR_STACK+=("$PWD"); builtin cd "$@" && pwd || { unset 'DIR_STACK[-1]'; return 1; }; }
up() { local count=${1:-1}; for _ in $(seq 1 $count); do [[ $PWD != / ]] && DIR_STACK+=("$PWD") && builtin cd .. || { echo "Error: Reached root directory."; return 1; }; done; pwd; }
goback() { local count=${1:-1}; while [[ ${#DIR_STACK[@]} -gt 1 && count -gt 0 ]]; do builtin cd "${DIR_STACK[-2]}"; unset 'DIR_STACK[-1]' && ((count--)); done; [[ $count -eq 0 ]] && pwd || echo "Error: Cannot go back any further."; }
prev() { [[ -n $OLDPWD ]] && builtin cd - > /dev/null && pwd || echo "Error: No previous directory stored."; }
답변3
이것은 정확히 귀하가 요청한 답변은 아니지만 다음 사항에 관심이 있을 수 있습니다.미드나잇 커맨더 파일 브라우저, 모든 Linux 배포 저장소에서 사용할 수 있어야 합니다. mc
콘솔 vim과 유사한 저주를 사용하십시오. 이는 두 개의 패널로 구성된 파일 탐색 인터페이스를 제공합니다.하단에 명령 프롬프트가 있습니다;화살표 키를 사용하여 디렉토리를 탐색하고 명령을 입력할 수 있습니다(명령 기록을 탐색하려면 ctrl-n 및 ctrl-p를 사용하십시오). Ctrl-o는 인터페이스를 위아래로 전환합니다. 인터페이스가 열리면 동일한 디렉토리의 일반 하위 쉘에 있게 됩니다. 여기에서 vim을 시작할 수 있으며, EDITOR=vim
환경의 옵션->구성에서 "내부 편집 사용"을 설정하고 선택을 취소하면 파일이 강조 표시된 상태에서 F4를 누르면 vim이 실행됩니다. 제가 가장 좋아하는 소프트웨어 중 하나이며 사용법을 배울 가치가 있습니다.
X 터미널에서는 인터페이스를 마우스와 함께 사용할 수 있습니다. 이를 설치한 경우 VT와 함께 마우스를 사용할 수도 있습니다 gpm
.
답변4
모든 의견과 답변에 감사드립니다. 오늘 아침 국수와 함께 이런 생각이 들었습니다.
alias 1up='cd /$(echo $PWD | cut -f 2 -d /)'
alias 2up='cd /$(echo $PWD | cut -f 2,3 -d /)'
alias 3up='cd /$(echo $PWD | cut -f 2,3,4 -d /)'
alias 4up='cd /$(echo $PWD | cut -f 2,3,4,5 -d /)'
alias 5up='cd /$(echo $PWD | cut -f 2,3,4,5,6 -d /)'
bash가 별칭의 비밀번호를 확장하지 않도록 작은따옴표가 필요합니다. 이에 대한 함수를 작성할 수 있지만 5up과 5down만 필요합니다.
의견을 보내주셔서 감사합니다. 나는 cut을 사용하는 대신 순수 bash를 사용하여 경로 변수를 구문 분석하고 싶지만 실제로 해야 할 작업이 있습니다 ;-)