나는 파일에서 내용을 가져와 현재 셸 내에서 실행 하는 source
(일명 .
) 유틸리티에 대해 잘 알고 있습니다.
이제 일부 텍스트를 셸 명령으로 변환 한 다음 다음과 같이 실행합니다.
$ ls | sed ... | sh
ls
임의의 예일 뿐이며 원본 텍스트는 무엇이든 될 수 있습니다. sed
또한 텍스트 변형의 예일뿐입니다. 흥미로운 부분은 sh
입니다. 나는 내가 가진 것을 파이프 sh
하고 그것을 실행합니다.
내 문제는 새 하위 셸을 시작하는 것을 의미합니다. 차라리 현재 셸 내에서 명령을 실행하고 싶습니다. source some-file
텍스트 파일에 명령이 있으면 으로 할 수있는 것처럼.
더러워지기 때문에 임시 파일을 만들고 싶지 않습니다.
또는 현재 셸과 똑같은 특성으로 하위 셸을 시작하고 싶습니다.
최신 정보
좋아, 백틱을 사용하는 솔루션은 확실히 작동하지만 출력을 확인하고 변경하는 동안 종종이 작업을 수행해야하므로 결과를 최종적으로 파이프하는 방법이 있다면 훨씬 선호합니다.
슬픈 업데이트
아, /dev/stdin
그게 너무 예뻐 보였지만 더 복잡한 경우에는 작동하지 않았습니다.
그래서 나는 이것을 가지고 있습니다.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
모든 .doc
파일의 확장자가 소문자인지 확인합니다.
그리고 우연히으로 처리 할 수 xargs
있지만 그것은 요점을 벗어납니다.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
그래서 내가 전자를 실행하면 즉시 종료되고 아무 일도 일어나지 않습니다.