posix true
This commit is contained in:
		
							parent
							
								
									31f240b580
								
							
						
					
					
						commit
						4764289944
					
				@ -13,7 +13,7 @@
 | 
				
			|||||||
<STYLE></STYLE>
 | 
					<STYLE></STYLE>
 | 
				
			||||||
<TITLE>trinity dot moe</TITLE> <!-- Also considered: 1945-07-16T05:26-06:00 -->
 | 
					<TITLE>trinity dot moe</TITLE> <!-- Also considered: 1945-07-16T05:26-06:00 -->
 | 
				
			||||||
</HEAD>
 | 
					</HEAD>
 | 
				
			||||||
<!-- 2021-08-05 stock crash? :) -->
 | 
					<!-- 2021-08-05 stock crash? :) nope lol. worth a try -->
 | 
				
			||||||
<BODY>
 | 
					<BODY>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<SCRIPT TYPE="application/javascript" SRC="/js/cookies.js" ></SCRIPT>
 | 
					<SCRIPT TYPE="application/javascript" SRC="/js/cookies.js" ></SCRIPT>
 | 
				
			||||||
@ -72,6 +72,7 @@ I'm vaccinated against COVID-19. Are you?
 | 
				
			|||||||
<A HREF="/thegame">/thegame</A>;
 | 
					<A HREF="/thegame">/thegame</A>;
 | 
				
			||||||
<B>knowledge</B>:
 | 
					<B>knowledge</B>:
 | 
				
			||||||
<A HREF="/knowledge/netbsd/">NetBSD</A>;
 | 
					<A HREF="/knowledge/netbsd/">NetBSD</A>;
 | 
				
			||||||
 | 
					<A HREF="/knowledge/true">true(1)</A>;
 | 
				
			||||||
<B>shilling</B>:
 | 
					<B>shilling</B>:
 | 
				
			||||||
<A HREF="#stickers">#stickers</A>
 | 
					<A HREF="#stickers">#stickers</A>
 | 
				
			||||||
</I></P>
 | 
					</I></P>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								homepage/knowledge/true.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								homepage/knowledge/true.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<HTML LANG="en">
 | 
				
			||||||
 | 
					<HEAD>
 | 
				
			||||||
 | 
					<LINK HREF="http://www.trinity.moe/knowledge/true" REL="canonical" />
 | 
				
			||||||
 | 
					<LINK HREF="https://raw.githubusercontent.com/devenblake/homepage/main/favicon.ico" REL="shortcut icon" TYPE="image/x-icon" />
 | 
				
			||||||
 | 
					<LINK HREF="/css/blank.css" ID="styling" REL="stylesheet" />
 | 
				
			||||||
 | 
					<META CHARSET="UTF-8" />
 | 
				
			||||||
 | 
					<META CONTENT="interest-cohort=()" HTTP-EQUIV="Permissions-Policy" /> <!-- FUCK GOOGLE -->
 | 
				
			||||||
 | 
					<META NAME="viewport" CONTENT="width=device-width, initial-scale=1" />
 | 
				
			||||||
 | 
					<TITLE>true(1)</TITLE>
 | 
				
			||||||
 | 
					</HEAD>
 | 
				
			||||||
 | 
					<BODY>
 | 
				
			||||||
 | 
					<P><A HREF="/">~ Return to the rest of the site</A></P>
 | 
				
			||||||
 | 
					<SCRIPT SRC="/js/cookies.js" TYPE="application/javascript"></SCRIPT>
 | 
				
			||||||
 | 
					<SCRIPT SRC="/js/sheets.js"  TYPE="application/javascript"></SCRIPT>
 | 
				
			||||||
 | 
					<SCRIPT TYPE="application/javascript">window.onload = window.initializesheets;</SCRIPT>
 | 
				
			||||||
 | 
					<H1>POSIX true(1)</H1>
 | 
				
			||||||
 | 
					<H3>updated 2021-08-06</H3>
 | 
				
			||||||
 | 
					<HR ALIGN="left" SIZE="1" WIDTH="25%" />
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					<CODE>true(1)</CODE> is a tool that <I>only</I> quits silently with an exit status of 0.
 | 
				
			||||||
 | 
					Similarly, <CODE>false(1)</CODE> is a tool that <I>only</I> quits silently with an exit status of 1.
 | 
				
			||||||
 | 
					Recognizing arguments, printing to standard output, reading from standard input, or otherwise exiting with any other status of 0, is a violation of the POSIX specification for <CODE>true(1)</CODE>.
 | 
				
			||||||
 | 
					These utilities find use in shell scripting, which, though extremely relevant to these utilities, is beyond the scope of this article.
 | 
				
			||||||
 | 
					</P>
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					Because <CODE>true(1)</CODE>'s required functionality is so simple a POSIX-compliant implementation is a one-liner in most languages, so long as you're willing to make an exception in your code styling.
 | 
				
			||||||
 | 
					For example, in C:
 | 
				
			||||||
 | 
					</P>
 | 
				
			||||||
 | 
					<PRE><CODE CLASS="language-c" DATA-LANG="c">
 | 
				
			||||||
 | 
					int main(void) { return 0; }
 | 
				
			||||||
 | 
					</CODE></PRE>
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					Because executing an empty shellscript file will in most shells do nothing and return an exit status of 0, technically an empty shellscript file is a POSIX-compliant <CODE>true(1)</CODE> implementation in 0 bytes.
 | 
				
			||||||
 | 
					However (<B>TODO</B>) it's to me unknown whether this is implementation-specific or POSIX-specified.
 | 
				
			||||||
 | 
					The <I>usual</I> implementation in POSIX shell is also a one-liner if you ignore the shebang:
 | 
				
			||||||
 | 
					</P>
 | 
				
			||||||
 | 
					<PRE><CODE CLASS="language-shell" DATA-LANG="shell">
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
 | 
					</CODE></PRE>
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					This happens to be nearly identical in source to the implementation used by NetBSD.
 | 
				
			||||||
 | 
					</P>
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					Here's <CODE><I>false</I>(1)</CODE> in Python rather than <CODE>true(1)</CODE> to demonstrate how exiting with an arbitrary exit status can be done:
 | 
				
			||||||
 | 
					</P>
 | 
				
			||||||
 | 
					<PRE><CODE CLASS="language-python" DATA-LANG="python">
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					sys.exit(1)
 | 
				
			||||||
 | 
					</CODE></PRE>
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					In some shells, <CODE>true(1)</CODE> is a shell built-in command, so running <CODE>true</CODE> will run the shell author's implementation of <CODE>true(1)</CODE> rather than the system implementation.
 | 
				
			||||||
 | 
					</P>
 | 
				
			||||||
 | 
					<P>
 | 
				
			||||||
 | 
					GNU <CODE>true(1)</CODE>, from the GNU coreutils, deserves a special mention, as it's eighty lines long and directly includes four C header files.
 | 
				
			||||||
 | 
					This is not a joke.
 | 
				
			||||||
 | 
					Their <CODE>true.c</CODE> is 2.3 kilobytes, parses the arguments <CODE>--help</CODE> and <CODE>--version</CODE> (only if either are the first argument to the program), and I don't know how big the executable ends up being because the first thing I do when I take control of a GNU system is <CODE>printf "#/bin/sh\nexit 0\n"|dd of="$(which true)";chmod +x "$(which true)"</CODE> (<B>use at your own risk</B>).
 | 
				
			||||||
 | 
					<H2>Cited media and further reading</H2><UL>
 | 
				
			||||||
 | 
						<LI>Articles<UL>
 | 
				
			||||||
 | 
							<LI><A HREF="https://www.muppetlabs.com/~breadbox/software/tiny/teensy.html">Brian Raiter - A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux</A></LI>
 | 
				
			||||||
 | 
						</UL></LI>
 | 
				
			||||||
 | 
						<LI>Manual pages<UL>
 | 
				
			||||||
 | 
							<LI><A HREF="https://www.unix.com/man-page/posix/1p/true/">true(1p)</A> (The Open Group, 2003)</LI>
 | 
				
			||||||
 | 
						</UL></LI>
 | 
				
			||||||
 | 
						<LI>Notable true implementations<UL>
 | 
				
			||||||
 | 
							<LI><B>ongoing</B> started 1992 - <A HREF="https://www.gnu.org/">GNU</A>/<A HREF="https://www.gnu.org/software/coreutils/">coreutils</A> - <A HREF="https://git.savannah.gnu.org/cgit/coreutils.git/tree/src/true.c">src/true.c</A></LI>
 | 
				
			||||||
 | 
							<LI><B>ongoing</B> forked from 4.4BSD-Lite2 - <A HREF="https://www.netbsd.org/">NetBSD</A>/<A HREF="https://github.com/NetBSD/src">src</A> - <A HREF="https://github.com/NetBSD/src/blob/trunk/usr.bin/true/true.sh">usr.bin/true/true.sh</A></LI>
 | 
				
			||||||
 | 
						</UL></LI>
 | 
				
			||||||
 | 
					</UL>
 | 
				
			||||||
 | 
					</BODY>
 | 
				
			||||||
 | 
					</HTML>
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user