명령 레코드를 파일에 쓰기

명령 레코드를 파일에 쓰기

이것은 의 스크립트입니다.머큐리얼 이슈 2743. 불러라 mq.sh. 나는 데비안 스퀴즈에서 다음을 수행하도록 노력하고 있습니다.

  1. Echo 명령 + stdout + stderr을 파일에 추가합니다.

  2. 작업 디렉토리가 접두어로 붙습니다. $PWD를 고수하는 것은 처음 가져올 때의 값을 계속 사용할 수 있기 때문에 작동하지 않습니다
    .

  3. 마지막으로 리디렉션을 다시 일반 stdout/error로 재설정합니다. 어떻게 해야할지 모르겠지만 exec 다시 사용해야 할 것 같습니다.

  4. 나는 이것을 이라고 부르곤 했다 sh mq.sh. 나는 가능한 한 모든 것을 이식 가능하게 하고 싶고 exec는 bash에만 국한된 것 같아서 왜 작동하는지 혼란스럽습니다. set -x xtracebash 에만 해당될 수도 있습니다. Bash 참조 매뉴얼에서 얻었습니다. 데비안에서 전화하면 모든 것이 실행되지 않나요 sh?dash

나는 현재 1이 작동한다고 생각합니다. 2와 3은 어떻게 할까요? 4를 명확히 할 수 있습니까?

export PS4="$PWD$ "
exec > mq.log 2>&1
export HG="hg-crew"
rm -r main clone

set -o xtrace
$HG init main
cd main
$HG init --mq
$HG qnew foo
echo a > a
$HG add
$HG qref
$HG ci --mq -Am.
cd ..
$HG qclone main clone
cd clone
$HG paths --mq
mv .hg/patches/.hg/hgrc{,.foo}
$HG paths --mq
$HG push --mq
echo b >> a
$HG qref
$HG ci --mq -m.
mv .hg/patches/.hg/hgrc.foo .hg/patches/.hg/hgrc
$HG push --mq

답변1

exec파일 설명자의 경우 set -x이식 가능 xtrace하지만 실제로는 와 동일해야 합니다 -x.

파일 설명자를 저장하고 복원하려면 실제로 exec다시 사용해야 합니다. 사용되지 않은 설명자를 일부 선택하고(일반적으로 설명자가 2개 이상임을 의미함) 원래 설명자를 이들 설명자로 리디렉션한 다음 마지막에 다시 리디렉션해야 합니다.

exec 20<&0 21>&1 22>&2
# do your redirections
# do whatever you wanted to have redirected
exec <&20 >&21 2>&22 20<&- 21>&- 22>&-

마지막 줄은 먼저 dup()저장된 파일 설명자를 소스 위치로 반환한 다음 &-복사본을 닫습니다( ). 닫는 것은 불필요할 수도 있지만 좋은 생각입니다.

또한 이것이 자체 쉘에서 실행되는 경우 쉘이 실행되는 동안 리디렉션이 사라집니다. .(휴대용) 또는 source( )를 사용하는 경우 bash리디렉션을 취소하기만 하면 됩니다.

답변2

작업 디렉토리의 경우 PS4='+$PWD '작은따옴표를 사용하면 인쇄하려고 할 때만 확장된다는 의미입니다. 의 첫 번째 문자는 PS4여러 번 인쇄될 수 있으므로 +시작 부분에 여전히 공백이 필요하거나 적어도 공백이 있을 수 있습니다.

~에 따르면컬렉션의 POSIX 정의, set -x모두 set -o xtrace지원됩니다. 이것대시 맨 페이지그렇게 말해도 괜찮습니다.

관련 정보