2012-10-15 2 views
1

를 통해 다른 스크립트의 입력에 파이프 출력은 일반적으로 나는 별도의 행동에 일을 중단하고 다른 입력으로 출력을 복사하여 붙여 넣을 것 :쉘/배쉬 - 변수

$ which git 
/usr/local/bin/git 
$ sudo mv git-credential-osxkeychain /usr/local/bin/git 

입력에 출력을 얻을 수있는 모든 빠른 해킹? 같은 뭔가 : $(command)

sudo mv git-credential-osxkeychain $(which git) 

$echo which wget | sudo mv git-credential-osxkeychain

+1

'which git'의 예제 출력은 다음 명령에 나타나지 않습니다. 명령 대체를 원하지만 명령의 예가 불분명 한 것처럼 들립니다. – cmbuckley

+0

죄송합니다. typo, fixed. –

+0

그래도 한 바이너리를 다른 바이너리로 덮어 쓰는 것처럼 보입니다. – cmbuckley

답변

1
set -vx 
myGit=$(which git) 
gitDir=${myGit#/git} ; gitDir=${gitDir#/bin}/git 
echo sudo mv git-credential-osxkeychain ${gitDir} 

에 대한 모든 것을 찾을 수 있습니다.

필요한 키 입력 횟수를 줄이는 것이 가능할 수도 있지만,이 버전은 사용중인 기술과 사용 방법을 더 쉽게 이해할 수 있다고 생각합니다.

IHTH

+0

@ Mr.DemetriusMichael : 메모 편집 , 당신에게 gitDir =/usr/local/git을 줄 것이다. – shellter

+0

정확함, 오타였다. 죄송합니다. 정말 고마워요. –

0

사용 명령 대체 이것은 출력에 대한 명령을 대체합니다. 당신은 당신이 당신이 필요로하는 작업을 수행 확실 할 때 마지막 줄에 set -vxecho를 제거 http://tldp.org/LDP/abs/html/commandsub.html

+0

나는 이것이'git' 바이너리를'git-credential-osxkeychain'으로 덮어 쓰고 싶기 때문에 이것이 원하지 않았 으면 좋겠다. 나는 그것들을 동일한 디렉토리 (예 : [GitHub guide] (https://help.github.com/articles/setup-git#platform-mac))에 넣으려고한다고 생각합니다. 비록 OP로부터의 약간의 설명과 함께 할 수 있었다! – cmbuckley

+1

글쎄, 그는 두 번 명령 치환으로 할 수있다.'sudo mv git-credential-osxkeychain $ (dirname $ (which git))'. 그러나 어쨌든 그 사람이 원한다면 :) – Chirlo

0

는 대답은 Chirloshellter 말한 것입니다.

$echo which wget | sudo mv git-credential-osxkeychain이 작동하지 않는 이유는 파이핑이 이전 명령의 stdout을 다음 명령의 stdin으로 리디렉션하기 때문입니다. 이 경우 move은 stdin에서 입력을받지 않습니다.

호기심 것은 which git 반환

/usr/local/bin/git 

하지만

/usr/local/git/bin/ 

그 두에 git-credential-osxkeychain를 이동이 일치하지 않는다는 것입니다. 오타가 있습니까?

0

파이프 구문을 사용하려면 xargs을 확인해야합니다.