답변:
이 사람을보십시오 =) :
sed -n 'line_num p' | bash
또는
"$(sed -n 'line_num p')"
line_num와 사이에 공백을 넣을 필요가 없습니다. p예를 들어 line_num123이면 sed -n 123p | bash. 그리고 sh충분 하다면 sh대신을 사용하십시오 bash.
sed -n 'line_num p' | sh또 다른 해결책이 될 수 있을까? 이것은 더 호환성이 있습니까?
sh실제로 쉘 이 무엇인지에 달려 있습니다. 데비안 (및 파생 된) 시스템 sh은 일반적으로 dash입니다. 스크립트가 작성 dash 되었거나 이식 가능한 구문에 의존 한다면 아마도 bash그렇습니다. 그러나 스크립트가 작성 된다면 거의 확실하지 않습니다.
history900 행을 실행하려는 경우 900 행을 실행할 수 있습니까?
이것을 대화식으로하는 경우 bash 기록에 줄을 쓸 수 있습니다.
history -s "$(sed -n 'line_num p')"
그런 다음을 눌러 ↑Enter행을 판독 선 버퍼에 삽입하고 실행하십시오. 너무 늦기 전에 줄을 볼 수있는 기회를 제공합니다.
man history
history은 빌트인이므로 문서화되어 있습니다 help history(또는 man bash이지만 많은 것을 읽습니다). 위의 내용을 인용하면 history -s"ARG를 내역 목록에 단일 항목으로 추가"
넌 할 수있어...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
그것은 $NUM쉘 변수의 스크립트에서 줄을 가져온 $line다음 현재 쉘의 명령으로 평가합니다.
이를 수행하는 다른 방법은 다음과 같습니다.
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval합니다.
gnu sed가 e뭔가 같은 플래그를 sed "${NUM}"'!d;s/^//e;q'또한 일 것이다