나는 많은 디렉토리를 만들고 내 삶을 게으르게 만들고 cd
내가 만든 디렉토리로 자동으로 들어가고 싶습니다. 결과 -g
는 다음과 같습니다.mkdir -g foo
터미널은 다음과 같습니다:
User:/$ mkdir -g foo
User:/foo/$
이 페이지를 보았지만 성공하지 못했습니다.
디렉토리를 생성하고 동시에 디렉토리로 이동할 수 있는 한 줄의 코드가 있습니까?
이 명령을 사용해 보았 .bash_profile
으나 명령이 완전히 덮어쓰여졌습니다. (나중에 이것이 무한루프라는 것을 깨달았습니다)
mkdir() {
if "$1" -eq "-g"
mkdir "$2"
cd "$2"
else
## do the regular code
fi
}
또 다른 점은 내가 가진 모든 별칭을 잊어버리게 되므로 더 많은 별칭을 만들고 싶지 않다는 것입니다.
그래서 내가 이것을 원하지 않는다는 것이 아닙니다.
총 명령. (나중에 이것이 무한루프라는 것을 깨달았습니다)
mkcd() {
if "$1" -eq "-g"
mkdir "$2"
cd "$2"
else
## do the regular code
fi
}
나는 올바른 선택이 없을 가능성이 높다는 것을 알고 있습니다. 수정해 주세요. 하지만 어떤 도움이라도 큰 도움이 될 것입니다!
답변1
command
동일한 이름의 기능을 우회하여 외부 명령을 호출하려면 내장 명령을 사용하십시오 . 반품:
- 다음은
if
일반 명령입니다. 문자열 비교를 수행하려면test
내장 함수를 호출하거나[
동일한 구문과 Final 을 사용하는 내장 함수]
또는[[ … ]]
보다 완화된 구문을 사용하는 구문을 호출하십시오. 바라보다단일 또는 이중 괄호 사용 - bash더 많은 정보를 알고 싶습니다. - 이
-eq
연산자는 정수를 비교하는 데 사용됩니다. 문자열을 비교하는 데 사용됩니다=
. - 여러 인수(와 같은 옵션 포함) 전달에 대한 일부 제한된 지원을 추가했습니다
-p
. 아래에서는 성공할cd
때만mkdir
호출하고 함수에 전달된 마지막 인수에 대해 호출합니다. -g
첫 번째 매개변수로만 간주됩니다. 가능한 모든 곳에서 찾아 제거하는 옵션을 구문 분석하는 것이 가능하지만 더 어렵습니다.
mkdir () {
local do_cd=
if [ "$1" = "-g"]; then
do_cd=1
shift
fi
command mkdir "$@" &&
if [ -n "$do_cd" ]; then
eval "cd \"\${$#}\""
fi
}
사용자 정의 옵션을 정의하지 않는 것이 좋습니다. --help
매뉴얼 페이지 에는 표시되지 않습니다 . 다른 이름으로 명령을 정의하는 것보다 기억하기가 더 쉽지 않습니다. 해당 명령이 있다는 사실을 기억하지 못하고 다른 이름으로 갖는 것보다 이점이 없거나 해당 명령이 사용자 정의라는 사실을 기억하지 못하고 사용자가 그런 다음 쉘이 내장 명령인지 함수( type mkcd
)인지 물어보면 사용자 정의 이름으로 즉시 찾을 수 있지만 사용자 정의 옵션은 그렇지 않습니다. 표준 명령을 재정의하는 사용 사례가 있지만 이는 하나가 아닙니다.