우리는 최근에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 cd
cd
-L
-P
cd -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 명령과 동일한 반환 값이 발생합니다.