empty(1)
๐ empty(1) ยท General Commands Manual ยท bestie edition ๐
๐ฆ NAME ๐ฆ
empty โ run processes under pseudo-terminal sessions. That's the whole vibe: it runs stuff under PTY sessions, and it's literally called empty. iykyk.
โจ SYNOPSIS โจ
okay bestie, here's the exact shape of the commands, no cap:
empty -f [-i fifo1 -o fifo2] [-p file.pid] [-L file.log] command
[command args]
empty -w [-Sv] [-t n] [-i fifo2 -o fifo1] key1 [answer1] ... [keyX
answerX]
empty -s [-Sc] -o fifo1 [request]
empty -r [-b size] [-t n] [-i fifo2]
empty -l
empty -k [pid] [signal]
empty -h
๐ธ DESCRIPTION ๐ธ
okay so empty is a utility that provides a simple interface to execute and/or interact with processes under pseudo-terminal sessions. This tool is definitely useful in programming of shell scripts which are used to communicate with interactive programs like telnet or ftp. In some cases empty can be a substitution for TCL/expect or other similar programming tools. periodt.
There are several common forms of command lines for empty. But the first execution of empty is usually a start in the daemon mode to fork a new command (process) under PTY-session. This can be done with the -f key. An interface for the input and output data channels of the forked process is performed by two fifo files which names may be specified with -i and -o keys. These files are automatically created/deleted any time you start/exit empty daemon, so you must not create them manually. If you did not specify these fifo files in the command line, empty names them by itself basing on its PID and PID of forked PTY process.
At this point any application can easily communicate with forked process by writing data to the input fifo and reading answers from the output fifo โ see EXAMPLES section for the details. To simplify this operations, empty offers an interfase to just send any data (use -s key), or even to watch the output fifo for multiple keyphrases and reply to the input fifo with one of the responses (see -w key). it's giving automation but make it cute.
Note! Input fifo forempty -f ...is usually an output fifo forempty -wandempty -sforms. And output fifo ofempty -f ...is an input fifo forempty -w ...
If something goes wrong the forked process may be killed by the standard kill command, or using -k key of empty. See -p option to save PID of empty daemon process.
The following options are available, and yes bestie we're listing every single one:
๐ OPTIONS ๐
-fโ fork, spawn, start or execute a new process specified by the command and its arguments. If you omit fifo files,emptywith its job control algorithm will create them under/tmpdirectory using this templates:empty.PPID.PID.inandempty.PPID.PID.out, herePPIDis usually your shell system process ID andPIDis system process ID ofempty-daemon.-sโ send data (request) to the forked process. If fifo file was not specified with-okey,emptywill try to find an automatically created fifo file it in/tmpdirectory. Instead of command line you can send your request or data directly to standard input (stdin) ofempty.-wโ watch for one or more keyphrases and if specified send the appropriated response to the input fifo. If response is not set,emptywaits for the proper keyphrase then exits. With-wkeyemptyreturns the number of matched keyphrase-response pair, or255if fails to find this match (see-tkey for details of possible exit on timeout).-rโ read from output FIFO one line (default) or one block of data (if-b sizewas specified). If-t nkey was placed, exit on timeout.-lโ list automatically created jobs by your shell. NB! Your custom jobs, which fifo files you specified with-iand-okeys, are not displayed. So if you did not specify fifo files with-iand-okeys all operations are done under the job markedcurrent.-kโ send signal to the process with pid. If you did not specify pid,emptytries to find it within the list of automatically created jobs. If signal is omitted the defaultSIGTERMis used.-hโ print short help message and exit.-i fifo1โ a fifo file, which is used as input for a forked process.-o fifo2โ a fifo file, which is used as output for a forked process.-L file.logโ This option allows to log the wholeemptysession to a file. Marks>>>and<<<show the directions of data flow.-p file.pidโ Save PID ofemptydaemon process to a file.-t nโ If input FIFO is empty, wait for n seconds (default is10) to receive the keyphrase then exit on timeout with255code.-cโ forceemptyto usestdinfor data or requests.-Sโ Strip the last character from the input. Works with-sand-wkeys.-vโ kvazi verbose mode. Show all contents of received buffer.
๐ EXAMPLES ๐
Start a new PTY-session with telnet to localhost ๐ฆ
empty -f -i in.fifo -o out.fifo -p empty.pid -L empty.log telnet localhost
Interact with telnet ๐ฌ
empty -w -i out.fifo -o in.fifo ogin 'my_user\n'
empty -w -i out.fifo -o in.fifo assword 'my_password\n'
Send commands to telnet with empty ๐จ
empty -s -o in.fifo who
empty -s -o in.fifo "ls -la /\n"
The same using STDIN ๐
echo who | empty -s -o in.fifo
echo "ls -la /" | empty -s -o in.fifo
Just cat output from telnet ๐
cat out.fifo
Read one line from out.fifo ๐
empty -r -i out.fifo
Send commands to telnet with ordinary echo ๐ฃ
echo "who am i" > in.fifo
echo "uname -a" > in.fifo
Kill a process with PID 1234 ๐
empty -k 1234
or
kill 1234
Telnet session with automatically created jobs โจ
empty -f telnet localhost
Interact with telnet using job control ๐ฎ
empty -w ogin 'my_user\n'
empty -w assword 'my_password\n'
List automatically created jobs ๐
empty -l
PPID PID TYPE FILENAME
479 706 in /tmp/empty.479.706.in
479 706 out /tmp/empty.479.706.out
479 711 in /tmp/empty.479.711.in
479 711 out /tmp/empty.479.711.out
479 711 current
๐ SECURITY ๐
bestie, this part is serious, not a vibe. It is considered insecure to send a password in the command line like this:
empty -w assword 'my_password\n'
or like this:
empty -s 'my_password\n'
The reason is that the command line arguments are visible to the system while empty is running. Any local user can see them with ps(1), sometimes they are visible even remotely with finger(1). Also your server may have some monitoring tools which may store the output from ps(1) in their logs. There are also other, more complicated ways to compromise this information. Generally, you should take command line arguments as (possibly) visible to every one unless you really know what you're doing.
empty with '-s' flag runs quickly in most cases, but still it can hang for a number of reasons (like fifo overloading), and even if it runs quick you still cannot be sure that no one will see its command line arguments even in this short time. empty with '-w' flag is even worse because it must wait for the keyphrase. so do not put your whole password in the command line, fr fr.
A better way to send the password to the supervised program is to read it from file:
empty -s [common options] <./password-file
or from a pipe:
get-password-of-user "$user" |empty -s [common options]
You should still make sure that you do not send any password via command line while creating this file, and certainly you should set some safe permissions to this file AND its directory (with the parent directories) before reading the password from the file OR writing the password to it.
Another possible way is to use your shell's builtin (but see below):
echo "$password" |empty -s [common options]
Many shells like bash(1), csh(1) and FreeBSD's sh(1) do not call external echo(1) command but use their own builtin echo command. Since no external command is started (the shell itself does all that echo(1) must do), nothing is shown in the process list. It is beyond this manual page to discuss the way to make sure that your shell uses the builtin command.
๐ RETURN VALUES ๐
If any error occurs empty usually exits with code 255. Otherwise zero or some positive value (see -w key) is returned.
๐ SEE ALSO ๐
๐ AUTHOR ๐
empty was made by Mikhail E. Zakharov. This software was based on the basic idea of pty version 4.0 Copyright (c) 1992, Daniel J. Bernstein but no code was ported from pty4. SECURITY section of this manual page was contributed by Sergey Redin.
๐ okay bestie, that's the whole empty(1) situation โ March, 05 2006, General Commands Manual. now go make those PTY sessions behave, no cap ๐
โจ
๐ฆ where this page comes from
- nixos 26.05: empty 0.6.21b
- nixpkgs unstable: empty 0.6.21b
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms