Diff of the two buildlogs:

--
--- b1/build.log	2024-12-30 01:41:08.526699335 +0000
+++ b2/build.log	2024-12-30 01:44:51.824488777 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Sun Dec 29 13:29:52 -12 2024
-I: pbuilder-time-stamp: 1735522192
+I: Current time: Mon Dec 30 15:41:23 +14 2024
+I: pbuilder-time-stamp: 1735522883
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -24,52 +24,84 @@
 dpkg-source: info: applying 246.patch
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/5921/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/D01_modify_environment starting
+debug: Running on virt64b.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+'/bin/sh' -> '/bin/bash'
+lrwxrwxrwx 1 root root 9 Dec 30 01:41 /bin/sh -> /bin/bash
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build/reproducible-path'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='armhf'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=3 '
-  DISTRIBUTION='unstable'
-  HOME='/root'
-  HOST_ARCH='armhf'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:.
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="arm-unknown-linux-gnueabihf")
+  BASH_VERSION='5.2.37(1)-release'
+  BUILDDIR=/build/reproducible-path
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=armhf
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=4 '
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=arm
+  HOST_ARCH=armhf
   IFS=' 	
   '
-  INVOCATION_ID='00fe147017ea4a34962dc73cf2e85210'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='5921'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=b5a75897ef36424f807284bc7f6a5851
+  LANG=C
+  LANGUAGE=it_CH:it
+  LC_ALL=C
+  MACHTYPE=arm-unknown-linux-gnueabihf
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnueabihf
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=18358
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.YnJLnCxx/pbuilderrc_pM5n --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.YnJLnCxx/b1 --logfile b1/build.log golang-github-rogpeppe-go-internal_1.12.0-3.dsc'
-  SUDO_GID='113'
-  SUDO_UID='107'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://10.0.0.15:3142/'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.YnJLnCxx/pbuilderrc_zEY2 --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.YnJLnCxx/b2 --logfile b2/build.log golang-github-rogpeppe-go-internal_1.12.0-3.dsc'
+  SUDO_GID=113
+  SUDO_UID=107
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://10.0.0.15:3142/
 I: uname -a
-  Linux ff4a 6.1.0-28-armmp-lpae #1 SMP Debian 6.1.119-1 (2024-11-22) armv7l GNU/Linux
+  Linux i-capture-the-hostname 6.1.0-28-arm64 #1 SMP Debian 6.1.119-1 (2024-11-22) aarch64 GNU/Linux
 I: ls -l /bin
   lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/5921/tmp/hooks/D02_print_environment finished
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -164,7 +196,7 @@
 Get: 45 http://deb.debian.org/debian unstable/main armhf golang-golang-x-net-dev all 1:0.27.0-1 [898 kB]
 Get: 46 http://deb.debian.org/debian unstable/main armhf golang-golang-x-sync-dev all 0.7.0-1 [19.0 kB]
 Get: 47 http://deb.debian.org/debian unstable/main armhf golang-golang-x-tools-dev all 1:0.23.0+ds-1 [1593 kB]
-Fetched 72.8 MB in 4s (18.7 MB/s)
+Fetched 72.8 MB in 1s (63.1 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package sensible-utils.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19573 files and directories currently installed.)
@@ -374,7 +406,11 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S  > ../golang-github-rogpeppe-go-internal_1.12.0-3_source.changes
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S  > ../golang-github-rogpeppe-go-internal_1.12.0-3_source.changes
 dpkg-buildpackage: info: source package golang-github-rogpeppe-go-internal
 dpkg-buildpackage: info: source version 1.12.0-3
 dpkg-buildpackage: info: source distribution unstable
@@ -392,17 +428,17 @@
    dh_autoreconf -O--builddirectory=_build -O--buildsystem=golang
    dh_auto_configure -O--builddirectory=_build -O--buildsystem=golang
    dh_auto_build -O--builddirectory=_build -O--buildsystem=golang
-	cd _build && go install -trimpath -v -p 3 github.com/rogpeppe/go-internal/cache github.com/rogpeppe/go-internal/cmd/testscript github.com/rogpeppe/go-internal/cmd/txtar-addmod github.com/rogpeppe/go-internal/cmd/txtar-c github.com/rogpeppe/go-internal/cmd/txtar-goproxy github.com/rogpeppe/go-internal/cmd/txtar-x github.com/rogpeppe/go-internal/diff github.com/rogpeppe/go-internal/dirhash github.com/rogpeppe/go-internal/fmtsort github.com/rogpeppe/go-internal/goproxytest github.com/rogpeppe/go-internal/gotooltest github.com/rogpeppe/go-internal/imports github.com/rogpeppe/go-internal/internal/misspell github.com/rogpeppe/go-internal/internal/os/execpath github.com/rogpeppe/go-internal/internal/syscall/windows github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll github.com/rogpeppe/go-internal/lockedfile github.com/rogpeppe/go-internal/lockedfile/internal/filelock github.com/rogpeppe/go-internal/modfile github.com/rogpeppe/go-internal/module github.com/rogpeppe/go-internal/par github.com/rogpeppe/go-internal/renameio github.com/rogpeppe/go-internal/robustio github.com/rogpeppe/go-internal/semver github.com/rogpeppe/go-internal/testenv github.com/rogpeppe/go-internal/testscript github.com/rogpeppe/go-internal/testscript/internal/pty github.com/rogpeppe/go-internal/txtar
-internal/goarch
+	cd _build && go install -trimpath -v -p 4 github.com/rogpeppe/go-internal/cache github.com/rogpeppe/go-internal/cmd/testscript github.com/rogpeppe/go-internal/cmd/txtar-addmod github.com/rogpeppe/go-internal/cmd/txtar-c github.com/rogpeppe/go-internal/cmd/txtar-goproxy github.com/rogpeppe/go-internal/cmd/txtar-x github.com/rogpeppe/go-internal/diff github.com/rogpeppe/go-internal/dirhash github.com/rogpeppe/go-internal/fmtsort github.com/rogpeppe/go-internal/goproxytest github.com/rogpeppe/go-internal/gotooltest github.com/rogpeppe/go-internal/imports github.com/rogpeppe/go-internal/internal/misspell github.com/rogpeppe/go-internal/internal/os/execpath github.com/rogpeppe/go-internal/internal/syscall/windows github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll github.com/rogpeppe/go-internal/lockedfile github.com/rogpeppe/go-internal/lockedfile/internal/filelock github.com/rogpeppe/go-internal/modfile github.com/rogpeppe/go-internal/module github.com/rogpeppe/go-internal/par github.com/rogpeppe/go-internal/renameio github.com/rogpeppe/go-internal/robustio github.com/rogpeppe/go-internal/semver github.com/rogpeppe/go-internal/testenv github.com/rogpeppe/go-internal/testscript github.com/rogpeppe/go-internal/testscript/internal/pty github.com/rogpeppe/go-internal/txtar
 internal/unsafeheader
 internal/byteorder
+internal/goarch
 internal/cpu
-internal/abi
-internal/chacha8rand
-internal/bytealg
 internal/coverage/rtcov
+internal/abi
 internal/godebugs
+internal/chacha8rand
 internal/goexperiment
+internal/bytealg
 internal/goos
 internal/profilerecord
 internal/runtime/atomic
@@ -410,21 +446,21 @@
 internal/stringslite
 runtime/internal/math
 runtime/internal/sys
-internal/runtime/exithook
 internal/race
 sync/atomic
 unicode
+internal/runtime/exithook
 unicode/utf8
-runtime
 math/bits
-math
 crypto/internal/alias
 crypto/internal/boring/sig
+math
 cmp
 internal/itoa
 internal/asan
 internal/msan
 log/internal
+runtime
 encoding
 unicode/utf16
 internal/nettrace
@@ -436,65 +472,70 @@
 internal/platform
 github.com/rogpeppe/go-internal/internal/syscall/windows
 github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll
-internal/reflectlite
 crypto/subtle
-sync
+internal/reflectlite
 iter
+sync
 slices
 internal/weak
 maps
 internal/bisect
-internal/testlog
 internal/singleflight
-errors
-internal/godebug
+internal/testlog
 runtime/cgo
+internal/godebug
+errors
+sort
 io
 strconv
+internal/oserror
+path
 bytes
 hash
+syscall
+crypto/cipher
 crypto
 reflect
-crypto/cipher
 crypto/internal/boring
 crypto/sha256
-internal/oserror
-path
-syscall
 strings
+bufio
+hash/crc32
 time
-internal/fmtsort
 internal/syscall/unix
 internal/syscall/execenv
-sort
-bufio
-encoding/binary
-hash/crc32
 math/rand
-io/fs
-internal/poll
-internal/filepathlite
-encoding/base64
-github.com/rogpeppe/go-internal/par
 regexp/syntax
+github.com/rogpeppe/go-internal/par
 golang.org/x/mod/semver
-context
-os
 vendor/golang.org/x/net/dns/dnsmessage
 regexp
+io/fs
+internal/poll
+internal/fmtsort
+internal/filepathlite
+encoding/binary
+context
 math/rand/v2
+os
 internal/concurrent
-unique
 crypto/internal/randutil
+unique
 crypto/aes
+encoding/base64
+crypto/des
+net/netip
+crypto/internal/edwards25519/field
+crypto/internal/nistec/fiat
+crypto/sha512
+crypto/internal/edwards25519
 fmt
 github.com/rogpeppe/go-internal/lockedfile/internal/filelock
 path/filepath
 golang.org/x/mod/internal/lazyregexp
-net/netip
-crypto/des
-crypto/internal/edwards25519/field
-crypto/internal/nistec/fiat
+net
+crypto/hmac
+vendor/golang.org/x/crypto/chacha20
 encoding/hex
 github.com/rogpeppe/go-internal/lockedfile
 log
@@ -502,88 +543,79 @@
 github.com/rogpeppe/go-internal/cache
 compress/flate
 encoding/json
-archive/zip
 golang.org/x/mod/module
 golang.org/x/tools/txtar
+math/big
+archive/zip
 compress/gzip
-net
 crypto/internal/nistec
-math/big
-crypto/ecdh
-crypto/sha512
-crypto/internal/edwards25519
-crypto/hmac
+vendor/golang.org/x/crypto/internal/poly1305
+vendor/golang.org/x/crypto/chacha20poly1305
+vendor/golang.org/x/crypto/hkdf
+vendor/golang.org/x/sys/cpu
+vendor/golang.org/x/crypto/sha3
+crypto/md5
 crypto/rand
+crypto/ecdh
 crypto/elliptic
 crypto/internal/bigmod
 crypto/internal/boring/bbig
 encoding/asn1
 crypto/ed25519
-vendor/golang.org/x/crypto/chacha20
-vendor/golang.org/x/crypto/internal/poly1305
-vendor/golang.org/x/crypto/chacha20poly1305
-vendor/golang.org/x/crypto/cryptobyte
-vendor/golang.org/x/crypto/hkdf
 crypto/internal/hpke
-vendor/golang.org/x/sys/cpu
-vendor/golang.org/x/crypto/sha3
-crypto/ecdsa
 crypto/internal/mlkem768
-crypto/md5
 crypto/rc4
 crypto/rsa
 crypto/sha1
+vendor/golang.org/x/crypto/cryptobyte
 crypto/dsa
 crypto/x509/pkix
 encoding/pem
 net/url
 vendor/golang.org/x/text/transform
+crypto/ecdsa
 vendor/golang.org/x/text/unicode/bidi
 vendor/golang.org/x/text/unicode/norm
-vendor/golang.org/x/text/secure/bidirule
 vendor/golang.org/x/net/http2/hpack
+vendor/golang.org/x/text/secure/bidirule
 mime
-vendor/golang.org/x/net/idna
 mime/quotedprintable
 net/http/internal
 net/http/internal/ascii
 github.com/rogpeppe/go-internal/diff
 io/ioutil
-crypto/x509
-net/textproto
-vendor/golang.org/x/net/http/httpproxy
-vendor/golang.org/x/net/http/httpguts
-mime/multipart
-github.com/rogpeppe/go-internal/imports
 os/exec
+vendor/golang.org/x/net/idna
+github.com/rogpeppe/go-internal/imports
 internal/sysinfo
-runtime/debug
 github.com/rogpeppe/go-internal/internal/os/execpath
+runtime/debug
 runtime/trace
 github.com/rogpeppe/go-internal/testscript/internal/pty
-testing
 github.com/rogpeppe/go-internal/txtar
-crypto/tls
+testing
 go/token
+go/build/constraint
 go/scanner
+crypto/x509
+net/textproto
+vendor/golang.org/x/net/http/httpproxy
 go/ast
-github.com/rogpeppe/go-internal/testenv
-go/build/constraint
+vendor/golang.org/x/net/http/httpguts
+mime/multipart
 go/doc/comment
+github.com/rogpeppe/go-internal/testenv
 internal/lazyregexp
+internal/buildcfg
 go/internal/typeparams
+internal/goroot
 go/parser
 go/doc
-internal/buildcfg
-internal/goroot
 github.com/rogpeppe/go-internal/cmd/txtar-addmod
-go/build
-net/http/httptrace
-net/http
+crypto/tls
 github.com/rogpeppe/go-internal/cmd/txtar-c
-github.com/rogpeppe/go-internal/testscript
 github.com/rogpeppe/go-internal/cmd/txtar-x
-github.com/rogpeppe/go-internal/gotooltest
+go/build
 github.com/rogpeppe/go-internal/dirhash
 github.com/rogpeppe/go-internal/fmtsort
 golang.org/x/mod/modfile
@@ -591,7 +623,11 @@
 github.com/rogpeppe/go-internal/renameio
 github.com/rogpeppe/go-internal/robustio
 github.com/rogpeppe/go-internal/semver
+github.com/rogpeppe/go-internal/testscript
 github.com/rogpeppe/go-internal/modfile
