666 lines
23 KiB
Markdown
666 lines
23 KiB
Markdown
# NAME
|
||
|
||
pv - monitor the progress of data through a pipe
|
||
|
||
# SYNOPSIS
|
||
|
||
**pv** \[*OPTION*\]\... \[*FILE*\]\...
|
||
|
||
**pv** \[ **-pteIrab8kTv** \] \[ **-A** NUM \] \[ **-F** FORMAT \] \[
|
||
**-Wgl0fc** \] \[ **-D** SEC \] \[ **-s** SIZE \] \[ **-i** SEC \] \[
|
||
**-m** SEC \] \[ **-w** WIDTH \] \[ **-H** HEIGHT \] \[ **-N** NAME \]
|
||
[ **-o** FILE \] \[ **-L** RATE \] \[ **-B** BYTES \] \[ **-CESYKX** \]
|
||
[ **-Z** BYTES \] \[ **-U** FILE \] \[ **-P** FILE \] \[*FILE* . . .\]
|
||
|
||
**pv** **-n** \[ **-trbv** \] \[ **-Wl0** \] \[ **-D** SEC \] \[ **-s**
|
||
SIZE \] \[ **-i** SEC \] \[ **-o** FILE \] \[ **-L** RATE \] \[ **-B**
|
||
BYTES \] \[ **-CESYKX** \] \[ **-Z** BYTES \] \[ **-U** FILE \] \[
|
||
**-P** FILE \] \[*FILE* . . .\]
|
||
|
||
**pv** **-q** \[ **-v** \] \[ **-s** SIZE \] \[ **-o** FILE \] \[ **-L**
|
||
RATE \] \[ **-B** BYTES \] \[ **-CESYKX** \] \[ **-Z** BYTES \] \[
|
||
**-U** FILE \] \[ **-P** FILE \] \[*FILE* . . .\]
|
||
|
||
**pv** **-R** *PID* \[ **-pteIrabT** \] \[ **-A** NUM \] \[ **-F**
|
||
FORMAT \] \[ **-s** SIZE \] \[ **-i** SEC \] \[ **-w** WIDTH \] \[
|
||
**-H** HEIGHT \] \[ **-N** NAME \] \[ **-L** RATE \] \[ **-B** BYTES \]
|
||
|
||
**pv** **-d** *PID:FD* \[ **-pteIrab8kTnq** \] \[ **-F** FORMAT \] \[
|
||
**-i** SEC \] \[ **-w** WIDTH \] \[ **-H** HEIGHT \]
|
||
|
||
**pv** **-d** *PID* \[ **-pteIrab8kTnq** \] \[ **-F** FORMAT \] \[
|
||
**-i** SEC \] \[ **-w** WIDTH \] \[ **-H** HEIGHT \]
|
||
|
||
**pv** **-h**
|
||
|
||
**pv** **-V**
|
||
|
||
# DESCRIPTION
|
||
|
||
**pv** shows the progress of data through a pipeline by giving
|
||
information such as time elapsed, percentage completed (with progress
|
||
bar), current throughput rate, total data transferred, and ETA.
|
||
|
||
To use it, insert it in a pipeline between two processes, with the
|
||
appropriate options. Its standard input will be passed through to its
|
||
standard output and progress will be shown on standard error.
|
||
|
||
**pv** will copy each supplied *FILE* in turn to standard output (**-**
|
||
means standard input), or if no *FILE*s are specified just standard
|
||
input is copied. This is the same behaviour as **cat**(1).
|
||
|
||
A simple example to watch how quickly a file is transferred using
|
||
**nc**(1):
|
||
|
||
pv file | nc -w 1 somewhere.com 3000
|
||
|
||
A similar example, transferring a file from another process and passing
|
||
the expected size to **pv**:
|
||
|
||
cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
|
||
|
||
A more complicated example using numeric output to feed into the
|
||
**dialog**(1) program for a full-screen progress display:
|
||
|
||
(tar cf - . \
|
||
| pv -n -s $(du -sb . | awk '{print $1}') \
|
||
| gzip -9 > out.tgz) 2>&1 \
|
||
| dialog --gauge 'Progress' 7 70
|
||
|
||
Taking an image of a disk, skipping errors:
|
||
|
||
pv -EE /dev/your/disk/device > disk-image.img
|
||
|
||
Writing an image back to a disk:
|
||
|
||
pv disk-image.img > /dev/your/disk/device
|
||
|
||
Zeroing a disk:
|
||
|
||
pv < /dev/zero > /dev/your/disk/device
|
||
|
||
Note that if the input size cannot be calculated, and the output is a
|
||
block device, then the size of the block device will be used and **pv**
|
||
will automatically stop at that size as if **-S** had been given.
|
||
|
||
(Linux only): Watching file descriptor 3 opened by another process 1234:
|
||
|
||
pv -d 1234:3
|
||
|
||
(Linux only): Watching all file descriptors used by process 1234:
|
||
|
||
pv -d 1234
|
||
|
||
# OPTIONS
|
||
|
||
**pv** takes many options, which are divided into display switches,
|
||
output modifiers, and general options.
|
||
|
||
# DISPLAY SWITCHES
|
||
|
||
If no display switches are specified, **pv** behaves as if **-p**,
|
||
**-t**, **-e**, **-r**, and **-b** had been given. Otherwise, only those
|
||
display types that are explicitly switched on will be shown.
|
||
|
||
**-p, \--progress**
|
||
|
||
: Turn the progress bar on. If any inputs are not files, or are
|
||
unreadable, and no size was explicitly given (with the **-s**
|
||
modifier), the progress bar cannot indicate how close to completion
|
||
the transfer is, so it will just move left and right to indicate
|
||
that data is moving - or, with **\--gauge**, the bar will indicate
|
||
the current rate as a percentage of the maximum rate seen so far.
|
||
|
||
**-t, \--timer**
|
||
|
||
: Turn the timer on. This will display the total elapsed time that
|
||
**pv** has been running for.
|
||
|
||
**-e, \--eta**
|
||
|
||
: Turn the ETA timer on. This will attempt to guess, based on current
|
||
transfer rates and the total data size, how long it will be before
|
||
completion. The countdown is prefixed with \"ETA\". This option will
|
||
have no effect if the total data size cannot be determined.
|
||
|
||
**-I, \--fineta**
|
||
|
||
: Turn the ETA timer on, but display the estimated local time at which
|
||
the transfer will finish, instead of the amount of time remaining.
|
||
When the estimated time is more than 6 hours in the future, the date
|
||
is shown as well. The time is prefixed with \"FIN\" for finish time.
|
||
As with **\--eta**, this option will have no effect if the total
|
||
data size cannot be determined.
|
||
|
||
**-r, \--rate**
|
||
|
||
: Turn the rate counter on. This will display the current rate of data
|
||
transfer. The rate is shown in square brackets \[\].
|
||
|
||
**-a, \--average-rate**
|
||
|
||
: Turn the average rate counter on. This will display the current
|
||
average rate of data transfer (default: last 30s, see **-m**). The
|
||
average rate is shown in brackets ().
|
||
|
||
**-b, \--bytes**
|
||
|
||
: Turn the total byte counter on. This will display the total amount
|
||
of data transferred so far.
|
||
|
||
**-8, \--bits**
|
||
|
||
: Display the total bits instead of the total bytes. The output suffix
|
||
will be \"b\" instead of \"B\".
|
||
|
||
**-k, \--si**
|
||
|
||
: Display and interpret suffixes as multiples of 1000 rather than the
|
||
default of 1024. Note that this only takes effect on options after
|
||
this one, so for consistency, specify this option first.
|
||
|
||
**-T, \--buffer-percent**
|
||
|
||
: Turn on the transfer buffer percentage display. This will show the
|
||
percentage of the transfer buffer in use - but see the caveat under
|
||
**%T** in the **FORMATTING** section below. Implies **-C**. The
|
||
transfer buffer percentage is shown in curly brackets {}.
|
||
|
||
**-A NUM, \--last-written NUM**
|
||
|
||
: Show the last *NUM* bytes written - but see the caveat under **%nA**
|
||
in the **FORMATTING** section below. Implies **-C**.
|
||
|
||
**-F FORMAT, \--format FORMAT**
|
||
|
||
: Ignore the options **-p**, **-t**, **-e**, **-r**, **-a**, **-b**,
|
||
**-T**, and **-A**, and instead use the format string *FORMAT* to
|
||
determine the output format. See the **FORMATTING** section below.
|
||
|
||
**-v, \--stats**
|
||
|
||
: At the end of the transfer, write an additional line showing the
|
||
transfer rate minimum, maximum, mean, and standard deviation. The
|
||
values are always in bytes per second (or bits, with **-8**).
|
||
|
||
**-n, \--numeric**
|
||
|
||
: Numeric output. Instead of giving a visual indication of progress,
|
||
**pv** will give an integer percentage, one per line, on standard
|
||
error, suitable for piping (via convoluted redirection) into
|
||
**dialog**(1). Note that **-f** is not required if **-n** is being
|
||
used.
|
||
|
||
: If **\--numeric** is in use, then adding **\--bytes** will cause the
|
||
number of bytes processed so far to be output instead of a
|
||
percentage; if **\--line-mode** is also in use as well as
|
||
**\--bytes** and **\--numeric**, then instead of bytes or a
|
||
percentage, the number of lines so far is output. If **\--rate** is
|
||
added, then the transfer rate is also output (if **\--bytes** is in
|
||
use as well, the rate comes after the byte/line count). If
|
||
**\--timer** is also added, then each output line is *prefixed* with
|
||
the elapsed time so far, as a decimal number of seconds.
|
||
|
||
**-q, \--quiet**
|
||
|
||
: No output. Useful if the **-L** option is being used on its own to
|
||
just limit the transfer rate of a pipe.
|
||
|
||
# OUTPUT MODIFIERS
|
||
|
||
**-W, \--wait**
|
||
|
||
: Wait until the first byte has been transferred before showing any
|
||
progress information or calculating any ETAs. Useful if the program
|
||
you are piping to or from requires extra information before it
|
||
starts, eg piping data into **gpg**(1) or **mcrypt**(1) which
|
||
require a passphrase before data can be processed.
|
||
|
||
**-D SEC, \--delay-start SEC**
|
||
|
||
: Wait until *SEC* seconds have passed before showing any progress
|
||
information, for example in a script where you only want to show a
|
||
progress bar if it starts taking a long time. Note that this can be
|
||
a decimal such as 0.5.
|
||
|
||
**-s SIZE, \--size SIZE**
|
||
|
||
: Assume the total amount of data to be transferred is *SIZE* bytes
|
||
when calculating percentages and ETAs. The same suffixes of \"k\",
|
||
\"m\" etc can be used as with **-L**.
|
||
|
||
: If *SIZE* starts with **@**, the size of file whose name follows the
|
||
**@** will be used.
|
||
|
||
: Note that **\--size** has no effect if used with **-d ***PID* to
|
||
watch all file descriptors of a process, but will work with **-d
|
||
PID:FD**.
|
||
|
||
**-g, \--gauge**
|
||
|
||
: If the progress bar is shown but the size is not known, then instead
|
||
of moving the bar left and right to show progress, show the current
|
||
transfer rate as a percentage of the maximum rate seen so far.
|
||
|
||
**-l, \--line-mode**
|
||
|
||
: Instead of counting bytes, count lines (newline characters). The
|
||
progress bar will only move when a new line is found, and the value
|
||
passed to the **-s** option will be interpreted as a line count.
|
||
|
||
: If this option is used without **-s**, the \"total size\" (in this
|
||
case, total line count) is calculated by reading through all input
|
||
files once before transfer starts. If any inputs are pipes or
|
||
non-regular files, or are unreadable, the total size will not be
|
||
calculated.
|
||
|
||
**-0, \--null**
|
||
|
||
: Count lines as terminated with a null byte instead of with a
|
||
newline. This option implies \--line-mode.
|
||
|
||
**-i SEC, \--interval SEC**
|
||
|
||
: Wait *SEC* seconds between updates. The default is to update every
|
||
second. Note that this can be a decimal such as 0.1.
|
||
|
||
**-m SEC, \--average-rate-window SEC**
|
||
|
||
: Compute current average rate over a *SEC* seconds window for average
|
||
rate and ETA calculations (default 30 seconds).
|
||
|
||
**-w WIDTH, \--width WIDTH**
|
||
|
||
: Assume the terminal is *WIDTH* characters wide, instead of trying to
|
||
work it out (or assuming 80 if it cannot be guessed). If this option
|
||
is used, the output width will not be adjusted if the width of the
|
||
terminal changes while the transfer is running.
|
||
|
||
**-H HEIGHT, \--height HEIGHT**
|
||
|
||
: Assume the terminal is *HEIGHT* rows high, instead of trying to work
|
||
it out (or assuming 25 if it cannot be guessed). If this option is
|
||
used, the output height will not be adjusted if the height of the
|
||
terminal changes while the transfer is running.
|
||
|
||
**-N NAME, \--name NAME**
|
||
|
||
: Prefix the output information with *NAME*. Useful in conjunction
|
||
with **-c** if you have a complicated pipeline and you want to be
|
||
able to tell different parts of it apart.
|
||
|
||
**-f, \--force**
|
||
|
||
: Force output. Normally, **pv** will not output any visual display if
|
||
standard error is not a terminal. This option forces it to do so.
|
||
|
||
**-c, \--cursor**
|
||
|
||
: Use cursor positioning escape sequences instead of just using
|
||
carriage returns. This is useful in conjunction with **-N** (name)
|
||
if you are using multiple **pv** invocations in a single, long,
|
||
pipeline.
|
||
|
||
# DATA TRANSFER MODIFIERS
|
||
|
||
**-o FILE, \--output FILE**
|
||
|
||
: Write data to *FILE* rather than standard output. If the file
|
||
already exists, it will be truncated.
|
||
|
||
**-L RATE, \--rate-limit RATE**
|
||
|
||
: Limit the transfer to a maximum of *RATE* bytes per second. A suffix
|
||
of \"K\", \"M\", \"G\", or \"T\" can be added to denote kibibytes
|
||
(\*1024), mebibytes, and so on. If **\--si** was also passed,
|
||
suffixes will denote kilobytes (\*1000), megabytes, etc. Note the
|
||
caveat about the positioning of **\--si .**
|
||
|
||
**-B BYTES, \--buffer-size BYTES**
|
||
|
||
: Use a transfer buffer size of *BYTES* bytes. A suffix of \"K\",
|
||
\"M\", \"G\", or \"T\" can be added to denote kibibytes (\*1024),
|
||
mebibytes, and so on. The default buffer size is the block size of
|
||
the input file\'s filesystem multiplied by 32 (512KiB max), or
|
||
400KiB if the block size cannot be determined. This can be useful on
|
||
platforms like MacOS which perform better in pipelines with specific
|
||
buffer sizes such as 1024. Implies **-C**.
|
||
|
||
**-C, \--no-splice**
|
||
|
||
: Never use **splice**(2), even if it would normally be possible. The
|
||
**splice**(2) system call is a more efficient way of transferring
|
||
data from or to a pipe than regular **read**(2) and **write**(2),
|
||
but means that the transfer buffer may not be used. This prevents
|
||
**-A** and **-T** from working, cannot work with **-X**, and makes
|
||
**-B** redundant, so using **-A**, **-T**, **-X**, or **-B**
|
||
automatically switches on **-C**. Switching on **-C** results in a
|
||
small loss of transfer efficiency. (This option has no effect on
|
||
systems where **splice**(2) is unavailable).
|
||
|
||
**-E, \--skip-errors**
|
||
|
||
: Ignore read errors by attempting to skip past the offending
|
||
sections. The corresponding parts of the output will be null bytes.
|
||
At first only a few bytes will be skipped, but if there are many
|
||
errors in a row then the skips will move up to chunks of 512. This
|
||
is intended to be similar to **dd conv=sync,noerror** but has not
|
||
been as thoroughly tested.
|
||
|
||
: Specify **-E** twice to only report a read error once per file,
|
||
instead of reporting each byte range skipped.
|
||
|
||
**-Z BYTES, \--error-skip-block BYTES**
|
||
|
||
: When ignoring read errors with **-E**, instead of trying to
|
||
adaptively skip by reading small amounts and skipping progressively
|
||
larger sections until a read succeeds, move to the next file block
|
||
of *BYTES* bytes as soon as an error occurs. There may still be some
|
||
shorter skips where the block being skipped coincides with the end
|
||
of the transfer buffer.
|
||
|
||
: This option can only be used with **-E** and is intended for use
|
||
when reading from a block device, such as **-E -Z 4K** to skip in 4
|
||
kibibyte blocks. This will speed up reads from faulty media, at the
|
||
expense of potentially losing more data.
|
||
|
||
**-S, \--stop-at-size**
|
||
|
||
: If a size was specified with **-s**, stop transferring data once
|
||
that many bytes have been written, instead of continuing to the end
|
||
of input.
|
||
|
||
**-Y, \--sync**
|
||
|
||
: After every write operation, synchronise the buffer caches to disk -
|
||
see **fdatasync**(2). This has no effect when the output is a pipe.
|
||
Using **-Y** may improve the accuracy of the progress bar when
|
||
writing to a slow disk.
|
||
|
||
**-K, \--direct-io**
|
||
|
||
: Set the **O_DIRECT** flag on all inputs and outputs, if it is
|
||
available. This will minimise the effect of caches, at the cost of
|
||
performance. Due to memory alignment requirements, it also may cause
|
||
read or write failures with an error of \"Invalid argument\",
|
||
especially if reading and writing files across a variety of
|
||
filesystems in a single **pv** call. Use this option with caution.
|
||
|
||
**-X, \--discard**
|
||
|
||
: Instead of transferring input data to standard output, discard it.
|
||
This is equivalent to redirecting standard output to */dev/null*,
|
||
except that **write**(2) is never called. Implies **-C**.
|
||
|
||
**-U FILE, \--store-and-forward FILE**
|
||
|
||
: Instead of passing data through immediately, do it in two stages -
|
||
first read all input and write it to *FILE*, and then once the input
|
||
is exhausted, read all of *FILE* and write it to the output. *FILE*
|
||
remains in place afterwards, unless it is \"**-**\", in which case
|
||
**pv** creates a temporary file for this purpose, and automatically
|
||
removes it afterwards.
|
||
|
||
: This can be useful if you have a pipeline which generates data (your
|
||
input) quickly but you don\'t know the size, and you wish to pass it
|
||
to some slower process, once all of the input has been generated and
|
||
you know its size, so you can see its progress. Note that when doing
|
||
this with relatively small amounts of data, **\--no-splice** may be
|
||
preferable so that pipe buffering doesn\'t affect the progress
|
||
display.
|
||
|
||
**-d PID\[:FD\], \--watchfd PID\[:FD\]**
|
||
|
||
: Instead of transferring data, watch file descriptor *FD* of process
|
||
*PID*, and show its progress. The **pv** process will exit when *FD*
|
||
either changes to a different file, changes read/write mode, or is
|
||
closed; other data transfer modifiers - and remote control - may not
|
||
be used with this option.
|
||
|
||
: If only a *PID* is specified, then that process will be watched, and
|
||
all regular files and block devices it opens will be shown with a
|
||
progress bar. The **pv** process will exit when process *PID* exits.
|
||
|
||
**-R PID, \--remote PID**
|
||
|
||
: If *PID* is an instance of **pv** that is already running, **-R
|
||
***PID* will cause that instance to act as though it had been given
|
||
this instance\'s command line instead. For example, if **pv -L
|
||
123K** is running with process ID 9876, then running **pv -R 9876 -L
|
||
321K** will cause it to start using a rate limit of 321KiB instead
|
||
of 123KiB. Note that some options cannot be changed while running,
|
||
such as **-c**, **-l**, **-f**, **-D**, **-E**, and **-S**.
|
||
|
||
# GENERAL OPTIONS
|
||
|
||
**-P FILE, \--pidfile FILE**
|
||
|
||
: Save the process ID of **pv** in *FILE*. The file will be replaced
|
||
if it already exists, and will be removed when **pv** exits. While
|
||
**pv** is running, it will contain a single number - the process ID
|
||
of **pv** - followed by a newline.
|
||
|
||
**-h, \--help**
|
||
|
||
: Print a usage message on standard output and exit successfully.
|
||
|
||
**-V, \--version**
|
||
|
||
: Print version information on standard output and exit successfully.
|
||
|
||
# FORMATTING
|
||
|
||
If the **-F** option is given, then the output format is determined by
|
||
the given format string. Within that string, the following sequences can
|
||
be used:
|
||
|
||
**%p**
|
||
|
||
: Progress bar. Expands to fill the remaining space. Should only be
|
||
specified once. Equivalent to **-p**.
|
||
|
||
**%t**
|
||
|
||
: Elapsed time. Equivalent to **-t**.
|
||
|
||
**%e**
|
||
|
||
: ETA as time remaining. Equivalent to **-e**.
|
||
|
||
**%I**
|
||
|
||
: ETA as local time at which the transfer will finish. Equivalent to
|
||
**-I**.
|
||
|
||
**%r**
|
||
|
||
: Current data transfer rate. Equivalent to **-r**.
|
||
|
||
**%a**
|
||
|
||
: Average data transfer rate. Equivalent to **-a**.
|
||
|
||
**%b**
|
||
|
||
: Bytes transferred so far (or lines if **-l** was specified).
|
||
Equivalent to **-b**. If **\--bits** was specified, **%b** shows the
|
||
bits transferred so far, not bytes.
|
||
|
||
**%T**
|
||
|
||
: Percentage of the transfer buffer in use. Equivalent to **-T**.
|
||
Shows \"{\-\-\--}\" if the transfer is being done with
|
||
**splice**(2), since splicing to or from pipes does not use the
|
||
buffer.
|
||
|
||
**%nA**
|
||
|
||
: Show the last **n** bytes written (e.g. **%16A** for the last 16
|
||
bytes). Shows only dots if the transfer is being done with
|
||
**splice**(2), since splicing to or from pipes does not use the
|
||
buffer.
|
||
|
||
**%N**
|
||
|
||
: Name prefix given by **-N**. Padded to 9 characters with spaces, and
|
||
suffixed with :.
|
||
|
||
**%%**
|
||
|
||
: A single %.
|
||
|
||
The format string equivalent of turning on all display switches is
|
||
**\`%N %b %T %t %r %a %p %e %I\'**.
|
||
|
||
# COMMON SWITCHES
|
||
|
||
Some suggested common switch combinations:
|
||
|
||
**pv -ptebar**
|
||
|
||
: Show a progress bar, elapsed time, estimated completion time, byte
|
||
counter, average rate, and current rate.
|
||
|
||
**pv -betlap**
|
||
|
||
: Show a progress bar, elapsed time, estimated completion time, line
|
||
counter, and average rate, counting lines instead of bytes.
|
||
|
||
**pv -btrpg**
|
||
|
||
: Show the amount transferred, elapsed time, current rate, and a gauge
|
||
showing the current rate as a percentage of the maximum rate seen -
|
||
useful in a pipeline where the total size is unknown. (If the size
|
||
*is* known, these options will show the percentage completion
|
||
instead of the rate gauge).
|
||
|
||
**pv -t**
|
||
|
||
: Show only the elapsed time - useful as a simple timer, e.g. **sleep
|
||
10m \| pv -t**.
|
||
|
||
**pv -pterb**
|
||
|
||
: The default behaviour: progress bar, elapsed time, estimated
|
||
completion time, current rate, and byte counter.
|
||
|
||
On MacOS, it may be useful to specify **-B 1024** in a pipeline, as this
|
||
may improve performance.
|
||
|
||
# EXIT STATUS
|
||
|
||
An exit status of 1 indicates a problem with the **-R** or **-P**
|
||
options.
|
||
|
||
Any other exit status is a bitmask of the following:
|
||
|
||
**2**
|
||
|
||
: One or more files could not be accessed, **stat**(2)ed, or opened.
|
||
|
||
**4**
|
||
|
||
: An input file was the same as the output file.
|
||
|
||
**8**
|
||
|
||
: Internal error with closing a file or moving to the next file.
|
||
|
||
**16**
|
||
|
||
: There was an error while transferring data from one or more input
|
||
files.
|
||
|
||
**32**
|
||
|
||
: A signal was caught that caused an early exit.
|
||
|
||
**64**
|
||
|
||
: Memory allocation failed.
|
||
|
||
A zero exit status indicates no problems.
|
||
|
||
# ENVIRONMENT
|
||
|
||
The following environment variables may affect **pv**:
|
||
|
||
**HOME**
|
||
|
||
: The current user\'s home directory. This may be used by the remote
|
||
control mechanism (the **\--remote** option) to exchange messages
|
||
between **pv** instances: if the */run/user/UID/* directory does not
|
||
exist (where *UID* is the current user ID), then *\$HOME/.pv/* will
|
||
be used instead.
|
||
|
||
**TMPDIR**, **TMP**
|
||
|
||
: The directory to create per-tty lock files for the terminal when
|
||
using the **\--cursor** option. If **TMPDIR** is set to a non-empty
|
||
value, it is the directory under which lock files are created.
|
||
Otherwise, if **TMP** is set, then it is used; and if neither are
|
||
set, then */tmp* is used.
|
||
|
||
# AUTHOR
|
||
|
||
Written by Andrew Wood, with patches submitted by various other people.
|
||
Please see the package\'s ACKNOWLEDGEMENTS file for a complete list of
|
||
contributors.
|
||
|
||
# KNOWN PROBLEMS
|
||
|
||
The following problems are known to exist in **pv**:
|
||
|
||
- In some versions of **bash**(1) and **zsh**(1), the construct
|
||
**\<(pv filename)** will not output any progress to the terminal
|
||
when run from an interactive shell, due to the subprocess being run
|
||
in a separate process group from the one that owns the terminal. In
|
||
these cases, use **\--force**.
|
||
|
||
- If **pv** is used in a pipeline in **zsh** version 5.8, and the last
|
||
command in the pipeline is based on shell builtins, **zsh** takes
|
||
control of the terminal away from **pv**, preventing progress from
|
||
being displayed. For example, this will produce no progress bar:
|
||
|
||
pv InputFile | { while read -r line; do sleep 0.1; done; }
|
||
|
||
To work around this, put the last commands of the pipeline in normal
|
||
brackets to force the use of a subshell:
|
||
|
||
pv InputFile | ( while read -r line; do sleep 0.1; done; )
|
||
|
||
Refer to [issue #105](https://codeberg.org/a-j-wood/pv/issues/105)
|
||
for full details.
|
||
|
||
- The **-c** option does not work properly on Cygwin without
|
||
**cygserver** running, if started near the bottom of the screen (IPC
|
||
is needed to handle the terminal scrolling). To fix this, start
|
||
**cygserver** before using **pv -c**.
|
||
|
||
- The **-R** option requires that either **/run/user/\<uid\>/** or
|
||
**\$HOME/** can be written to, for inter-process communication.
|
||
|
||
If you find any other problems, please report them.
|
||
|
||
# REPORTING BUGS
|
||
|
||
Please report any bugs to **pv@ivarch.com**.
|
||
|
||
Alternatively, use the issue tracker linked from the [pv home
|
||
page](https://www.ivarch.com/programs/pv.shtml).
|
||
|
||
# SEE ALSO
|
||
|
||
**cat**(1), **dialog**(1), **splice**(2), **open**(2) (for **O_DIRECT**)
|
||
|
||
# COPYRIGHT
|
||
|
||
Copyright © 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew
|
||
Wood.
|
||
|
||
License GPLv3+: GNU GPL version 3 or later
|
||
\<https://www.gnu.org/licenses/gpl-3.0.html\>.
|
||
|
||
This is free software: you are free to change and redistribute it. There
|
||
is NO WARRANTY, to the extent permitted by law.
|