Linux에서 CD 명령 대체를 사용하는 방법

Linux에서 CD 명령 대체를 사용하는 방법

우리는 최근에HP-UX B.11.31도착하다리눅스 3.10.0-1160.15.2.el7.x86_64.

저는 다음을 달성하려고 합니다(이전 HP-UX 시스템에서 작동함).

$ pwd
/global/app/opt/prod/ee/01/custo/src/
$ cd prod qa
/global/app/opt/qa/ee/01/custo/src/
$ pwd
/global/app/opt/qa/ee/01/custo/src/

기본적으로는 다음과 같이 시작됩니다.제품도착하다품질 보증, 상대 디렉터리 구조를 유지합니다.

Linux에서 동일한 아이디어를 시도하면 다음과 같습니다.

$ pwd
/global/app/opt/prod/ee/01/custo/src/
$ cd prod qa
-bash: cd: prod: No such file or directory
$ pwd
/global/app/opt/prod/ee/01/custo/src/

여기서 디렉토리는 변경되지 않았습니다.

도와주세요.

답변1

이 대체 기능은 쉘에서 제공하는 기능입니다 ksh.

쉘은 bash그것을 제공하지 않습니다.

ksh이 문제를 해결하려면 로 전환해 보세요 .

$ pwd
/tmp/steve
$ cd ve phen
bash: cd: ve: No such file or directory
$ ksh
$ pwd
/tmp/steve
$ cd ve phen
/tmp/stephen
$

답변2

이 두 매개변수의 의미에 대해 잘 모르겠지만 cd간단한 경우에는 비슷한 것이 작동할 수 있습니다. 이는 첫 번째 인수의 문자열을 현재 디렉터리에 처음 나타날 때 두 번째 인수의 문자열로 변경하고 새 디렉터리 이름을 인쇄합니다.

#!/bin/bash
cdsub() {
    if [ "$#" = 2 ]; then
        local dir="${PWD/"$1"/"$2"}"
        printf "%s\n" "$dir"
        cd -- "$dir"
    else
        printf "usage: cdsub <string> <replacement>" >&2
    fi
}

그래서,

$ cd /tmp/foo/foo
$ pwd
/tmp/foo/foo
$ cdsub foo bar
/tmp/bar/foo
$ pwd
/tmp/bar/foo

끝없는 재귀를 피하기 위해 함수 이름을 지정한 cd다음 내부에서 사용할 수 있지만 Bash 도 옵션을 사용하므로 이에 대한 적절한 인수 처리도 구현해야 합니다. 인수 수를 확인하고 대체를 시도하는 것과 같은 작업을 수행하십시오.command cdcd-L-Pcd -P directory

또한 위 함수는 오류를 잘 처리하지 못합니다. 예를 들어 경로에 발생하지 않으면 Ksh처럼 오류가 발생하는 대신 현재 디렉터리에 그대로 남게 cd xyz something됩니다 .xyz

답변3

.bashrc의 bash 구현:

# ksh-like change directory
# if two args, do substitution in PWD
cd_ksh () {
  if [ "$#" -ne 2 ]; then builtin cd $1; return; fi
  echo "   cd_ksh: substituting $1 with $2 in PWD"
  newdir=${PWD//$1/$2}
  builtin cd $newdir
}
export -f cd_ksh
alias cd=cd_ksh

모든 경우에 내장된 cd 명령과 동일한 반환 값이 발생합니다.

관련 정보