+github.com/rogpeppe/go-internal/gotooltest
+net/http/httptrace
+net/http
 github.com/rogpeppe/go-internal/goproxytest
 github.com/rogpeppe/go-internal/cmd/txtar-goproxy
 github.com/rogpeppe/go-internal/cmd/testscript
@@ -601,26 +637,26 @@
 patching file _build/src/github.com/rogpeppe/go-internal/testscript/testscript.go
 Hunk #1 succeeded at 1155 (offset 57 lines).
 GOPROXY= dh_auto_test
-	cd _build && go test -vet=off -v -p 3 github.com/rogpeppe/go-internal/cache github.com/rogpeppe/go-internal/cmd/testscript github.com/rogpeppe/go-internal/cmd/txtar-addmod github.com/rogpeppe/go-internal/cmd/txtar-c github.com/rogpeppe/go-internal/cmd/txtar-goproxy github.com/rogpeppe/go-internal/cmd/txtar-x github.com/rogpeppe/go-internal/diff github.com/rogpeppe/go-internal/dirhash github.com/rogpeppe/go-internal/fmtsort github.com/rogpeppe/go-internal/goproxytest github.com/rogpeppe/go-internal/gotooltest github.com/rogpeppe/go-internal/imports github.com/rogpeppe/go-internal/internal/misspell github.com/rogpeppe/go-internal/internal/os/execpath github.com/rogpeppe/go-internal/internal/syscall/windows github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll github.com/rogpeppe/go-internal/lockedfile github.com/rogpeppe/go-internal/lockedfile/internal/filelock github.com/rogpeppe/go-internal/modfile github.com/rogpeppe/go-internal/module github.com/rogpeppe/go-internal/par github.com/rogpeppe/go-internal/renameio github.com/rogpeppe/go-internal/robustio github.com/rogpeppe/go-internal/semver github.com/rogpeppe/go-internal/testenv github.com/rogpeppe/go-internal/testscript github.com/rogpeppe/go-internal/testscript/internal/pty github.com/rogpeppe/go-internal/txtar
+	cd _build && go test -vet=off -v -p 4 github.com/rogpeppe/go-internal/cache github.com/rogpeppe/go-internal/cmd/testscript github.com/rogpeppe/go-internal/cmd/txtar-addmod github.com/rogpeppe/go-internal/cmd/txtar-c github.com/rogpeppe/go-internal/cmd/txtar-goproxy github.com/rogpeppe/go-internal/cmd/txtar-x github.com/rogpeppe/go-internal/diff github.com/rogpeppe/go-internal/dirhash github.com/rogpeppe/go-internal/fmtsort github.com/rogpeppe/go-internal/goproxytest github.com/rogpeppe/go-internal/gotooltest github.com/rogpeppe/go-internal/imports github.com/rogpeppe/go-internal/internal/misspell github.com/rogpeppe/go-internal/internal/os/execpath github.com/rogpeppe/go-internal/internal/syscall/windows github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll github.com/rogpeppe/go-internal/lockedfile github.com/rogpeppe/go-internal/lockedfile/internal/filelock github.com/rogpeppe/go-internal/modfile github.com/rogpeppe/go-internal/module github.com/rogpeppe/go-internal/par github.com/rogpeppe/go-internal/renameio github.com/rogpeppe/go-internal/robustio github.com/rogpeppe/go-internal/semver github.com/rogpeppe/go-internal/testenv github.com/rogpeppe/go-internal/testscript github.com/rogpeppe/go-internal/testscript/internal/pty github.com/rogpeppe/go-internal/txtar
 === RUN   TestBasic
---- PASS: TestBasic (0.15s)
+--- PASS: TestBasic (0.06s)
 === RUN   TestGrowth
---- PASS: TestGrowth (14.65s)
+--- PASS: TestGrowth (3.98s)
 === RUN   TestVerifyPanic
     cache_test.go:138: go: internal cache error: cache verify failed: id=0100000000000000000000000000000000000000000000000000000000000000 changed:<<<
         
         >>>
         old: cb8379ac2098aa165029e3938a51da0bcecfc008fd6795f401178647f96c5b34 3
         new: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad 3
---- PASS: TestVerifyPanic (0.11s)
+--- PASS: TestVerifyPanic (0.06s)
 === RUN   TestCacheTrim
