Unix 쉘(특히 Ubuntu)에서 ls 명령으로 인쇄된 x번째 디렉토리로 디렉토리를 변경하는 방법이 있습니까? 여러 가지 방법으로 디렉토리를 정렬할 수 있다는 것을 알고 있지만 ls의 출력을 사용하여 x번째 디렉토리를 얻으시겠습니까?
예제 셸:
$ ls
$ first_dir second_dir third_really_long_and_complex_dir
여기서 3(또는 적절한 배열 형식의 경우 2)을 전달하여 third_really_long_and_complex_dir로 이동하고 싶습니다. 간단히 복사하여 붙여넣기만 하면 되지만 이미 키보드를 사용하고 있다면 "cdls 2" 같은 것을 입력하거나 색인을 알고 있으면 그와 유사한 것을 입력하는 것이 더 쉬울 것입니다.
업데이트
아직도 이 내용을 보고 계신 분들을 위해 말씀드리자면, 제가 Linux/Bash를 처음 접했을 때 탭 완성과 같은 것이 있다는 것을 깨닫지 못했을 때 이 질문을 만들었습니다.
답변1
대화형 세션의 주요 문제점 cd
은 일반적으로 명령 프롬프트를 처리하는 셸의 현재 디렉터리를 변경하려고 한다는 것입니다. 즉, 하위 셸(예: 스크립트)을 시작하면 cd
호출이 상위 셸에 영향을 주지 않으므로 도움이 되지 않습니다.
그러나 사용하는 쉘에 따라 다음을 정의할 수 있습니다.기능이것을하기 위해. 예를 들어 Bash에서는 다음과 같습니다.
function cdls() {
# Save the current state of the nullglob option
SHOPT=`shopt -p nullglob`
# Make sure that */ expands to nothing when no directories are present
shopt -s nullglob
# Get a list of directories
DIRS=(*/)
# Restore the nullblob option state
$SHOPT
# cd using a zero-based index
cd "${DIRS[$1]}"
}
이 예에서는 의 출력 구문 분석을 절대 거부합니다 ls
.여러 가지 이유로. 대신 쉘 자체가 디렉토리 목록(또는 디렉토리에 대한 링크)을 검색하도록 했습니다...
즉, 나는 이 기능(또는 이 효과에 대한 다른 것)을 사용하는 것이 rm
잘못된 디렉토리로 변경한 후 사용하는 것과 같은 엄청난 혼란에 대비하는 아주 좋은 방법이라고 생각합니다. 파일 이름 자동 완성은 강요하지 않고도 이미 충분히 위험합니다.세다...
답변2
나는 이것에 대한 기능을 가지고 있습니다 :
기능 CDI. { IFS=$'\n' 페이지=${1:-1} LPP=${2:-11} 첫 번째=$(( 1 + LPP * 페이지 - LPP )) 마지막=$(( LPP * 페이지 )) $(find . -maxlength 1 -type d -printf "%P\n" |\에서 cd_into를 선택하세요. sed -n $first,${last}p); 하다 종료=-1; if [[ $REPLY == n ]]; 그런 다음 PAGE=PAGE+1을 설정합니다. cdi. $페이지 $LPP ; 종료=$? elif [[ $REPLY == p ]]; 그런 다음 PAGE=PAGE-1로 설정합니다. cdi. $페이지 $LPP ; 종료=$? elif [[ $REPLY == m ]]; 그런 다음 LPP=LPP*2로 설정합니다. cdi. $페이지 $LPP ; 종료=$? elif [[ $REPLY == l ]]; 그런 다음 LPP=LPP/2로 설정합니다. cdi. $페이지 $LPP ; 종료=$? elif [[ $REPLY == q || $REPLY == 0 ]]; 그런 다음 0을 반환합니다. fi if [ $EXIT -eq 0 ]; 그런 다음 0을 반환합니다. fi cd_into=${cd_into//\~/$HOME} if [ -d "$cd_into" ];then cd "$cd_into"; 0을 반환합니다. 또 다른 echo "앗! \`$cd_into'는 폴더(?)가 아닙니다." fi 완료 IFS 설정 해제 }
사용:
$cdi. 1) .mozilla.new 3) .swt 5) tmp 7) .vim 9) .ssh 2) .crack-attack 4) 다운로드 6) .Eterm 8) .frozen-bubble 10) .irssi 어느 #?: