which
명령 의 결과를 어떻게 파이프 할 수 cd
있습니까?
이것이 내가하려는 것입니다.
which oracle | cd
cd < which oracle
그러나 그들 중 어느 것도 작동하지 않습니다.
이를 달성하는 방법이 있습니까 (물론 복사 / 붙여 넣기 대신)?
편집 : 다시 생각하면 대상 파일이 폴더 / 디렉토리가 아니기 때문에이 명령이 실패합니다 .
그래서 나는 지금 후행 “/ oracle”부분 (sed 또는 awk, 심지어 Perl)을 제거하는 더 나은 방법을 생각하고 있습니다. 🙂
편집 : 좋아 그게 결국 내가 가진 것입니다.
cd `which oracle | sed 's/\/oracle//g'`
답변
명령이 표준 입력에서 매개 변수를 예상하는 경우 파이프를 사용합니다. (이에 대해 더 알아보기 ).
함께 cd
명령 있다는 사실이 아니다. 디렉토리는 명령 인수입니다. 이 경우 명령 대체를 사용할 수 있습니다. 백틱을 사용하거나 $(...)
명령을 평가하려면 변수에 저장합니다.
path=`which oracle`
echo $path # just for debug
cd $path
훨씬 더 간단한 방법으로 수행 할 수 있습니다.
cd `which oracle`
또는 경로에 특수 문자가있는 경우
cd "`which oracle`"
또는
cd $(which oracle)
이는 백틱 표기법과 동일하지만 권장됩니다 (백틱은 아포스트로피와 혼동 될 수 있음).
..하지만 원하는 것 같습니다.
cd $(dirname $(which oracle))
(네 스팅을 쉽게 사용할 수 있음을 보여줍니다)
$(...)
(백틱도 포함) 큰 따옴표로 묶인 문자열에서도 작동하므로 결과에 공백이 포함될 수 있습니다.
cd "$(dirname "$(which oracle)")"
(두 출력 모두 큰 따옴표 세트가 필요합니다.)
답변
디렉토리를 얻으려면 dirname을 사용하십시오.
cd $(which oracle | xargs dirname)
편집 : 공백이 포함 된 경로에주의하십시오. 아래 @anishpatel 주석을 참조하십시오.
답변
cd `which oracle`
백틱 (일반적으로 미국 키보드에서 1의 왼쪽에있는 키)입니다.
답변
좋아, 여기에 올바른 인용을 사용하는 솔루션이 있습니다.
cd "$(dirname "$(which oracle)")"
백틱을 피하고 가독성이 떨어지며 항상 프로세스 대체를 인용하십시오.
답변
파이프가 필요하지 않습니다. Bash 매개 변수 확장을 사용하여 원하는 것을 할 수 있습니다!
추가 팁 : Bash를 사용하는 경우 외부 “which”명령 대신 “type -P”를 사용합니다.
# test
touch /ls
chmod +x /ls
cmd='ls'
PATH=/:$PATH
if cmdpath="$(type -P "$cmd")" && cmdpath="${cmdpath%/*}" ; then
cd "${cmdpath:-/}" || { echo "Could not cd to: ${cmdpath:-/}"; exit 1; }
else
echo "No such program in PATH search directories: ${cmd}"
exit 1
fi
답변
편집 한 질문에 대한 응답으로 다음을 사용하여 명령 이름을 제거 할 수 있습니다 dirname
.
cd $(dirname `which oracle`)
답변
위의 좋은 대답 외에도 cd 는 명령 인 ls 와 같은 새 프로세스 이외의 동일한 프로세스에서 실행되는 쉘 내장형이라는 것 입니다.