---- PASS: TestCacheTrim (0.36s)
+--- PASS: TestCacheTrim (0.09s)
 === RUN   TestHash
 --- PASS: TestHash (0.00s)
 === RUN   TestHashFile
 --- PASS: TestHashFile (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/cache	15.297s
+ok  	github.com/rogpeppe/go-internal/cache	4.192s
 === RUN   TestScripts
 === RUN   TestScripts/continue
 === PAUSE TestScripts/continue
@@ -647,11 +683,62 @@
 === RUN   TestScripts/work
 === PAUSE TestScripts/work
 === CONT  TestScripts/continue
+=== CONT  TestScripts/work
 === CONT  TestScripts/nogo
-=== CONT  TestScripts/env_var_with_go
+=== CONT  TestScripts/skip
+=== NAME  TestScripts/nogo
+    testscript.go:558: WORK=$WORK
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+        GOTRACEBACK=system
+        HOME=/no-home
+        TMPDIR=$WORK/.tmp
+        devnull=/dev/null
+        /=/
+        :=:
+        $=$
+        exe=
+        GOPATH=$WORK/.gopath
+        CCACHE_DISABLE=1
+        GOARCH=arm
+        GOOS=linux
+        GOROOT=/usr/lib/go-1.23
+        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
+        GOPROXY=https://proxy.golang.org,direct
+        goversion=1.23
+        GOINTERNALMODPATH=.
+        GONOSUMDB=*
+        
+        # should support skip (0.000s)
+        > unquote file.txt
+        # We can't just set PATH to empty because we need the part of it that
+        # contains the command names, so use a special builtin instead. (0.010s)
+        > dropgofrompath
+        > ! testscript -v file.txt
+        [stdout]
+        WORK=$WORK
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
+        GOTRACEBACK=system
+        HOME=/no-home
+        TMPDIR=$WORK/.tmp
+        devnull=/dev/null
+        /=/
+        :=:
+        $=$
+        exe=
+        
+        > go env
+        FAIL: $WORK/.tmp/testscript361601213/file.txt/script.txtar:1: unknown command "go"
+        [stderr]
+        error running file.txt in $WORK/.tmp/testscript361601213/file.txt
+        
+        [exit status 1]
+        > stdout 'unknown command "go"'
+        > stderr 'error running file.txt in'
+        PASS
+        
 === CONT  TestScripts/help
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -671,7 +758,7 @@
         GOINTERNALMODPATH=.
         GONOSUMDB=*
         
-        # Simply sanity check on help output (0.037s)
+        # Simply sanity check on help output (0.023s)
         > ! testscript -help
         [stderr]
         The testscript command runs github.com/rogpeppe/go-internal/testscript scripts
@@ -802,60 +889,9 @@
         PASS
         
 === CONT  TestScripts/error
-=== NAME  TestScripts/nogo
-    testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-        GOTRACEBACK=system
-        HOME=/no-home
-        TMPDIR=$WORK/.tmp
-        devnull=/dev/null
-        /=/
-        :=:
-        $=$
-        exe=
-        GOPATH=$WORK/.gopath
-        CCACHE_DISABLE=1
-        GOARCH=arm
-        GOOS=linux
-        GOROOT=/usr/lib/go-1.23
-        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=https://proxy.golang.org,direct
-        goversion=1.23
-        GOINTERNALMODPATH=.
-        GONOSUMDB=*
-        
-        # should support skip (0.000s)
-        > unquote file.txt
-        # We can't just set PATH to empty because we need the part of it that
-        # contains the command names, so use a special builtin instead. (0.047s)
-        > dropgofrompath
-        > ! testscript -v file.txt
-        [stdout]
-        WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
-        GOTRACEBACK=system
-        HOME=/no-home
-        TMPDIR=$WORK/.tmp
-        devnull=/dev/null
-        /=/
-        :=:
-        $=$
-        exe=
-        
-        > go env
-        FAIL: $WORK/.tmp/testscript2922424658/file.txt/script.txtar:1: unknown command "go"
-        [stderr]
-        error running file.txt in $WORK/.tmp/testscript2922424658/file.txt
-        
-        [exit status 1]
-        > stdout 'unknown command "go"'
-        > stderr 'error running file.txt in'
-        PASS
-        
-=== CONT  TestScripts/skip
 === NAME  TestScripts/continue
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -875,21 +911,21 @@
         GOINTERNALMODPATH=.
         GONOSUMDB=*
         
-        # should support -continue (0.007s)
+        # should support -continue (0.000s)
         > unquote file.txt
         # Running with continue, the testscript command itself
         # should fail, but we should see the results of executing
-        # both commands. (2.894s)
+        # both commands. (0.449s)
         > ! testscript -continue file.txt
         [stdout]
         > grep banana in
         [in]
         apple
         
-        FAIL: $WORK/.tmp/testscript3227863880/file.txt/script.txtar:1: no match for `banana` found in in
+        FAIL: $WORK/.tmp/testscript1098549411/file.txt/script.txtar:1: no match for `banana` found in in
         > grep apple in
         [stderr]
-        error running file.txt in $WORK/.tmp/testscript3227863880/file.txt
+        error running file.txt in $WORK/.tmp/testscript1098549411/file.txt
         
         [exit status 1]
         > stdout 'grep banana in'
@@ -897,10 +933,10 @@
         > stdout 'grep apple in'
         PASS
         
-=== CONT  TestScripts/work
-=== NAME  TestScripts/skip
+=== CONT  TestScripts/env_var_with_go
+=== NAME  TestScripts/work
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -920,12 +956,18 @@
         GOINTERNALMODPATH=.
         GONOSUMDB=*
         
-        # should support skip (2.859s)
-        > unquote file.txt
-        > testscript -v file.txt
+        # Test that passing -work leaves behind the working directory
+        # that contains the temporary directories within which the
+        # script arguments are expanded.
+        #
+        # This test also covers the use of multiple scripts which share
+        # the same basename, ensuring that the naming of the directories
+        # within the working directory. (0.452s)
+        > unquote file.txt dir/file.txt
+        > testscript -v -work file.txt dir/file.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -943,76 +985,10 @@
         GOPROXY=https://proxy.golang.org,direct
         goversion=1.23
         
-        > go version
-        [stdout]
-        go version go1.23.4 linux/arm
-        
-        > skip
-        > stdout 'go version'
-        > ! stderr .+
+        > exec true
         PASS
-        
-=== CONT  TestScripts/update
-=== NAME  TestScripts/error
-    testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-        GOTRACEBACK=system
-        HOME=/no-home
-        TMPDIR=$WORK/.tmp
-        devnull=/dev/null
-        /=/
-        :=:
-        $=$
-        exe=
-        GOPATH=$WORK/.gopath
-        CCACHE_DISABLE=1
-        GOARCH=arm
-        GOOS=linux
-        GOROOT=/usr/lib/go-1.23
-        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=https://proxy.golang.org,direct
-        goversion=1.23
-        GOINTERNALMODPATH=.
-        GONOSUMDB=*
-        
-        # should support skip (0.000s)
-        > unquote file.txt
-        # stdin (2.892s)
-        > stdin file.txt
-        > ! testscript -v
-        [stdout]
-        WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-        GOTRACEBACK=system
-        HOME=/no-home
-        TMPDIR=$WORK/.tmp
-        devnull=/dev/null
-        /=/
-        :=:
-        $=$
-        exe=
-        GOPATH=$WORK/.gopath
-        CCACHE_DISABLE=1
-        GOARCH=arm
-        GOOS=linux
-        GOROOT=/usr/lib/go-1.23
-        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=https://proxy.golang.org,direct
-        goversion=1.23
-        
-        > exec false
-        [exit status 1]
-        FAIL: $WORK/.tmp/testscript4110540069/-/script.txtar:1: unexpected command failure
-        [stderr]
-        error running <stdin> in $WORK/.tmp/testscript4110540069/-
-        
-        [exit status 1]
-        > stderr 'error running <stdin> in'
-        # file-based (0.328s)
-        > ! testscript -v file.txt
-        [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1030,20 +1006,23 @@
         GOPROXY=https://proxy.golang.org,direct
         goversion=1.23
         
-        > exec false
-        [exit status 1]
-        FAIL: $WORK/.tmp/testscript3070790452/file.txt/script.txtar:1: unexpected command failure
+        > exec true
+        PASS
         [stderr]
-        error running file.txt in $WORK/.tmp/testscript3070790452/file.txt
-        
-        [exit status 1]
-        > stderr 'error running file.txt in'
+        temporary work directory: $WORK/.tmp/testscript1093221646
+        temporary work directory for file.txt: $WORK/.tmp/go-test-script1219503744/script-script
+        temporary work directory for dir/file.txt: $WORK/.tmp/go-test-script2890636047/script-script
+        > stderr '^temporary work directory: \Q'$WORK'\E[/\\]\.tmp[/\\]'
+        > stderr '^temporary work directory for file.txt: \Q'$WORK'\E[/\\]\.tmp[/\\]'
+        > stderr '^temporary work directory for dir[/\\]file.txt: \Q'$WORK'\E[/\\]\.tmp[/\\]'
+        > expandone $WORK/.tmp/testscript*/file.txt/script.txtar
+        > expandone $WORK/.tmp/testscript*/file.txt1/script.txtar
         PASS
         
-=== CONT  TestScripts/simple
-=== NAME  TestScripts/work
+=== CONT  TestScripts/env_var_no_go
+=== NAME  TestScripts/skip
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1063,18 +1042,12 @@
         GOINTERNALMODPATH=.
         GONOSUMDB=*
         
-        # Test that passing -work leaves behind the working directory
-        # that contains the temporary directories within which the
-        # script arguments are expanded.
-        #
-        # This test also covers the use of multiple scripts which share
-        # the same basename, ensuring that the naming of the directories
-        # within the working directory. (0.411s)
-        > unquote file.txt dir/file.txt
-        > testscript -v -work file.txt dir/file.txt
+        # should support skip (0.456s)
+        > unquote file.txt
+        > testscript -v file.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1092,85 +1065,19 @@
         GOPROXY=https://proxy.golang.org,direct
         goversion=1.23
         
-        > exec true
-        PASS
-        WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-        GOTRACEBACK=system
-        HOME=/no-home
-        TMPDIR=$WORK/.tmp
-        devnull=/dev/null
-        /=/
-        :=:
-        $=$
-        exe=
-        GOPATH=$WORK/.gopath
-        CCACHE_DISABLE=1
-        GOARCH=arm
-        GOOS=linux
-        GOROOT=/usr/lib/go-1.23
-        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=https://proxy.golang.org,direct
-        goversion=1.23
-        
-        > exec true
-        PASS
-        [stderr]
-        temporary work directory: $WORK/.tmp/testscript723906993
-        temporary work directory for file.txt: $WORK/.tmp/go-test-script2780962914/script-script
-        temporary work directory for dir/file.txt: $WORK/.tmp/go-test-script2247406687/script-script
-        > stderr '^temporary work directory: \Q'$WORK'\E[/\\]\.tmp[/\\]'
-        > stderr '^temporary work directory for file.txt: \Q'$WORK'\E[/\\]\.tmp[/\\]'
-        > stderr '^temporary work directory for dir[/\\]file.txt: \Q'$WORK'\E[/\\]\.tmp[/\\]'
-        > expandone $WORK/.tmp/testscript*/file.txt/script.txtar
-        > expandone $WORK/.tmp/testscript*/file.txt1/script.txtar
-        PASS
-        
-=== CONT  TestScripts/noproxy
-=== NAME  TestScripts/update
-    testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-        GOTRACEBACK=system
-        HOME=/no-home
-        TMPDIR=$WORK/.tmp
-        devnull=/dev/null
-        /=/
-        :=:
-        $=$
-        exe=
-        GOPATH=$WORK/.gopath
-        CCACHE_DISABLE=1
-        GOARCH=arm
-        GOOS=linux
-        GOROOT=/usr/lib/go-1.23
-        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=https://proxy.golang.org,direct
-        goversion=1.23
-        GOINTERNALMODPATH=.
-        GONOSUMDB=*
-        
-        # should support the -update flag (0.002s)
-        > unquote in.txt res.txt
-        # Should be an error to use -u with only stdin (0.036s)
-        > stdin in.txt
-        > ! testscript -u
-        [stderr]
-        cannot use -u when reading from stdin
-        [exit status 1]
-        > stderr 'cannot use -u when reading from stdin'
-        # It is ok to use -u when reading from stdin and
-        # a regular file (0.396s)
-        > testscript -u - in.txt
+        > go version
         [stdout]
-        PASS
-        PASS
-        $WORK/.tmp/testscript4292103880/in.txt/script.txtar updated
-        > cmp in.txt res.txt
+        go version go1.23.4 linux/arm
+        
+        > skip
+        > stdout 'go version'
+        > ! stderr .+
         PASS
         
-=== CONT  TestScripts/env_var_no_go
+=== CONT  TestScripts/env_values
+=== NAME  TestScripts/env_var_no_go
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1199,11 +1106,11 @@
         > env BANANA=banana
         > env GOPATH=$WORK/ourgopath
         > env GOPROXY=
-        # no GOPROXY, no pass-through, no proxy (0.078s)
+        # no GOPROXY, no pass-through, no proxy (0.009s)
         > testscript -v noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1224,11 +1131,11 @@
         > stdout ^GOPATH=$
         > stdout ^GOPROXY=$
         > ! stderr .+
-        # no GOPROXY, no pass-through, with proxy (0.073s)
+        # no GOPROXY, no pass-through, with proxy (0.016s)
         > testscript -v withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1237,7 +1144,7 @@
         :=:
         $=$
         exe=
-        GOPROXY=http://127.0.0.1:45219/mod
+        GOPROXY=http://127.0.0.1:44285/mod
         GONOSUMDB=*
         
         > env BANANA
@@ -1245,17 +1152,17 @@
         > env GOPATH
         GOPATH=
         > env GOPROXY
-        GOPROXY=http://127.0.0.1:45219/mod
+        GOPROXY=http://127.0.0.1:44285/mod
         PASS
         > stdout ^BANANA=$
         > stdout ^GOPATH=$
         > stdout ^GOPROXY=http://.*/mod$
         > ! stderr .+
-        # no GOPROXY, with pass-through, no proxy (0.040s)
+        # no GOPROXY, with pass-through, no proxy (0.019s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1279,11 +1186,11 @@
         > stdout ^GOPATH=${WORK@R}[/\\]ourgopath$
         > stdout ^GOPROXY=$
         > ! stderr .+
-        # no GOPROXY, with pass-through, with proxy (0.048s)
+        # no GOPROXY, with pass-through, with proxy (0.014s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1309,11 +1216,11 @@
         > stdout ^GOPROXY=$
         > ! stderr .+
         > setfilegoproxy $WORK/proxy
-        # with GOPROXY, no pass-through, no proxy (0.040s)
+        # with GOPROXY, no pass-through, no proxy (0.010s)
         > testscript -v noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1334,11 +1241,11 @@
         > stdout ^GOPATH=$
         > stdout ^GOPROXY=$
         > ! stderr .+
-        # with GOPROXY, no pass-through, with proxy (0.037s)
+        # with GOPROXY, no pass-through, with proxy (0.011s)
         > testscript -v withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1347,7 +1254,7 @@
         :=:
         $=$
         exe=
-        GOPROXY=http://127.0.0.1:44227/mod
+        GOPROXY=http://127.0.0.1:40069/mod
         GONOSUMDB=*
         
         > env BANANA
@@ -1355,17 +1262,17 @@
         > env GOPATH
         GOPATH=
         > env GOPROXY
-        GOPROXY=http://127.0.0.1:44227/mod
+        GOPROXY=http://127.0.0.1:40069/mod
         PASS
         > stdout ^BANANA=$
         > stdout ^GOPATH=$
         > stdout ^GOPROXY=http://.*/mod$
         > ! stderr .+
-        # with GOPROXY, with pass-through, no proxy (0.032s)
+        # with GOPROXY, with pass-through, no proxy (0.008s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1389,11 +1296,11 @@
         > stdout ^GOPATH=${WORK@R}[/\\]ourgopath$
         > stdout ^GOPROXY=$GOPROXY$
         > ! stderr .+
-        # with GOPROXY, with pass-through, with proxy (0.036s)
+        # with GOPROXY, with pass-through, with proxy (0.013s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/sbin:/sbin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/sbin:/sbin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1420,10 +1327,97 @@
         > ! stderr .+
         PASS
         
-=== CONT  TestScripts/env_values
-=== NAME  TestScripts/noproxy
+=== CONT  TestScripts/simple
+=== NAME  TestScripts/error
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+        GOTRACEBACK=system
+        HOME=/no-home
+        TMPDIR=$WORK/.tmp
+        devnull=/dev/null
+        /=/
+        :=:
+        $=$
+        exe=
+        GOPATH=$WORK/.gopath
+        CCACHE_DISABLE=1
+        GOARCH=arm
+        GOOS=linux
+        GOROOT=/usr/lib/go-1.23
+        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
+        GOPROXY=https://proxy.golang.org,direct
+        goversion=1.23
+        GOINTERNALMODPATH=.
+        GONOSUMDB=*
+        
+        # should support skip (0.000s)
+        > unquote file.txt
+        # stdin (0.416s)
+        > stdin file.txt
+        > ! testscript -v
+        [stdout]
+        WORK=$WORK
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+        GOTRACEBACK=system
+        HOME=/no-home
+        TMPDIR=$WORK/.tmp
+        devnull=/dev/null
+        /=/
+        :=:
+        $=$
+        exe=
+        GOPATH=$WORK/.gopath
+        CCACHE_DISABLE=1
+        GOARCH=arm
+        GOOS=linux
+        GOROOT=/usr/lib/go-1.23
+        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
+        GOPROXY=https://proxy.golang.org,direct
+        goversion=1.23
+        
+        > exec false
+        [exit status 1]
+        FAIL: $WORK/.tmp/testscript1612054068/-/script.txtar:1: unexpected command failure
+        [stderr]
+        error running <stdin> in $WORK/.tmp/testscript1612054068/-
+        
+        [exit status 1]
+        > stderr 'error running <stdin> in'
+        # file-based (0.124s)
+        > ! testscript -v file.txt
+        [stdout]
+        WORK=$WORK
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+        GOTRACEBACK=system
+        HOME=/no-home
+        TMPDIR=$WORK/.tmp
+        devnull=/dev/null
+        /=/
+        :=:
+        $=$
+        exe=
+        GOPATH=$WORK/.gopath
+        CCACHE_DISABLE=1
+        GOARCH=arm
+        GOOS=linux
+        GOROOT=/usr/lib/go-1.23
+        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
+        GOPROXY=https://proxy.golang.org,direct
+        goversion=1.23
+        
+        > exec false
+        [exit status 1]
+        FAIL: $WORK/.tmp/testscript2354880706/file.txt/script.txtar:1: unexpected command failure
+        [stderr]
+        error running file.txt in $WORK/.tmp/testscript2354880706/file.txt
+        
+        [exit status 1]
+        > stderr 'error running file.txt in'
+        PASS
+        
+=== CONT  TestScripts/noproxy
+    testscript.go:558: WORK=$WORK
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1446,13 +1440,13 @@
         # With no .gomodproxy supporting files, we use the GOPROXY from
         # the environment.
         # Note that Go 1.21 started quoting with single quotes in "go env",
-        # where older versions used double quotes. (0.438s)
+        # where older versions used double quotes. (0.131s)
         > env GOPROXY=0.1.2.3
         > unquote file.txt
         > testscript -v file.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1514,16 +1508,60 @@
         CGO_FFLAGS='-O2 -g'
         CGO_LDFLAGS='-O2 -g'
         PKG_CONFIG='pkg-config'
-        GOGCCFLAGS='-fPIC -marm -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=$WORK/.tmp/go-build801047230=/tmp/go-build -gno-record-gcc-switches'
+        GOGCCFLAGS='-fPIC -marm -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=$WORK/.tmp/go-build758537410=/tmp/go-build -gno-record-gcc-switches'
         
         > [!windows] stdout '^GOPROXY=[''"]0.1.2.3[''"]$'
         > [windows] stdout '^set GOPROXY=0.1.2.3$'
         PASS
         PASS
         
+=== CONT  TestScripts/update
+=== NAME  TestScripts/env_values
+    testscript.go:558: WORK=$WORK
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+        GOTRACEBACK=system
+        HOME=/no-home
+        TMPDIR=$WORK/.tmp
+        devnull=/dev/null
+        /=/
+        :=:
+        $=$
+        exe=
+        GOPATH=$WORK/.gopath
+        CCACHE_DISABLE=1
+        GOARCH=arm
+        GOOS=linux
+        GOROOT=/usr/lib/go-1.23
+        GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
+        GOPROXY=https://proxy.golang.org,direct
+        goversion=1.23
+        GOINTERNALMODPATH=.
+        GONOSUMDB=*
+        
+        # Test that passing env values, e.g. ENV1=val, works (0.000s)
+        > unquote test.txt
+        > env BLAH1=
+        > env BLAH2=junk
+        # Normal operation (0.125s)
+        > testscript -e BLAH1=rubbish -e BLAH2 test.txt
+        [stdout]
+        PASS
+        # It is an error to specify WORK. Note the error message
+        # appears on stdout because it is written to the log output
+        # of testscript, which has no concept of stderr. (0.152s)
+        > ! testscript -e BLAH1=rubbish -e BLAH2 -e WORK test.txt
+        [stdout]
+        FAIL: $WORK/.tmp/testscript3678410641/test.txt/script.txtar:0: cannot override WORK variable
+        [stderr]
+        error running test.txt in $WORK/.tmp/testscript3678410641/test.txt
+        
+        [exit status 1]
+        > stdout 'cannot override WORK variable'
+        PASS
+        
 === NAME  TestScripts/simple
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1544,13 +1582,13 @@
         GONOSUMDB=*
         
         # With .gomodproxy supporting files, any GOPROXY from the
-        # environment should be overridden by the test proxy. (0.571s)
+        # environment should be overridden by the test proxy. (0.188s)
         > env GOPROXY=0.1.2.3
         > unquote file.txt
         > testscript -v file.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1565,7 +1603,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:41323/mod
+        GOPROXY=http://127.0.0.1:33619/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -1591,9 +1629,9 @@
         > ! stderr .+
         PASS
         
-=== NAME  TestScripts/env_values
+=== NAME  TestScripts/update
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1613,30 +1651,28 @@
         GOINTERNALMODPATH=.
         GONOSUMDB=*
         
-        # Test that passing env values, e.g. ENV1=val, works (0.005s)
-        > unquote test.txt
-        > env BLAH1=
-        > env BLAH2=junk
-        # Normal operation (0.283s)
-        > testscript -e BLAH1=rubbish -e BLAH2 test.txt
-        [stdout]
-        PASS
-        # It is an error to specify WORK. Note the error message
-        # appears on stdout because it is written to the log output
-        # of testscript, which has no concept of stderr. (0.327s)
-        > ! testscript -e BLAH1=rubbish -e BLAH2 -e WORK test.txt
-        [stdout]
-        FAIL: $WORK/.tmp/testscript2659701450/test.txt/script.txtar:0: cannot override WORK variable
+        # should support the -update flag (0.000s)
+        > unquote in.txt res.txt
+        # Should be an error to use -u with only stdin (0.009s)
+        > stdin in.txt
+        > ! testscript -u
         [stderr]
-        error running test.txt in $WORK/.tmp/testscript2659701450/test.txt
-        
+        cannot use -u when reading from stdin
         [exit status 1]
-        > stdout 'cannot override WORK variable'
+        > stderr 'cannot use -u when reading from stdin'
+        # It is ok to use -u when reading from stdin and
+        # a regular file (0.129s)
+        > testscript -u - in.txt
+        [stdout]
+        PASS
+        PASS
+        $WORK/.tmp/testscript1940437177/in.txt/script.txtar updated
+        > cmp in.txt res.txt
         PASS
         
 === NAME  TestScripts/env_var_with_go
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1662,14 +1698,14 @@
         # the string literal $WORK because testscript rewrites the actual directory
         # to $WORK. Hence we don't want to expand this script's $WORK in such a comparison.
         #
-        # This is the counterpart to env_var_no_go.txt (0.002s)
+        # This is the counterpart to env_var_no_go.txt (0.001s)
         > unquote noproxy.txt
         > unquote withproxy.txt
-        # Baseline (2.873s)
+        # Baseline (0.120s)
         > testscript -v noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1701,11 +1737,11 @@
         > env BANANA=banana
         > env GOPATH=$WORK/ourgopath
         > env GOPROXY=
-        # no GOPROXY, no pass-through, no proxy (0.397s)
+        # no GOPROXY, no pass-through, no proxy (0.153s)
         > testscript -v noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1734,11 +1770,11 @@
         > stdout '^GOPATH=\$WORK[/\\]\.gopath'$
         > stdout ^GOPROXY=https://proxy.golang.org,direct$
         > ! stderr .+
-        # no GOPROXY, no pass-through, with proxy (0.355s)
+        # no GOPROXY, no pass-through, with proxy (0.110s)
         > testscript -v withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1753,7 +1789,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:43493/mod
+        GOPROXY=http://127.0.0.1:39993/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -1762,17 +1798,17 @@
         > env GOPATH
         GOPATH=$WORK/.gopath
         > env GOPROXY
-        GOPROXY=http://127.0.0.1:43493/mod
+        GOPROXY=http://127.0.0.1:39993/mod
         PASS
         > stdout ^BANANA=$
         > stdout '^GOPATH=\$WORK[/\\]\.gopath'$
         > stdout ^GOPROXY=http://.*/mod$
         > ! stderr .+
-        # no GOPROXY, with pass-through, no proxy (0.316s)
+        # no GOPROXY, with pass-through, no proxy (0.102s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1802,11 +1838,11 @@
         > stdout ^GOPATH=${WORK@R}[/\\]ourgopath$
         > stdout ^GOPROXY=$
         > ! stderr .+
-        # no GOPROXY, with pass-through, with proxy (0.319s)
+        # no GOPROXY, with pass-through, with proxy (0.121s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1838,11 +1874,11 @@
         > stdout ^GOPROXY=$
         > ! stderr .+
         > setfilegoproxy $WORK/proxy
-        # with GOPROXY, no pass-through, no proxy (0.333s)
+        # with GOPROXY, no pass-through, no proxy (0.106s)
         > testscript -v noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1871,11 +1907,11 @@
         > stdout '^GOPATH=\$WORK[/\\]\.gopath'$
         > stdout ^GOPROXY=$GOPROXY$
         > ! stderr .+
-        # with GOPROXY, no pass-through, with proxy (0.270s)
+        # with GOPROXY, no pass-through, with proxy (0.106s)
         > testscript -v withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1890,7 +1926,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:43363/mod
+        GOPROXY=http://127.0.0.1:37733/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -1899,17 +1935,17 @@
         > env GOPATH
         GOPATH=$WORK/.gopath
         > env GOPROXY
-        GOPROXY=http://127.0.0.1:43363/mod
+        GOPROXY=http://127.0.0.1:37733/mod
         PASS
         > stdout ^BANANA=$
         > stdout '^GOPATH=\$WORK[/\\]\.gopath'$
         > stdout ^GOPROXY=http://.*/mod$
         > ! stderr .+
-        # with GOPROXY, with pass-through, no proxy (0.248s)
+        # with GOPROXY, with pass-through, no proxy (0.102s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY noproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1939,11 +1975,11 @@
         > stdout ^GOPATH=${WORK@R}[/\\]ourgopath$
         > stdout ^GOPROXY=$GOPROXY$
         > ! stderr .+
-        # with GOPROXY, with pass-through, with proxy (0.238s)
+        # with GOPROXY, with pass-through, with proxy (0.120s)
         > testscript -v -e BANANA -e GOPATH -e GOPROXY withproxy.txt
         [stdout]
         WORK=$WORK
-        PATH=/tmp/testscript-main702878249/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main1174892925/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -1976,21 +2012,22 @@
         > ! stderr .+
         PASS
         
---- PASS: TestScripts (0.28s)
-    --- PASS: TestScripts/help (0.05s)
-    --- PASS: TestScripts/nogo (0.07s)
-    --- PASS: TestScripts/continue (2.91s)
-    --- PASS: TestScripts/skip (2.86s)
-    --- PASS: TestScripts/error (3.22s)
-    --- PASS: TestScripts/work (0.42s)
-    --- PASS: TestScripts/update (0.44s)
-    --- PASS: TestScripts/env_var_no_go (0.40s)
-    --- PASS: TestScripts/noproxy (0.45s)
-    --- PASS: TestScripts/simple (0.58s)
-    --- PASS: TestScripts/env_values (0.62s)
-    --- PASS: TestScripts/env_var_with_go (5.37s)
+--- PASS: TestScripts (0.08s)
+    --- PASS: TestScripts/nogo (0.01s)
+    --- PASS: TestScripts/help (0.02s)
+    --- PASS: TestScripts/continue (0.45s)
+    --- PASS: TestScripts/work (0.45s)
+    --- PASS: TestScripts/skip (0.46s)
+    --- PASS: TestScripts/env_var_no_go (0.11s)
+    --- PASS: TestScripts/error (0.54s)
+    --- PASS: TestScripts/noproxy (0.13s)
+    --- PASS: TestScripts/env_values (0.28s)
+    --- PASS: TestScripts/simple (0.19s)
+    --- PASS: TestScripts/update (0.14s)
+    --- PASS: TestScripts/env_var_with_go (1.04s)
 PASS
-ok  	github.com/rogpeppe/go-internal/cmd/testscript	5.681s
+ok  	github.com/rogpeppe/go-internal/cmd/testscript	1.586s
+?   	github.com/rogpeppe/go-internal/cmd/txtar-goproxy	[no test files]
 === RUN   TestScripts
 === RUN   TestScripts/encode
 === PAUSE TestScripts/encode
@@ -2001,11 +2038,11 @@
 === CONT  TestScripts/encode
 === CONT  TestScripts/txtar-addmod-self
 === CONT  TestScripts/to_stdout
-go proxy: no archive github.com v0.0.0-20171119174359-809beceb2371
 go proxy: no archive github.com/shurcooL v0.0.0-20171119174359-809beceb2371
+go proxy: no archive github.com v0.0.0-20171119174359-809beceb2371
 === NAME  TestScripts/encode
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main2838625284/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main3397151635/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2020,7 +2057,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:41627/mod
+        GOPROXY=http://127.0.0.1:42877/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -2033,7 +2070,7 @@
         
 === NAME  TestScripts/to_stdout
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main2838625284/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main3397151635/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2048,7 +2085,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:41627/mod
+        GOPROXY=http://127.0.0.1:42877/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -2075,7 +2112,7 @@
         
 === NAME  TestScripts/txtar-addmod-self
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main2838625284/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main3397151635/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2090,7 +2127,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:41627/mod
+        GOPROXY=http://127.0.0.1:42877/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -2104,12 +2141,12 @@
         > grep '-- foobar --' $WORK/out/github.com_gobin-testrepos_simple-main_v1.0.0.txtar
         PASS
         
---- PASS: TestScripts (0.20s)
-    --- PASS: TestScripts/encode (0.25s)
-    --- PASS: TestScripts/to_stdout (0.50s)
-    --- PASS: TestScripts/txtar-addmod-self (0.75s)
+--- PASS: TestScripts (0.09s)
+    --- PASS: TestScripts/encode (0.10s)
+    --- PASS: TestScripts/to_stdout (0.15s)
+    --- PASS: TestScripts/txtar-addmod-self (0.25s)
 PASS
-ok  	github.com/rogpeppe/go-internal/cmd/txtar-addmod	0.990s
+ok  	github.com/rogpeppe/go-internal/cmd/txtar-addmod	0.353s
 === RUN   TestScripts
 === RUN   TestScripts/all
 === PAUSE TestScripts/all
@@ -2120,11 +2157,12 @@
 === RUN   TestScripts/txtar-savedir-self
 === PAUSE TestScripts/txtar-savedir-self
 === CONT  TestScripts/all
-=== CONT  TestScripts/quote
 === CONT  TestScripts/needquote
+=== CONT  TestScripts/quote
 === CONT  TestScripts/txtar-savedir-self
+=== NAME  TestScripts/needquote
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main3578846650/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main674523554/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2134,29 +2172,21 @@
         $=$
         exe=
         
+        > unquote blah/withsep
         > unquote expect
         > txtar-c blah
         [stdout]
-        -- go.mod --
-        module example.com/blah
-        
-        -- main.go --
-        package main
-        
-        import "fmt"
-        
-        func main() {
-          fmt.Println("Hello, world!")
-        }
-        -- subdir/x --
-        x contents
-        > ! stderr .+
+        -- nosep --
+        bar
+        [stderr]
+        txtar-c: blah/withsep: ignoring file with txtar marker in
+        > stderr 'txtar-c: blah.withsep: ignoring file with txtar marker in'
         > cmp stdout expect
         PASS
         
-=== NAME  TestScripts/needquote
+=== NAME  TestScripts/txtar-savedir-self
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main3578846650/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main674523554/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2166,21 +2196,29 @@
         $=$
         exe=
         
-        > unquote blah/withsep
         > unquote expect
         > txtar-c blah
         [stdout]
-        -- nosep --
-        bar
-        [stderr]
-        txtar-c: blah/withsep: ignoring file with txtar marker in
-        > stderr 'txtar-c: blah.withsep: ignoring file with txtar marker in'
+        -- go.mod --
+        module example.com/blah
+        
+        -- main.go --
+        package main
+        
+        import "fmt"
+        
+        func main() {
+          fmt.Println("Hello, world!")
+        }
+        -- subdir/x --
+        x contents
+        > ! stderr .+
         > cmp stdout expect
         PASS
         
 === NAME  TestScripts/quote
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main3578846650/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main674523554/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2204,7 +2242,7 @@
         
 === NAME  TestScripts/all
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main3578846650/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main674523554/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2216,7 +2254,7 @@
         
         > unquote expect-all
         > unquote expect-no-all
-        # Without the -a flag, it should ignore . files. (0.026s)
+        # Without the -a flag, it should ignore . files. (0.005s)
         > txtar-c blah
         [stdout]
         -- go.mod --
@@ -2232,7 +2270,7 @@
         }
         > ! stderr .+
         > cmp stdout expect-no-all
-        # With the -a flag, it should include them. (0.011s)
+        # With the -a flag, it should include them. (0.005s)
         > txtar-c -a blah
         [stdout]
         -- .foo/foo --
@@ -2255,13 +2293,12 @@
         PASS
         
 --- PASS: TestScripts (0.00s)
-    --- PASS: TestScripts/txtar-savedir-self (0.06s)
-    --- PASS: TestScripts/needquote (0.06s)
-    --- PASS: TestScripts/quote (0.07s)
-    --- PASS: TestScripts/all (0.09s)
+    --- PASS: TestScripts/needquote (0.01s)
+    --- PASS: TestScripts/txtar-savedir-self (0.01s)
+    --- PASS: TestScripts/quote (0.01s)
+    --- PASS: TestScripts/all (0.02s)
 PASS
-ok  	github.com/rogpeppe/go-internal/cmd/txtar-c	0.109s
-?   	github.com/rogpeppe/go-internal/cmd/txtar-goproxy	[no test files]
+ok  	github.com/rogpeppe/go-internal/cmd/txtar-c	0.024s
 === RUN   TestScripts
 === RUN   TestScripts/extract-dir
 === PAUSE TestScripts/extract-dir
@@ -2275,9 +2312,9 @@
 === CONT  TestScripts/extract-stdin
 === CONT  TestScripts/extract-out-of-bounds
 === CONT  TestScripts/extract
-=== NAME  TestScripts/extract-dir
+=== NAME  TestScripts/extract-stdin
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main278507856/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main4062624314/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2288,14 +2325,15 @@
         exe=
         
         > unquote file.txtar
-        > txtar-x -C x/y file.txtar
-        > cmp x/y/foo expect/foo
-        > cmp x/y/a/b/bar expect/a/b/bar
+        > stdin file.txtar
+        > txtar-x
+        > cmp foo expect/foo
+        > cmp a/b/bar expect/a/b/bar
         PASS
         
-=== NAME  TestScripts/extract-stdin
+=== NAME  TestScripts/extract-dir
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main278507856/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main4062624314/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2306,15 +2344,14 @@
         exe=
         
         > unquote file.txtar
-        > stdin file.txtar
-        > txtar-x
-        > cmp foo expect/foo
-        > cmp a/b/bar expect/a/b/bar
+        > txtar-x -C x/y file.txtar
+        > cmp x/y/foo expect/foo
+        > cmp x/y/a/b/bar expect/a/b/bar
         PASS
         
 === NAME  TestScripts/extract
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main278507856/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main4062624314/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2332,7 +2369,7 @@
         
 === NAME  TestScripts/extract-out-of-bounds
     testscript.go:558: WORK=$WORK
-        PATH=/tmp/testscript-main278507856/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main4062624314/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2355,13 +2392,13 @@
         > stderr '"/foo": outside parent directory'
         PASS
         
---- PASS: TestScripts (0.12s)
-    --- PASS: TestScripts/extract-stdin (0.07s)
-    --- PASS: TestScripts/extract-dir (0.07s)
-    --- PASS: TestScripts/extract (0.07s)
-    --- PASS: TestScripts/extract-out-of-bounds (0.08s)
+--- PASS: TestScripts (0.00s)
+    --- PASS: TestScripts/extract-stdin (0.01s)
+    --- PASS: TestScripts/extract-dir (0.01s)
+    --- PASS: TestScripts/extract (0.01s)
+    --- PASS: TestScripts/extract-out-of-bounds (0.01s)
 PASS
-ok  	github.com/rogpeppe/go-internal/cmd/txtar-x	0.225s
+ok  	github.com/rogpeppe/go-internal/cmd/txtar-x	0.023s
 === RUN   Test
 === RUN   Test/allnew.txt
 === RUN   Test/allold.txt
@@ -2375,21 +2412,21 @@
 === RUN   Test/same.txt
 === RUN   Test/start.txt
 === RUN   Test/triv.txt
---- PASS: Test (0.09s)
-    --- PASS: Test/allnew.txt (0.02s)
-    --- PASS: Test/allold.txt (0.02s)
+--- PASS: Test (0.00s)
+    --- PASS: Test/allnew.txt (0.00s)
+    --- PASS: Test/allold.txt (0.00s)
     --- PASS: Test/basic.txt (0.00s)
     --- PASS: Test/dups.txt (0.00s)
     --- PASS: Test/end.txt (0.00s)
     --- PASS: Test/eof.txt (0.00s)
     --- PASS: Test/eof1.txt (0.00s)
     --- PASS: Test/eof2.txt (0.00s)
-    --- PASS: Test/long.txt (0.01s)
-    --- PASS: Test/same.txt (0.01s)
+    --- PASS: Test/long.txt (0.00s)
+    --- PASS: Test/same.txt (0.00s)
     --- PASS: Test/start.txt (0.00s)
     --- PASS: Test/triv.txt (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/diff	0.209s
+ok  	github.com/rogpeppe/go-internal/diff	0.006s
 === RUN   TestHash1
 --- PASS: TestHash1 (0.00s)
 === RUN   TestHashDir
@@ -2399,7 +2436,7 @@
 === RUN   TestDirFiles
 --- PASS: TestDirFiles (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/dirhash	0.145s
+ok  	github.com/rogpeppe/go-internal/dirhash	0.008s
 === RUN   TestCompare
 --- PASS: TestCompare (0.00s)
 === RUN   TestOrder
@@ -2407,13 +2444,13 @@
 === RUN   TestInterface
 --- PASS: TestInterface (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/fmtsort	0.014s
+ok  	github.com/rogpeppe/go-internal/fmtsort	0.005s
 === RUN   TestScripts
 === RUN   TestScripts/list
 === PAUSE TestScripts/list
 === CONT  TestScripts/list
     testscript.go:558: WORK=$WORK
-        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2428,7 +2465,7 @@
         GOOS=linux
         GOROOT=/usr/lib/go-1.23
         GOCACHE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/go-build
-        GOPROXY=http://127.0.0.1:44051/mod
+        GOPROXY=http://127.0.0.1:37647/mod
         goversion=1.23
         GONOSUMDB=*
         
@@ -2453,19 +2490,19 @@
         # as that places GOMODCACHE inside the Go module and "mod tidy" walks it.
         # "mod tidy" then complains about invalid import paths such as
         # "mod/gopath/pkg/mod/fruit.com@v1.1.0/fruit".
-        # It's for that reason that we moved the default GOPATH to ${WORK}/.gopath. (0.031s)
+        # It's for that reason that we moved the default GOPATH to ${WORK}/.gopath. (0.008s)
         > go mod tidy
         [stderr]
         go: warning: "all" matched no packages
         
         PASS
         
---- PASS: TestScripts (0.19s)
-    --- PASS: TestScripts/list (0.18s)
+--- PASS: TestScripts (0.08s)
+    --- PASS: TestScripts/list (0.07s)
 PASS
-ok  	github.com/rogpeppe/go-internal/goproxytest	0.405s
+ok  	github.com/rogpeppe/go-internal/goproxytest	0.159s
 === RUN   TestInitGoEnv
---- PASS: TestInitGoEnv (0.23s)
+--- PASS: TestInitGoEnv (0.09s)
 === RUN   TestSimple
 === RUN   TestSimple/cover
 === PAUSE TestSimple/cover
@@ -2477,7 +2514,7 @@
 === CONT  TestSimple/version
 === CONT  TestSimple/env
     testscript.go:558: WORK=$WORK
-        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2497,7 +2534,7 @@
         GOINTERNAL_MODULE=/build/reproducible-path/golang-github-rogpeppe-go-internal-1.12.0/_build/src/github.com/rogpeppe/go-internal
         
         # GOPATH and GOMODCACHE are not shared with the host,
-        # but GOCACHE is. (0.051s)
+        # but GOCACHE is. (0.016s)
         > go env
         [stdout]
         GO111MODULE=''
@@ -2542,7 +2579,7 @@
         CGO_FFLAGS='-O2 -g'
         CGO_LDFLAGS='-O2 -g'
         PKG_CONFIG='pkg-config'
-        GOGCCFLAGS='-fPIC -marm -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=$WORK/.tmp/go-build2682685992=/tmp/go-build -gno-record-gcc-switches'
+        GOGCCFLAGS='-fPIC -marm -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=$WORK/.tmp/go-build892996141=/tmp/go-build -gno-record-gcc-switches'
         
         > stdout GOPATH=.*${WORK@R}
         > stdout GOMODCACHE=.*${WORK@R}
@@ -2551,7 +2588,7 @@
         
 === NAME  TestSimple/version
     testscript.go:558: WORK=$WORK
-        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2582,7 +2619,7 @@
 === NAME  TestSimple/cover
     testscript.go:1163: 
     testscript.go:558: WORK=$WORK
-        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -2603,25 +2640,25 @@
         
         > unquote scripts/exec.txt
         # The module uses testscript itself.
-        # Use the checked out module, based on where the test binary ran. (1.367s)
+        # Use the checked out module, based on where the test binary ran. (0.269s)
         > go mod edit -replace=github.com/rogpeppe/go-internal=${GOINTERNAL_MODULE}
         > go mod tidy
         [stderr]
         go: found github.com/rogpeppe/go-internal/gotooltest in github.com/rogpeppe/go-internal v0.0.0-00010101000000-000000000000
         go: found github.com/rogpeppe/go-internal/testscript in github.com/rogpeppe/go-internal v0.0.0-00010101000000-000000000000
         go: github.com/rogpeppe/go-internal@v0.0.0-00010101000000-000000000000 requires
-        	golang.org/x/mod@v0.9.0: Get "https://proxy.golang.org/golang.org/x/mod/@v/v0.9.0.mod": dial tcp: lookup proxy.golang.org on [::1]:53: read udp [::1]:44217->[::1]:53: read: connection refused
+        	golang.org/x/mod@v0.9.0: Get "https://proxy.golang.org/golang.org/x/mod/@v/v0.9.0.mod": dial tcp: lookup proxy.golang.org on [::1]:53: read udp [::1]:34409->[::1]:53: read: connection refused
         
         [exit status 1]
         FAIL: testdata/cover.txt:6: unexpected go command failure
         SKIP: TestSimple/cover: Possible restricted network access
         
---- PASS: TestSimple (0.20s)
-    --- PASS: TestSimple/env (0.05s)
-    --- PASS: TestSimple/version (0.30s)
-    --- SKIP: TestSimple/cover (1.38s)
+--- PASS: TestSimple (0.08s)
+    --- PASS: TestSimple/env (0.02s)
+    --- PASS: TestSimple/version (0.10s)
+    --- SKIP: TestSimple/cover (0.27s)
 PASS
-ok  	github.com/rogpeppe/go-internal/gotooltest	1.836s
+ok  	github.com/rogpeppe/go-internal/gotooltest	0.449s
 === RUN   TestReadImports
 --- PASS: TestReadImports (0.00s)
 === RUN   TestReadComments
@@ -2633,9 +2670,12 @@
 === RUN   TestScan
 --- PASS: TestScan (0.00s)
 === RUN   TestScanStar
---- PASS: TestScanStar (0.01s)
+--- PASS: TestScanStar (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/imports	0.039s
+ok  	github.com/rogpeppe/go-internal/imports	0.007s
+?   	github.com/rogpeppe/go-internal/internal/os/execpath	[no test files]
+?   	github.com/rogpeppe/go-internal/internal/syscall/windows	[no test files]
+?   	github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll	[no test files]
 === RUN   TestAlmostEqual
 === PAUSE TestAlmostEqual
 === CONT  TestAlmostEqual
@@ -2653,7 +2693,7 @@
 === RUN   FuzzAlmostEqual/5bd9cd4e8c887808
 === RUN   FuzzAlmostEqual/b323cef1fc26e507
 === RUN   FuzzAlmostEqual/c6edde4256d6f5eb
---- PASS: FuzzAlmostEqual (0.01s)
+--- PASS: FuzzAlmostEqual (0.00s)
     --- PASS: FuzzAlmostEqual/seed#0 (0.00s)
     --- PASS: FuzzAlmostEqual/seed#1 (0.00s)
     --- PASS: FuzzAlmostEqual/seed#2 (0.00s)
@@ -2667,14 +2707,13 @@
     --- PASS: FuzzAlmostEqual/b323cef1fc26e507 (0.00s)
     --- PASS: FuzzAlmostEqual/c6edde4256d6f5eb (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/internal/misspell	0.019s
-?   	github.com/rogpeppe/go-internal/internal/os/execpath	[no test files]
-?   	github.com/rogpeppe/go-internal/internal/syscall/windows	[no test files]
-?   	github.com/rogpeppe/go-internal/internal/syscall/windows/sysdll	[no test files]
+ok  	github.com/rogpeppe/go-internal/internal/misspell	0.013s
 ?   	github.com/rogpeppe/go-internal/modfile	[no test files]
 ?   	github.com/rogpeppe/go-internal/module	[no test files]
 ?   	github.com/rogpeppe/go-internal/renameio	[no test files]
 ?   	github.com/rogpeppe/go-internal/robustio	[no test files]
+?   	github.com/rogpeppe/go-internal/semver	[no test files]
+?   	github.com/rogpeppe/go-internal/testenv	[no test files]
 === RUN   TestMutexExcludes
 === PAUSE TestMutexExcludes
 === RUN   TestReadWaitsForLock
@@ -2682,28 +2721,29 @@
 === RUN   TestCanLockExistingFile
 === PAUSE TestCanLockExistingFile
 === RUN   TestSpuriousEDEADLK
---- PASS: TestSpuriousEDEADLK (0.06s)
+--- PASS: TestSpuriousEDEADLK (0.02s)
 === RUN   TestTransform
---- PASS: TestTransform (2.18s)
+--- PASS: TestTransform (0.73s)
 === CONT  TestMutexExcludes
+=== CONT  TestCanLockExistingFile
+=== NAME  TestMutexExcludes
     lockedfile_test.go:85: mu := MutexAt(_)
     lockedfile_test.go:91: unlock, _  := mu.Lock()
     lockedfile_test.go:94: mu2 := MutexAt(mu.Path)
-=== CONT  TestCanLockExistingFile
 === CONT  TestReadWaitsForLock
     lockedfile_test.go:134: WriteString("part 1\n") = <nil>
 === NAME  TestMutexExcludes
     lockedfile_test.go:107: unlock()
     lockedfile_test.go:102: unlock2, _ := mu2.Lock()
     lockedfile_test.go:103: unlock2()
+--- PASS: TestCanLockExistingFile (0.01s)
+--- PASS: TestMutexExcludes (0.01s)
 === NAME  TestReadWaitsForLock
     lockedfile_test.go:156: WriteString("part 2\n") = <nil>
     lockedfile_test.go:146: Read(_) = "part 1\npart 2\n"
---- PASS: TestCanLockExistingFile (0.02s)
 --- PASS: TestReadWaitsForLock (0.02s)
---- PASS: TestMutexExcludes (0.02s)
 PASS
-ok  	github.com/rogpeppe/go-internal/lockedfile	2.298s
+ok  	github.com/rogpeppe/go-internal/lockedfile	0.784s
 === RUN   TestLockExcludesLock
 === PAUSE TestLockExcludesLock
 === RUN   TestLockExcludesRLock
@@ -2711,47 +2751,49 @@
 === RUN   TestRLockExcludesOnlyLock
 === PAUSE TestRLockExcludesOnlyLock
 === RUN   TestLockNotDroppedByExecCommand
-    filelock_test.go:188: fd 6 = /tmp/TestLockNotDroppedByExecCommand2437697398
+    filelock_test.go:188: fd 6 = /tmp/TestLockNotDroppedByExecCommand774657468
     filelock_test.go:191: Lock(fd 6) = <nil>
-    filelock_test.go:193: fd 7 = os.Open("/tmp/TestLockNotDroppedByExecCommand2437697398")
+    filelock_test.go:193: fd 7 = os.Open("/tmp/TestLockNotDroppedByExecCommand774657468")
     filelock_test.go:204: Lock(fd 7) is blocked (as expected)
     filelock_test.go:205: Unlock(fd 6) = <nil>
     asm_arm.s:884: Lock(fd 7) = <nil>
     filelock_test.go:207: Unlock(fd 7) = <nil>
---- PASS: TestLockNotDroppedByExecCommand (0.04s)
+--- PASS: TestLockNotDroppedByExecCommand (0.01s)
 === CONT  TestLockExcludesLock
-    filelock_test.go:121: fd 6 = /tmp/TestLockExcludesLock1188456818
-    filelock_test.go:124: fd 7 = os.Open("/tmp/TestLockExcludesLock1188456818")
-    filelock_test.go:127: Lock(fd 6) = <nil>
 === CONT  TestRLockExcludesOnlyLock
-    filelock_test.go:153: fd 8 = /tmp/TestRLockExcludesOnlyLock397345974
-    filelock_test.go:155: RLock(fd 8) = <nil>
-    filelock_test.go:157: fd 9 = os.Open("/tmp/TestRLockExcludesOnlyLock397345974")
+=== NAME  TestLockExcludesLock
+    filelock_test.go:121: fd 6 = /tmp/TestLockExcludesLock2133815959
+    filelock_test.go:124: fd 8 = os.Open("/tmp/TestLockExcludesLock2133815959")
+=== NAME  TestRLockExcludesOnlyLock
+    filelock_test.go:153: fd 7 = /tmp/TestRLockExcludesOnlyLock1589466011
+=== NAME  TestLockExcludesLock
+    filelock_test.go:127: Lock(fd 6) = <nil>
+=== NAME  TestRLockExcludesOnlyLock
+    filelock_test.go:155: RLock(fd 7) = <nil>
+    filelock_test.go:157: fd 9 = os.Open("/tmp/TestRLockExcludesOnlyLock1589466011")
     filelock_test.go:171: RLock(fd 9) = <nil>
-    filelock_test.go:175: fd 10 = os.Open("/tmp/TestRLockExcludesOnlyLock397345974")
+    filelock_test.go:175: fd 10 = os.Open("/tmp/TestRLockExcludesOnlyLock1589466011")
 === CONT  TestLockExcludesRLock
-    filelock_test.go:137: fd 11 = /tmp/TestLockExcludesRLock2156597344
-    filelock_test.go:140: fd 12 = os.Open("/tmp/TestLockExcludesRLock2156597344")
+    filelock_test.go:137: fd 11 = /tmp/TestLockExcludesRLock765876232
+    filelock_test.go:140: fd 12 = os.Open("/tmp/TestLockExcludesRLock765876232")
     filelock_test.go:143: Lock(fd 11) = <nil>
 === NAME  TestLockExcludesLock
-    filelock_test.go:128: Lock(fd 7) is blocked (as expected)
+    filelock_test.go:128: Lock(fd 8) is blocked (as expected)
     filelock_test.go:129: Unlock(fd 6) = <nil>
+    asm_arm.s:884: Lock(fd 8) = <nil>
+    filelock_test.go:131: Unlock(fd 8) = <nil>
 === NAME  TestRLockExcludesOnlyLock
     filelock_test.go:177: Lock(fd 10) is blocked (as expected)
-=== NAME  TestLockExcludesLock
-    asm_arm.s:884: Lock(fd 7) = <nil>
-=== NAME  TestRLockExcludesOnlyLock
     filelock_test.go:179: Unlock(fd 9) = <nil>
-=== NAME  TestLockExcludesLock
-    filelock_test.go:131: Unlock(fd 7) = <nil>
-=== NAME  TestRLockExcludesOnlyLock
-    filelock_test.go:181: Unlock(fd 8) = <nil>
+    filelock_test.go:181: Unlock(fd 7) = <nil>
 --- PASS: TestLockExcludesLock (0.01s)
 === NAME  TestLockExcludesRLock
     filelock_test.go:144: RLock(fd 12) is blocked (as expected)
-    filelock_test.go:145: Unlock(fd 11) = <nil>
 === NAME  TestRLockExcludesOnlyLock
     asm_arm.s:884: Lock(fd 10) = <nil>
+=== NAME  TestLockExcludesRLock
+    filelock_test.go:145: Unlock(fd 11) = <nil>
+=== NAME  TestRLockExcludesOnlyLock
     filelock_test.go:184: Unlock(fd 10) = <nil>
 --- PASS: TestRLockExcludesOnlyLock (0.01s)
 === NAME  TestLockExcludesRLock
@@ -2759,17 +2801,15 @@
     filelock_test.go:147: Unlock(fd 12) = <nil>
 --- PASS: TestLockExcludesRLock (0.01s)
 PASS
-ok  	github.com/rogpeppe/go-internal/lockedfile/internal/filelock	0.106s
+ok  	github.com/rogpeppe/go-internal/lockedfile/internal/filelock	0.032s
 === RUN   TestWork
---- PASS: TestWork (0.09s)
+--- PASS: TestWork (0.04s)
 === RUN   TestWorkParallel
 --- PASS: TestWorkParallel (0.00s)
 === RUN   TestCache
 --- PASS: TestCache (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/par	0.140s
-?   	github.com/rogpeppe/go-internal/semver	[no test files]
-?   	github.com/rogpeppe/go-internal/testenv	[no test files]
+ok  	github.com/rogpeppe/go-internal/par	0.046s
 ?   	github.com/rogpeppe/go-internal/testscript/internal/pty	[no test files]
 === RUN   TestCRLFInput
 === RUN   TestCRLFInput/_
@@ -2857,36 +2897,8 @@
 === PAUSE TestScripts/wait
 === CONT  TestScripts/big_diff
 === CONT  TestScripts/readfile
+=== CONT  TestScripts/exec_path_change
 === CONT  TestScripts/testscript_stdout_stderr_error
-=== CONT  TestScripts/pty
-    testscript.go:558: > [!linux] [!darwin] skip
-        > [darwin] skip # https://go.dev/issue/61779
-        > ttyin secretwords.txt
-        > terminalprompt
-        > ttyout 'magic words'
-        > ! stderr .
-        > ! stdout .
-        PASS
-        
-=== NAME  TestScripts/readfile
-    testscript.go:558: > fprintargs stdout stdout
-        [stdout]
-        stdout
-        > testreadfile stdout
-        > fprintargs stderr stderr
-        [stderr]
-        stderr
-        > testreadfile stderr
-        > testreadfile x/somefile
-        PASS
-        
-=== CONT  TestScripts/wait
-=== CONT  TestScripts/values
-    testscript.go:558: > test-values
-        PASS
-        
-=== CONT  TestScripts/testscript_update_script_stderr
-=== NAME  TestScripts/testscript_stdout_stderr_error
     testscript.go:558: # Verify that stdout and stderr get set event when a user-builtin
         # command aborts. Note that we need to assert against stdout
         # because our meta testscript command sees only a single log. (0.000s)
@@ -2906,7 +2918,7 @@
         > cmpenv stdout stdout.golden
         PASS
         
-=== CONT  TestScripts/testscript_update_script_quote
+=== CONT  TestScripts/evalsymlink
 === NAME  TestScripts/big_diff
     testscript.go:558: # Verify the behaviour of cmp in the case of a diff between two
         # large files (with a large diff) (0.000s)
@@ -4975,7 +4987,7 @@
         
         > env
         WORK=$WORK
-        PATH=/tmp/testscript-main275314452/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main4108876493/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -4988,122 +5000,116 @@
         > cmpenv stdout stdout.golden
         PASS
         
-=== CONT  TestScripts/testscript_update_script_expected_not_in_archive
-=== NAME  TestScripts/testscript_update_script_stderr
-    testscript.go:558: > unquote scripts/testscript.txt
-        > unquote testscript-new.txt
-        > testscript -update scripts
+=== CONT  TestScripts/defer
+    testscript.go:558: > testdefer
+        > testdefer
+        > testdefer
+        PASS
+        
+=== CONT  TestScripts/cpstdout
+=== NAME  TestScripts/readfile
+    testscript.go:558: > fprintargs stdout stdout
         [stdout]
+        stdout
+        > testreadfile stdout
+        > fprintargs stderr stderr
+        [stderr]
+        stderr
+        > testreadfile stderr
+        > testreadfile x/somefile
         PASS
-        $WORK/scripts/testscript.txt updated
         
-        > cmp scripts/testscript.txt testscript-new.txt
+=== CONT  TestScripts/cond
+    testscript.go:558: # test that exactly one of gc and gccgo is set (0.000s)
+        > [gc] mkdir gc_true
+        > [gccgo] mkdir gccgo_true
+        > [gc] ! exists gccgo_true
+        > [!gc] exists gccgo_true
+        > [gccgo] ! exists gc_true
+        > [!gccgo] exists gc_true
+        # test that go version build tags are set (0.000s)
+        > [go1.1] mkdir go1.x
+        > [go2.1] mkdir go2.x
+        > exists go1.x
+        > ! exists go2.x
+        # unix should be true on Linux and MacOS, but not on Windows.
+        # Both platforms are tested on CI. (0.000s)
+        > [unix] mkdir unix_true
+        > [linux] exists unix_true
+        > [darwin] exists unix_true
+        > [windows] ! exists unix_true
         PASS
         
-=== CONT  TestScripts/testscript_update_script_actual_is_file
-=== NAME  TestScripts/testscript_update_script_expected_not_in_archive
-    testscript.go:558: # Verify that comparing stdout against a file not in the archive does nothing (0.000s)
-        > unquote scripts/testscript.txt
-        > cp scripts/testscript.txt unchanged
-        > ! testscript -update scripts
+=== CONT  TestScripts/commandstatus
+=== NAME  TestScripts/evalsymlink
+    testscript.go:558: # If ioutil.TempDir returns a sym linked dir (default behaviour in macOS for example) the
+        # matcher will have problems with external programs that uses the real path.
+        # This script tests that $WORK is matched in a consistent way (also see #79). (0.000s)
+        > [windows] skip
+        > exec pwd
         [stdout]
-        > fprintargs stdout right
+        $WORK
+        > stdout ^$WORK$
+        > exec pwd -P
         [stdout]
-        right
-        > cp file expect
-        > cmp stdout expect
-        diff stdout expect
-        --- stdout
-        +++ expect
-        @@ -1,1 +1,1 @@
-        -right
-        +wrong
-        
-        FAIL: $WORK/scripts/testscript.txt:3: stdout and expect differ
-        
-        > cmp scripts/testscript.txt unchanged
+        $WORK
+        > stdout ^$WORK$
         PASS
         
-=== CONT  TestScripts/testscript_update_script
-=== NAME  TestScripts/testscript_update_script_actual_is_file
-    testscript.go:558: > unquote scripts/testscript.txt
-        > unquote testscript-new.txt
-        > testscript -update scripts
+=== CONT  TestScripts/command
+=== NAME  TestScripts/cpstdout
+    testscript.go:558: > [!exec:cat] stop
+        # hello world (0.000s)
+        > exec cat hello.text
         [stdout]
+        hello world
+        > cp stdout got
+        > cmp got hello.text
+        > ! cmp got different.text
+        > exists got
+        > mv got new
+        > ! exists got
+        > cmp new hello.text
         PASS
-        $WORK/scripts/testscript.txt updated
         
-        > cmp scripts/testscript.txt testscript-new.txt
+=== CONT  TestScripts/cmpenv
+    testscript.go:558: > env $=$
+        > cmpenv file1 file2
         PASS
         
-=== CONT  TestScripts/testscript_notfound
-=== NAME  TestScripts/testscript_update_script_quote
-    testscript.go:558: > unquote scripts/testscript.txt
-        > unquote testscript-new.txt
-        > testscript -update scripts
+=== CONT  TestScripts/cmd_stdout_stderr
+=== NAME  TestScripts/command
+    testscript.go:558: > printargs a b 'c d'
         [stdout]
+        ["printargs" "a" "b" "c d"]
+        > stdout '\["printargs" "a" "b" "c d"\]\n'
         PASS
-        $WORK/scripts/testscript.txt updated
         
-        > cmp scripts/testscript.txt testscript-new.txt
+=== CONT  TestScripts/testscript_duplicate_name
+    testscript.go:558: # Check that RequireUniqueNames works;
+        # it should reject txtar archives with duplicate names as defined by the host system. (0.000s)
+        > unquote scripts-normalized/testscript.txt
+        > testscript scripts-normalized
+        [stdout]
         PASS
         
-=== CONT  TestScripts/testscript_logging
-=== NAME  TestScripts/wait
-    testscript.go:558: > [!exec:echo] skip
-        > [!exec:false] skip
-        # TODO: the '\n' below doesn't work on Windows on Github Actions, which does
-        # have coreutils like "echo" installed. Perhaps they emit CRLF? (0.000s)
-        > [windows] skip
-        > exec echo foo
-        [stdout]
-        foo
-        > stdout foo
-        > exec echo foo &
-        > exec echo bar &
-        > ! exec false &
-        # Starting a background process should clear previous output. (0.000s)
-        > ! stdout foo
-        # Wait should set the output to the concatenated outputs of the background
-        # programs, in the order in which they were started. (0.000s)
-        > wait
-        [background] echo foo: exit status 0
-        [stdout]
-        foo
-        [background] echo bar: exit status 0
-        [stdout]
-        bar
-        [background] false: exit status 1
-        > stdout 'foo\nbar'
-        > exec echo bg1 &b1&
-        > exec echo bg2 &b2&
-        > exec echo bg3 &b3&
-        > exec echo bg4 &b4&
-        > wait b3
-        [stdout]
-        bg3
-        > stdout bg3
-        > wait b2
-        [stdout]
-        bg2
-        > stdout bg2
-        > wait
-        [background] echo bg1: exit status 0
-        [stdout]
-        bg1
-        [background] echo bg4: exit status 0
+        > ! testscript -unique-names scripts-normalized
         [stdout]
-        bg4
-        > stdout 'bg1\nbg4'
-        # We should be able to start several background processes and wait for them
-        # individually.
-        # The end of the test should interrupt or kill any remaining background
-        # programs. (0.000s)
-        > [!exec:sleep] skip
-        > ! exec sleep 86400 &
-        [background] sleep 86400: signal: interrupt
+        FAIL: $WORK/scripts-normalized/testscript.txt:0: dir/../file would overwrite $WORK/file (because RequireUniqueNames is enabled)
+        
+        > stdout '.* would overwrite .* \(because RequireUniqueNames is enabled\)'
         PASS
         
+=== CONT  TestScripts/testscript_notfound
+=== NAME  TestScripts/commandstatus
+    testscript.go:558: > ! status 1
+        [exit status 1]
+        > ! status 2
+        [exit status 2]
+        > status 0
+        PASS
+        
+=== CONT  TestScripts/testscript_logging
 === NAME  TestScripts/testscript_notfound
     testscript.go:558: # Check that unknown commands output a useful error message (0.000s)
         > ! testscript notfound
@@ -5127,58 +5133,6 @@
         PASS
         
 === CONT  TestScripts/testscript_explicit_exec
-=== CONT  TestScripts/testscript_duplicate_name
-=== NAME  TestScripts/testscript_update_script
-    testscript.go:558: # Check that we support both txt and txtar extensions. (0.000s)
-        > unquote scripts/testscript.txt
-        > unquote testscript-new.txt
-        > cp scripts/testscript.txt scripts/testscript2.txtar
-        > testscript -update scripts
-        [stdout]
-        PASS
-        $WORK/scripts/testscript.txt updated
-        PASS
-        $WORK/scripts/testscript2.txtar updated
-        
-        > cmp scripts/testscript.txt testscript-new.txt
-        > cmp scripts/testscript2.txtar testscript-new.txt
-        PASS
-        
-=== CONT  TestScripts/stdin
-=== NAME  TestScripts/testscript_duplicate_name
-    testscript.go:558: # Check that RequireUniqueNames works;
-        # it should reject txtar archives with duplicate names as defined by the host system. (0.000s)
-        > unquote scripts-normalized/testscript.txt
-        > testscript scripts-normalized
-        [stdout]
-        PASS
-        
-        > ! testscript -unique-names scripts-normalized
-        [stdout]
-        FAIL: $WORK/scripts-normalized/testscript.txt:0: dir/../file would overwrite $WORK/file (because RequireUniqueNames is enabled)
-        
-        > stdout '.* would overwrite .* \(because RequireUniqueNames is enabled\)'
-        PASS
-        
-=== CONT  TestScripts/setupfiles
-    testscript.go:558: # check that the Setup function saw the unarchived files,
-        # including the temp directory that's always created. (0.000s)
-        > setup-filenames .tmp a b
-        PASS
-        
-=== CONT  TestScripts/setenv
-    testscript.go:558: > setSpecialVal
-        > exists $SPECIALVAL.txt
-        > ensureSpecialVal
-        PASS
-        
-=== CONT  TestScripts/regexpquote
-    testscript.go:558: > env XXX='hello)'
-        > grep ^${XXX@R}$ file.txt
-        PASS
-        
-=== CONT  TestScripts/evalsymlink
-=== NAME  TestScripts/testscript_explicit_exec
     testscript.go:558: # Check that RequireExplicitExec works;
         # it should reject `fprintargs` in favor of `exec fprintargs`,
         # but it shouldn't complain about `some-param-cmd`,
@@ -5204,11 +5158,83 @@
         
         PASS
         
-=== CONT  TestScripts/nothing
-    testscript.go:558: # Intentionally blank file, used to test that -testwork doesn't remove the work directory  (0.000s)
+=== CONT  TestScripts/setupfiles
+    testscript.go:558: # check that the Setup function saw the unarchived files,
+        # including the temp directory that's always created. (0.000s)
+        > setup-filenames .tmp a b
+        PASS
+        
+=== CONT  TestScripts/stdin
+=== NAME  TestScripts/cmd_stdout_stderr
+    testscript.go:558: # Verify that when we don't update stdout when we don't attempt to write via Stdout() (0.000s)
+        > fprintargs stdout hello stdout from fprintargs
+        [stdout]
+        hello stdout from fprintargs
+        > stdout 'hello stdout from fprintargs'
+        > echoandexit 0
+        > stdout 'hello stdout from fprintargs'
+        # Verify that when we don't update stderr when we don't attempt to write via Stderr() (0.000s)
+        > fprintargs stderr hello stderr from fprintargs
+        [stderr]
+        hello stderr from fprintargs
+        > stderr 'hello stderr from fprintargs'
+        > echoandexit 0
+        > stderr 'hello stderr from fprintargs'
+        # Verify that we do update stdout when we attempt to write via Stdout() or Stderr() (0.000s)
+        > fprintargs stdout hello stdout from fprintargs
+        [stdout]
+        hello stdout from fprintargs
+        > stdout 'hello stdout from fprintargs'
+        > ! stderr .+
+        > echoandexit 0 'hello stdout from echoandexit'
+        [stdout]
+        hello stdout from echoandexit
+        > stdout 'hello stdout from echoandexit'
+        > ! stderr .+
+        > fprintargs stdout hello stdout from fprintargs
+        [stdout]
+        hello stdout from fprintargs
+        > stdout 'hello stdout from fprintargs'
+        > ! stderr .+
+        > echoandexit 0 '' 'hello stderr from echoandexit'
+        [stderr]
+        hello stderr from echoandexit
+        > ! stdout .+
+        > stderr 'hello stderr from echoandexit'
+        # Verify that we do update stderr when we attempt to write via Stdout() or Stderr() (0.000s)
+        > fprintargs stderr hello stderr from fprintargs
+        [stderr]
+        hello stderr from fprintargs
+        > ! stdout .+
+        > stderr 'hello stderr from fprintargs'
+        > echoandexit 0 'hello stdout from echoandexit'
+        [stdout]
+        hello stdout from echoandexit
+        > stdout 'hello stdout from echoandexit'
+        > ! stderr .+
+        > fprintargs stdout hello stdout from fprintargs
+        [stdout]
+        hello stdout from fprintargs
+        > stdout 'hello stdout from fprintargs'
+        > ! stderr .+
+        > echoandexit 0 '' 'hello stderr from echoandexit'
+        [stderr]
+        hello stderr from echoandexit
+        > ! stdout .+
+        > stderr 'hello stderr from echoandexit'
+        PASS
+        
+=== CONT  TestScripts/testscript_update_script_quote
+    testscript.go:558: > unquote scripts/testscript.txt
+        > unquote testscript-new.txt
+        > testscript -update scripts
+        [stdout]
+        PASS
+        $WORK/scripts/testscript.txt updated
+        
+        > cmp scripts/testscript.txt testscript-new.txt
         PASS
         
-=== CONT  TestScripts/long_diff
 === NAME  TestScripts/stdin
     testscript.go:558: > [!exec:cat] skip
         > stdin hello.txt
@@ -5233,23 +5259,113 @@
         > stdout hello
         PASS
         
+=== CONT  TestScripts/wait
+=== CONT  TestScripts/values
+    testscript.go:558: > test-values
+        PASS
+        
+=== CONT  TestScripts/testscript_update_script_stderr
+    testscript.go:558: > unquote scripts/testscript.txt
+        > unquote testscript-new.txt
+        > testscript -update scripts
+        [stdout]
+        PASS
+        $WORK/scripts/testscript.txt updated
+        
+        > cmp scripts/testscript.txt testscript-new.txt
+        PASS
+        
+=== CONT  TestScripts/setenv
+    testscript.go:558: > setSpecialVal
+        > exists $SPECIALVAL.txt
+        > ensureSpecialVal
+        PASS
+        
 === CONT  TestScripts/interrupt
-=== NAME  TestScripts/evalsymlink
-    testscript.go:558: # If ioutil.TempDir returns a sym linked dir (default behaviour in macOS for example) the
-        # matcher will have problems with external programs that uses the real path.
-        # This script tests that $WORK is matched in a consistent way (also see #79). (0.000s)
+=== NAME  TestScripts/wait
+    testscript.go:558: > [!exec:echo] skip
+        > [!exec:false] skip
+        # TODO: the '\n' below doesn't work on Windows on Github Actions, which does
+        # have coreutils like "echo" installed. Perhaps they emit CRLF? (0.000s)
         > [windows] skip
-        > exec pwd
+        > exec echo foo
         [stdout]
-        $WORK
-        > stdout ^$WORK$
-        > exec pwd -P
+        foo
+        > stdout foo
+        > exec echo foo &
+        > exec echo bar &
+        > ! exec false &
+        # Starting a background process should clear previous output. (0.000s)
+        > ! stdout foo
+        # Wait should set the output to the concatenated outputs of the background
+        # programs, in the order in which they were started. (0.000s)
+        > wait
+        [background] echo foo: exit status 0
         [stdout]
-        $WORK
-        > stdout ^$WORK$
+        foo
+        [background] echo bar: exit status 0
+        [stdout]
+        bar
+        [background] false: exit status 1
+        > stdout 'foo\nbar'
+        > exec echo bg1 &b1&
+        > exec echo bg2 &b2&
+        > exec echo bg3 &b3&
+        > exec echo bg4 &b4&
+        > wait b3
+        [stdout]
+        bg3
+        > stdout bg3
+        > wait b2
+        [stdout]
+        bg2
+        > stdout bg2
+        > wait
+        [background] echo bg1: exit status 0
+        [stdout]
+        bg1
+        [background] echo bg4: exit status 0
+        [stdout]
+        bg4
+        > stdout 'bg1\nbg4'
+        # We should be able to start several background processes and wait for them
+        # individually.
+        # The end of the test should interrupt or kill any remaining background
+        # programs. (0.000s)
+        > [!exec:sleep] skip
+        > ! exec sleep 86400 &
+        [background] sleep 86400: signal: interrupt
         PASS
         
-=== CONT  TestScripts/hello
+=== CONT  TestScripts/pty
+=== NAME  TestScripts/interrupt
+    testscript.go:558: > [windows] skip
+        > signalcatcher &
+        > waitfile catchsignal
+        > interrupt
+        > wait
+        [background] signalcatcher: exit status 0
+        [stdout]
+        caught interrupt
+        > stdout 'caught interrupt'
+        PASS
+        
+=== CONT  TestScripts/nothing
+    testscript.go:558: # Intentionally blank file, used to test that -testwork doesn't remove the work directory  (0.000s)
+        PASS
+        
+=== CONT  TestScripts/long_diff
+=== NAME  TestScripts/pty
+    testscript.go:558: > [!linux] [!darwin] skip
+        > [darwin] skip # https://go.dev/issue/61779
+        > ttyin secretwords.txt
+        > terminalprompt
+        > ttyout 'magic words'
+        > ! stderr .
+        > ! stdout .
+        PASS
+        
+=== CONT  TestScripts/testscript_update_script_actual_is_file
 === NAME  TestScripts/long_diff
     testscript.go:558: # Verify the behaviour of cmp in the case of a small diff between
         # two large files (0.000s)
@@ -5271,7 +5387,7 @@
         
         > env
         WORK=$WORK
-        PATH=/tmp/testscript-main275314452/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+        PATH=/tmp/testscript-main4108876493/bin:/usr/lib/go-1.23/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
         GOTRACEBACK=system
         HOME=/no-home
         TMPDIR=$WORK/.tmp
@@ -5284,31 +5400,19 @@
         > cmpenv stdout stdout.golden
         PASS
         
-=== CONT  TestScripts/exists
-=== NAME  TestScripts/interrupt
-    testscript.go:558: > [windows] skip
-        > signalcatcher &
-        > waitfile catchsignal
-        > interrupt
-        > wait
-        [background] signalcatcher: exit status 0
+=== NAME  TestScripts/testscript_update_script_actual_is_file
+    testscript.go:558: > unquote scripts/testscript.txt
+        > unquote testscript-new.txt
+        > testscript -update scripts
         [stdout]
-        caught interrupt
-        > stdout 'caught interrupt'
         PASS
+        $WORK/scripts/testscript.txt updated
         
-=== CONT  TestScripts/execguard
-=== NAME  TestScripts/hello
-    testscript.go:558: > [!exec:cat] stop
-        # hello world (0.000s)
-        > exec cat hello.text
-        [stdout]
-        hello world
-        > stdout 'hello world\n'
-        > ! stderr .
+        > cmp scripts/testscript.txt testscript-new.txt
         PASS
         
-=== CONT  TestScripts/exec_path_change
+=== CONT  TestScripts/exists
+=== CONT  TestScripts/testscript_update_script_expected_not_in_archive
 === NAME  TestScripts/exists
     testscript.go:558: > chmod 444 foo_r
         > exists foo
@@ -5319,77 +5423,68 @@
         > exists -readonly foo_r
         PASS
         
-=== NAME  TestScripts/execguard
-    testscript.go:558: > [exec:nosuchcommand] exec nosuchcommand
-        > [!exec:cat] stop
-        > exec cat foo
-        [stdout]
-        foo
-        > stdout 'foo\n'
-        PASS
-        
-=== CONT  TestScripts/commandstatus
-=== CONT  TestScripts/defer
-    testscript.go:558: > testdefer
-        > testdefer
-        > testdefer
-        PASS
-        
-=== CONT  TestScripts/cpstdout
+=== CONT  TestScripts/hello
     testscript.go:558: > [!exec:cat] stop
         # hello world (0.000s)
         > exec cat hello.text
         [stdout]
         hello world
-        > cp stdout got
-        > cmp got hello.text
-        > ! cmp got different.text
-        > exists got
-        > mv got new
-        > ! exists got
-        > cmp new hello.text
+        > stdout 'hello world\n'
+        > ! stderr .
         PASS
         
-=== CONT  TestScripts/cond
-    testscript.go:558: # test that exactly one of gc and gccgo is set (0.000s)
-        > [gc] mkdir gc_true
-        > [gccgo] mkdir gccgo_true
-        > [gc] ! exists gccgo_true
-        > [!gc] exists gccgo_true
-        > [gccgo] ! exists gc_true
-        > [!gccgo] exists gc_true
-        # test that go version build tags are set (0.000s)
-        > [go1.1] mkdir go1.x
-        > [go2.1] mkdir go2.x
-        > exists go1.x
-        > ! exists go2.x
-        # unix should be true on Linux and MacOS, but not on Windows.
-        # Both platforms are tested on CI. (0.000s)
-        > [unix] mkdir unix_true
-        > [linux] exists unix_true
-        > [darwin] exists unix_true
-        > [windows] ! exists unix_true
+=== CONT  TestScripts/testscript_update_script
+=== NAME  TestScripts/testscript_update_script_expected_not_in_archive
+    testscript.go:558: # Verify that comparing stdout against a file not in the archive does nothing (0.000s)
+        > unquote scripts/testscript.txt
+        > cp scripts/testscript.txt unchanged
+        > ! testscript -update scripts
+        [stdout]
+        > fprintargs stdout right
+        [stdout]
+        right
+        > cp file expect
+        > cmp stdout expect
+        diff stdout expect
+        --- stdout
+        +++ expect
+        @@ -1,1 +1,1 @@
+        -right
+        +wrong
+        
+        FAIL: $WORK/scripts/testscript.txt:3: stdout and expect differ
+        
+        > cmp scripts/testscript.txt unchanged
         PASS
         
-=== CONT  TestScripts/cmpenv
-    testscript.go:558: > env $=$
-        > cmpenv file1 file2
+=== CONT  TestScripts/regexpquote
+    testscript.go:558: > env XXX='hello)'
+        > grep ^${XXX@R}$ file.txt
         PASS
         
-=== CONT  TestScripts/command
-    testscript.go:558: > printargs a b 'c d'
+=== CONT  TestScripts/execguard
+    testscript.go:558: > [exec:nosuchcommand] exec nosuchcommand
+        > [!exec:cat] stop
+        > exec cat foo
         [stdout]
-        ["printargs" "a" "b" "c d"]
-        > stdout '\["printargs" "a" "b" "c d"\]\n'
+        foo
+        > stdout 'foo\n'
         PASS
         
-=== CONT  TestScripts/cmd_stdout_stderr
-=== NAME  TestScripts/commandstatus
-    testscript.go:558: > ! status 1
-        [exit status 1]
-        > ! status 2
-        [exit status 2]
-        > status 0
+=== NAME  TestScripts/testscript_update_script
+    testscript.go:558: # Check that we support both txt and txtar extensions. (0.000s)
+        > unquote scripts/testscript.txt
+        > unquote testscript-new.txt
+        > cp scripts/testscript.txt scripts/testscript2.txtar
+        > testscript -update scripts
+        [stdout]
+        PASS
+        $WORK/scripts/testscript.txt updated
+        PASS
+        $WORK/scripts/testscript2.txtar updated
+        
+        > cmp scripts/testscript.txt testscript-new.txt
+        > cmp scripts/testscript2.txtar testscript-new.txt
         PASS
         
 === NAME  TestScripts/testscript_logging
@@ -5485,65 +5580,6 @@
         > cmpenv stdout expect-stdout-vc.txt
         PASS
         
-=== NAME  TestScripts/cmd_stdout_stderr
-    testscript.go:558: # Verify that when we don't update stdout when we don't attempt to write via Stdout() (0.000s)
-        > fprintargs stdout hello stdout from fprintargs
-        [stdout]
-        hello stdout from fprintargs
-        > stdout 'hello stdout from fprintargs'
-        > echoandexit 0
-        > stdout 'hello stdout from fprintargs'
-        # Verify that when we don't update stderr when we don't attempt to write via Stderr() (0.000s)
-        > fprintargs stderr hello stderr from fprintargs
-        [stderr]
-        hello stderr from fprintargs
-        > stderr 'hello stderr from fprintargs'
-        > echoandexit 0
-        > stderr 'hello stderr from fprintargs'
-        # Verify that we do update stdout when we attempt to write via Stdout() or Stderr() (0.000s)
-        > fprintargs stdout hello stdout from fprintargs
-        [stdout]
-        hello stdout from fprintargs
-        > stdout 'hello stdout from fprintargs'
-        > ! stderr .+
-        > echoandexit 0 'hello stdout from echoandexit'
-        [stdout]
-        hello stdout from echoandexit
-        > stdout 'hello stdout from echoandexit'
-        > ! stderr .+
-        > fprintargs stdout hello stdout from fprintargs
-        [stdout]
-        hello stdout from fprintargs
-        > stdout 'hello stdout from fprintargs'
-        > ! stderr .+
-        > echoandexit 0 '' 'hello stderr from echoandexit'
-        [stderr]
-        hello stderr from echoandexit
-        > ! stdout .+
-        > stderr 'hello stderr from echoandexit'
-        # Verify that we do update stderr when we attempt to write via Stdout() or Stderr() (0.000s)
-        > fprintargs stderr hello stderr from fprintargs
-        [stderr]
-        hello stderr from fprintargs
-        > ! stdout .+
-        > stderr 'hello stderr from fprintargs'
-        > echoandexit 0 'hello stdout from echoandexit'
-        [stdout]
-        hello stdout from echoandexit
-        > stdout 'hello stdout from echoandexit'
-        > ! stderr .+
-        > fprintargs stdout hello stdout from fprintargs
-        [stdout]
-        hello stdout from fprintargs
-        > stdout 'hello stdout from fprintargs'
-        > ! stderr .+
-        > echoandexit 0 '' 'hello stderr from echoandexit'
-        [stderr]
-        hello stderr from echoandexit
-        > ! stdout .+
-        > stderr 'hello stderr from echoandexit'
-        PASS
-        
 === NAME  TestScripts/exec_path_change
     testscript.go:558: # If the PATH environment variable is set in the testscript.Params.Setup phase
         # or set directly within a script, exec should honour that PATH (0.000s)
@@ -5565,53 +5601,53 @@
         > stdout 'This is not go'
         PASS
         
---- PASS: TestScripts (0.01s)
-    --- PASS: TestScripts/readfile (0.13s)
-    --- PASS: TestScripts/pty (0.14s)
-    --- PASS: TestScripts/values (0.05s)
-    --- PASS: TestScripts/testscript_stdout_stderr_error (0.19s)
-    --- PASS: TestScripts/big_diff (0.22s)
-    --- PASS: TestScripts/testscript_update_script_stderr (0.06s)
-    --- PASS: TestScripts/testscript_update_script_expected_not_in_archive (0.06s)
-    --- PASS: TestScripts/testscript_update_script_actual_is_file (0.04s)
-    --- PASS: TestScripts/testscript_update_script_quote (0.11s)
-    --- PASS: TestScripts/wait (0.19s)
-    --- PASS: TestScripts/testscript_notfound (0.03s)
-    --- PASS: TestScripts/testscript_update_script (0.11s)
-    --- PASS: TestScripts/testscript_duplicate_name (0.08s)
-    --- PASS: TestScripts/setupfiles (0.02s)
-    --- PASS: TestScripts/setenv (0.11s)
-    --- PASS: TestScripts/regexpquote (0.01s)
-    --- PASS: TestScripts/testscript_explicit_exec (0.23s)
-    --- PASS: TestScripts/nothing (0.01s)
-    --- PASS: TestScripts/stdin (0.19s)
-    --- PASS: TestScripts/evalsymlink (0.04s)
-    --- PASS: TestScripts/long_diff (0.15s)
-    --- PASS: TestScripts/interrupt (0.14s)
-    --- PASS: TestScripts/hello (0.14s)
-    --- PASS: TestScripts/exists (0.04s)
-    --- PASS: TestScripts/execguard (0.03s)
+--- PASS: TestScripts (0.00s)
+    --- PASS: TestScripts/testscript_stdout_stderr_error (0.01s)
+    --- PASS: TestScripts/big_diff (0.01s)
     --- PASS: TestScripts/defer (0.00s)
-    --- PASS: TestScripts/cpstdout (0.02s)
+    --- PASS: TestScripts/readfile (0.02s)
     --- PASS: TestScripts/cond (0.00s)
+    --- PASS: TestScripts/evalsymlink (0.01s)
+    --- PASS: TestScripts/cpstdout (0.01s)
     --- PASS: TestScripts/cmpenv (0.00s)
-    --- PASS: TestScripts/command (0.04s)
-    --- PASS: TestScripts/commandstatus (0.08s)
-    --- PASS: TestScripts/testscript_logging (0.59s)
-    --- PASS: TestScripts/cmd_stdout_stderr (0.13s)
-    --- PASS: TestScripts/exec_path_change (43.81s)
+    --- PASS: TestScripts/command (0.01s)
+    --- PASS: TestScripts/testscript_duplicate_name (0.00s)
+    --- PASS: TestScripts/commandstatus (0.02s)
+    --- PASS: TestScripts/testscript_notfound (0.01s)
+    --- PASS: TestScripts/testscript_explicit_exec (0.02s)
+    --- PASS: TestScripts/setupfiles (0.00s)
+    --- PASS: TestScripts/cmd_stdout_stderr (0.04s)
+    --- PASS: TestScripts/testscript_update_script_quote (0.01s)
+    --- PASS: TestScripts/stdin (0.01s)
+    --- PASS: TestScripts/values (0.00s)
+    --- PASS: TestScripts/testscript_update_script_stderr (0.01s)
+    --- PASS: TestScripts/setenv (0.00s)
+    --- PASS: TestScripts/wait (0.02s)
+    --- PASS: TestScripts/interrupt (0.02s)
+    --- PASS: TestScripts/nothing (0.00s)
+    --- PASS: TestScripts/pty (0.01s)
+    --- PASS: TestScripts/testscript_update_script_actual_is_file (0.00s)
+    --- PASS: TestScripts/exists (0.00s)
+    --- PASS: TestScripts/long_diff (0.00s)
+    --- PASS: TestScripts/hello (0.01s)
+    --- PASS: TestScripts/testscript_update_script_expected_not_in_archive (0.01s)
+    --- PASS: TestScripts/regexpquote (0.00s)
+    --- PASS: TestScripts/execguard (0.00s)
+    --- PASS: TestScripts/testscript_update_script (0.02s)
+    --- PASS: TestScripts/testscript_logging (0.14s)
+    --- PASS: TestScripts/exec_path_change (14.37s)
 === RUN   TestTestwork
---- PASS: TestTestwork (12.26s)
+--- PASS: TestTestwork (3.63s)
 === RUN   TestWorkdirRoot
 === RUN   TestWorkdirRoot/run_tests
 === RUN   TestWorkdirRoot/run_tests/nothing
 === PAUSE TestWorkdirRoot/run_tests/nothing
 === CONT  TestWorkdirRoot/run_tests/nothing
-    testscript.go:558: WORK=/tmp/2259367806/script-nothing
+    testscript.go:558: WORK=/tmp/2422424674/script-nothing
         # Intentionally empty test script; used to test Params.WorkdirRoot (0.000s)
         PASS
         
---- PASS: TestWorkdirRoot (0.01s)
+--- PASS: TestWorkdirRoot (0.00s)
     --- PASS: TestWorkdirRoot/run_tests (0.00s)
         --- PASS: TestWorkdirRoot/run_tests/nothing (0.00s)
 === RUN   TestBadDir
@@ -5619,7 +5655,7 @@
 === RUN   TestUNIX2DOS
 --- PASS: TestUNIX2DOS (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/testscript	56.875s
+ok  	github.com/rogpeppe/go-internal/testscript	18.013s
 === RUN   Test
 === RUN   Test/basic
 === RUN   Test/basicCRLF
@@ -5647,7 +5683,7 @@
     --- PASS: TestQuote/bad_data (0.00s)
     --- PASS: TestQuote/no_final_newline (0.00s)
 PASS
-ok  	github.com/rogpeppe/go-internal/txtar	0.068s
+ok  	github.com/rogpeppe/go-internal/txtar	0.007s
 patch -R -p1 -i debian/0001-Allow-TestSimple-cover-to-PASS.patch
 patching file _build/src/github.com/rogpeppe/go-internal/testscript/testscript.go
 Hunk #1 succeeded at 1155 (offset 57 lines).
@@ -5669,11 +5705,11 @@
    dh_fixperms -O--builddirectory=_build -O--buildsystem=golang
    dh_missing -O--builddirectory=_build -O--buildsystem=golang
    dh_strip -a -O--builddirectory=_build -O--buildsystem=golang
-dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/txtar-goproxy
 dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/txtar-x
-dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/testscript
 dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/txtar-addmod
 dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/txtar-c
+dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/txtar-goproxy
+dh_strip: warning: Could not find the BuildID in debian/go-internal/usr/bin/testscript
    dh_makeshlibs -a -O--builddirectory=_build -O--buildsystem=golang
    dh_shlibdeps -a -O--builddirectory=_build -O--buildsystem=golang
    dh_installdeb -O--builddirectory=_build -O--buildsystem=golang
@@ -5682,8 +5718,8 @@
 dpkg-gencontrol: warning: package go-internal: substitution variable ${misc:Built-Using} unused, but is defined
    dh_md5sums -O--builddirectory=_build -O--buildsystem=golang
    dh_builddeb -O--builddirectory=_build -O--buildsystem=golang
-dpkg-deb: building package 'go-internal' in '../go-internal_1.12.0-3_armhf.deb'.
 dpkg-deb: building package 'golang-github-rogpeppe-go-internal-dev' in '../golang-github-rogpeppe-go-internal-dev_1.12.0-3_all.deb'.
+dpkg-deb: building package 'go-internal' in '../go-internal_1.12.0-3_armhf.deb'.
  dpkg-genbuildinfo --build=binary -O../golang-github-rogpeppe-go-internal_1.12.0-3_armhf.buildinfo
  dpkg-genchanges --build=binary -O../golang-github-rogpeppe-go-internal_1.12.0-3_armhf.changes
 dpkg-genchanges: info: binary-only upload (no source code included)
@@ -5691,12 +5727,14 @@
 dpkg-buildpackage: info: binary-only upload (no source included)
 dpkg-genchanges: info: not including original source code in upload
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/18358/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/5921 and its subdirectories
-I: Current time: Sun Dec 29 13:41:03 -12 2024
-I: pbuilder-time-stamp: 1735522863
+I: removing directory /srv/workspace/pbuilder/18358 and its subdirectories
+I: Current time: Mon Dec 30 15:44:46 +14 2024
+I: pbuilder-time-stamp: 1735523086