이것은 의 스크립트입니다.머큐리얼 이슈 2743. 불러라 mq.sh
. 나는 데비안 스퀴즈에서 다음을 수행하도록 노력하고 있습니다.
Echo 명령 + stdout + stderr을 파일에 추가합니다.
작업 디렉토리가 접두어로 붙습니다. $PWD를 고수하는 것은 처음 가져올 때의 값을 계속 사용할 수 있기 때문에 작동하지 않습니다
.마지막으로 리디렉션을 다시 일반 stdout/error로 재설정합니다. 어떻게 해야할지 모르겠지만
exec
다시 사용해야 할 것 같습니다.나는 이것을 이라고 부르곤 했다
sh mq.sh
. 나는 가능한 한 모든 것을 이식 가능하게 하고 싶고 exec는 bash에만 국한된 것 같아서 왜 작동하는지 혼란스럽습니다.set -x xtrace
bash 에만 해당될 수도 있습니다. 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
지원됩니다. 이것대시 맨 페이지그렇게 말해도 괜찮습니다.