Log In
Or create an account -> 
Imperial Library
  • Home
  • About
  • News
  • Upload
  • Forum
  • Help
  • Login/SignUp

Index
bash Cookbook
Preface
Who Should Read This Book About This Book
GNU Software A Note About Code Examples Useless Use of cat A Note About Perl More Resources
Conventions Used in This Book Using Code Examples We'd Like to Hear from You SafariĀ® Enabled Acknowledgments
Reviewers O'Reilly From the Authors
Carl JP Cameron
1. Beginning bash
0. Why bash? 0. The bash Shell 1.1. Decoding the Prompt
1.1.1. Problem 1.1.2. Solution 1.1.3. Discussion 1.1.4. See Also
1.2. Showing Where You Are
1.2.1. Problem 1.2.2. Solution 1.2.3. Discussion 1.2.4. See Also
1.3. Finding and Running Commands
1.3.1. Problem 1.3.2. Solution 1.3.3. Discussion 1.3.4. See Also
1.4. Getting Information About Files
1.4.1. Problem 1.4.2. Solution 1.4.3. Discussion 1.4.4. See Also
1.5. Showing All Hidden (dot) Files in the Current Directory
1.5.1. Problem 1.5.2. Solution 1.5.3. Discussion 1.5.4. See Also
1.6. Using Shell Quoting
1.6.1. Problem 1.6.2. Solution 1.6.3. Discussion 1.6.4. See Also
1.7. Using or Replacing Built-ins and External Commands
1.7.1. Problem 1.7.2. Solution 1.7.3. Discussion 1.7.4. See Also
1.8. Determining If You Are Running Interactively
1.8.1. Problem 1.8.2. Solution 1.8.3. Discussion 1.8.4. See Also
1.9. Setting bash As Your Default Shell
1.9.1. Problem 1.9.2. Solution 1.9.3. Discussion 1.9.4. See Also
1.10. Getting bash for Linux
1.10.1. Problem 1.10.2. Solution 1.10.3. Discussion 1.10.4. See Also
1.11. Getting bash for xBSD
1.11.1. Problem 1.11.2. Solution 1.11.3. Discussion 1.11.4. See Also
1.12. Getting bash for Mac OS X
1.12.1. Problem 1.12.2. Solution 1.12.3. Discussion 1.12.4. See Also
1.13. Getting bash for Unix
1.13.1. Problem 1.13.2. Solution 1.13.3. Discussion 1.13.4. See Also
1.14. Getting bash for Windows
1.14.1. Problem 1.14.2. Solution 1.14.3. Discussion 1.14.4. See Also
1.15. Getting bash Without Getting bash
1.15.1. Problem 1.15.2. Solution 1.15.3. Discussion 1.15.4. See Also
1.16. Learning More About bash Documentation
1.16.1. Problem 1.16.2. Solution
1.16.2.1. Official documentation 1.16.2.2. Other documentation
1.16.3. See Also
2. Standard Output
2.1. Writing Output to the Terminal/Window
2.1.1. Problem 2.1.2. Solution 2.1.3. Discussion 2.1.4. See Also
2.2. Writing Output but Preserving Spacing
2.2.1. Problem 2.2.2. Solution 2.2.3. Discussion 2.2.4. See Also
2.3. Writing Output with More Formatting Control
2.3.1. Problem 2.3.2. Solution 2.3.3. Discussion 2.3.4. See Also
2.4. Writing Output Without the Newline
2.4.1. Problem 2.4.2. Solution 2.4.3. Discussion 2.4.4. See Also
2.5. Saving Output from a Command
2.5.1. Problem 2.5.2. Solution 2.5.3. Discussion 2.5.4. See Also
2.6. Saving Output to Other Files
2.6.1. Problem 2.6.2. Solution 2.6.3. Discussion 2.6.4. See Also
2.7. Saving Output from the ls Command
2.7.1. Problem 2.7.2. Solution 2.7.3. Discussion 2.7.4. See Also
2.8. Sending Both Output and Error Messages to Different Files
2.8.1. Problem 2.8.2. Solution 2.8.3. Discussion 2.8.4. See Also
2.9. Sending Both Output and Error Messages to the Same File
2.9.1. Problem 2.9.2. Solution 2.9.3. Discussion 2.9.4. See Also
2.10. Appending Rather Than Clobbering Output
2.10.1. Problem 2.10.2. Solution 2.10.3. Discussion 2.10.4. See Also
2.11. Using Just the Beginning or End of a File
2.11.1. Problem 2.11.2. Solution 2.11.3. Discussion 2.11.4. See Also
2.12. Skipping a Header in a File
2.12.1. Problem 2.12.2. Solution 2.12.3. Discussion 2.12.4. See Also
2.13. Throwing Output Away
2.13.1. Problem 2.13.2. Solution 2.13.3. Discussion 2.13.4. See Also
2.14. Saving or Grouping Output from Several Commands
2.14.1. Problem 2.14.2. Solution 2.14.3. Discussion 2.14.4. See Also
2.15. Connecting Two Programs by Using Output As Input
2.15.1. Problem 2.15.2. Solution 2.15.3. Discussion 2.15.4. See Also
2.16. Saving a Copy of Output Even While Using It As Input
2.16.1. Problem 2.16.2. Solution 2.16.3. Discussion 2.16.4. See Also
2.17. Connecting Two Programs by Using Output As Arguments
2.17.1. Problem 2.17.2. Solution 2.17.3. Discussion 2.17.4. See Also
2.18. Using Multiple Redirects on One Line
2.18.1. Problem 2.18.2. Solution 2.18.3. Discussion 2.18.4. See Also
2.19. Saving Output When Redirect Doesn't Seem to Work
2.19.1. Problem 2.19.2. Solution 2.19.3. Discussion 2.19.4. See Also
2.20. Swapping STDERR and STDOUT
2.20.1. Problem 2.20.2. Solution 2.20.3. Discussion 2.20.4. See Also
2.21. Keeping Files Safe from Accidental Overwriting
2.21.1. Problem 2.21.2. Solution 2.21.3. Discussion 2.21.4. See Also
2.22. Clobbering a File on Purpose
2.22.1. Problem 2.22.2. Solution 2.22.3. Discussion 2.22.4. See Also
3. Standard Input
3.1. Getting Input from a File
3.1.1. Problem 3.1.2. Solution 3.1.3. Discussion 3.1.4. See Also
3.2. Keeping Your Data with Your Script
3.2.1. Problem 3.2.2. Solution 3.2.3. Discussion 3.2.4. See Also
3.3. Preventing Weird Behavior in a Here-Document
3.3.1. Problem 3.3.2. Solution 3.3.3. Discussion 3.3.4. See Also
3.4. Indenting Here-Documents
3.4.1. Problem 3.4.2. Solution 3.4.3. Discussion 3.4.4. See Also
3.5. Getting User Input
3.5.1. Problem 3.5.2. Solution 3.5.3. Discussion 3.5.4. See Also
3.6. Getting Yes or No Input
3.6.1. Problem 3.6.2. Solution 3.6.3. Discussion 3.6.4. See Also
3.7. Selecting from a List of Options
3.7.1. Problem 3.7.2. Solution 3.7.3. Discussion 3.7.4. See Also
3.8. Prompting for a Password
3.8.1. Problem 3.8.2. Solution 3.8.3. Discussion 3.8.4. See Also
4. Executing Commands
4.1. Running Any Executable
4.1.1. Problem 4.1.2. Solution 4.1.3. Discussion 4.1.4. See Also
4.2. Telling If a Command Succeeded or Not
4.2.1. Problem 4.2.2. Solution 4.2.3. Discussion 4.2.4. See Also
4.3. Running Several Commands in Sequence
4.3.1. Problem 4.3.2. Solution 4.3.3. Discussion
4.4. Running Several Commands All at Once
4.4.1. Problem 4.4.2. Solution 4.4.3. Discussion 4.4.4. See Also
4.5. Deciding Whether a Command Succeeds
4.5.1. Problem 4.5.2. Solution 4.5.3. Discussion 4.5.4. See Also
4.6. Using Fewer if Statements
4.6.1. Problem 4.6.2. Solution 4.6.3. Discussion 4.6.4. See Also
4.7. Running Long Jobs Unattended
4.7.1. Problem 4.7.2. Solution 4.7.3. Discussion 4.7.4. See Also
4.8. Displaying Error Messages When Failures Occur
4.8.1. Problem 4.8.2. Solution 4.8.3. Discussion 4.8.4. See Also
4.9. Running Commands from a Variable
4.9.1. Problem 4.9.2. Solution 4.9.3. Discussion 4.9.4. See Also
4.10. Running All Scripts in a Directory
4.10.1. Problem 4.10.2. Solution 4.10.3. Discussion 4.10.4. See Also
5. Basic Scripting: Shell Variables
5.1. Documenting Your Script
5.1.1. Problem 5.1.2. Solution 5.1.3. Discussion 5.1.4. See Also
5.2. Embedding Documentation in Shell Scripts
5.2.1. Problem 5.2.2. Solution 5.2.3. Discussion 5.2.4. See Also
5.3. Promoting Script Readability
5.3.1. Problem 5.2.2. Solution 5.3.3. Discussion 5.3.4. See Also
5.4. Separating Variable Names from Surrounding Text
5.4.1. Problem 5.4.2. Solution 5.4.3. Discussion 5.4.4. See Also
5.5. Exporting Variables
5.5.1. Problem 5.5.2. Solution 5.5.3. Discussion 5.5.4. See Also
5.6. Seeing All Variable Values
5.6.1. Problem 5.6.2. Solution 5.6.3. Discussion 5.6.4. See Also
5.7. Using Parameters in a Shell Script
5.7.1. Problem 5.7.2. Solution 5.7.3. Discussion 5.7.4. See Also
5.8. Looping Over Arguments Passed to a Script
5.8.1. Problem 5.8.2. Solution 5.8.3. Discussion 5.8.4. See Also
5.9. Handling Parameters with Blanks
5.9.1. Problem 5.9.2. Solution 5.9.3. Discussion 5.9.4. See Also
5.10. Handling Lists of Parameters with Blanks
5.10.1. Problem 5.10.2. Solution 5.10.3. Discussion 5.10.4. See Also
5.11. Counting Arguments
5.11.1. Problem 5.11.2. Solution 5.11.3. Discussion 5.11.4. See Also
5.12. Consuming Arguments
5.12.1. Problem 5.12.2. Solution 5.12.3. Discussion 5.12.4. See Also
5.13. Getting Default Values
5.13.1. Problem 5.13.2. Solution 5.13.3. Discussion 5.13.4. See Also
5.14. Setting Default Values
5.14.1. Problem 5.14.2. Solution 5.14.3. Discussion 5.14.4. See Also
5.15. Using null As a Valid Default Value
5.15.1. Problem 5.15.2. Solution 5.15.3. Discussion 5.15.4. See Also
5.16. Using More Than Just a Constant String for Default
5.16.1. Problem 5.16.2. Solution 5.16.3. Discussion 5.16.4. See Also
5.17. Giving an Error Message for Unset Parameters
5.17.1. Problem 5.17.2. Solution 5.17.3. Discussion 5.17.4. See Also
5.18. Changing Pieces of a String
5.18.1. Problem 5.18.2. Solution 5.18.3. Discussion 5.18.4. See Also
5.19. Using Array Variables
5.19.1. Problem 5.19.2. Solution 5.19.3. Description 5.19.4. See Also
6. Shell Logic and Arithmetic
6.1. Doing Arithmetic in Your Shell Script
6.1.1. Problem 6.1.2. Solution 6.1.3. Discussion 6.1.4. See Also
6.2. Branching on Conditions
6.2.1. Problem 6.2.2. Solution 6.2.3. Discussion 6.2.4. See Also
6.3. Testing for File Characteristics
6.3.1. Problem 6.3.2. Solution 6.3.3. Discussion 6.3.4. See Also
6.4. Testing for More Than One Thing
6.4.1. Problem 6.4.2. Solution 6.4.3. Discussion 6.4.4. See Also
6.5. Testing for String Characteristics
6.5.1. Problem 6.5.2. Solution 6.5.3. Discussion 6.5.4. See Also
6.6. Testing for Equal
6.6.1. Problem 6.6.2. Solution 6.6.3. Discussion 6.6.4. See Also
6.7. Testing with Pattern Matches
6.7.1. Problem 6.7.2. Solution 6.7.3. Discussion 6.7.4. See Also
6.8. Testing with Regular Expressions
6.8.1. Problem 6.8.2. Solution 6.8.3. Discussion 6.8.4. See Also
6.9. Changing Behavior with Redirections
6.9.1. Problem 6.9.2. Solution 6.9.3. Discussion 6.9.4. See Also
6.10. Looping for a While
6.10.1. Problem 6.10.2. Solution 6.10.3. Discussion 6.10.4. See Also
6.11. Looping with a read
6.11.1. Problem 6.11.2. Solution 6.11.3. Discussion 6.11.4. See Also
6.12. Looping with a Count
6.12.1. Problem 6.12.2. Solution 6.12.3. Discussion 6.12.4. See Also
6.13. Looping with Floating-Point Values
6.13.1. Problem 6.13.2. Solution 6.13.3. Discussion 6.13.4. See Also
6.14. Branching Many Ways
6.14.1. Problem 6.14.2. Solution 6.14.3. Discussion 6.14.4. See Also
6.15. Parsing Command-Line Arguments
6.15.1. Problem 6.15.2. Solution 6.15.3. Discussion 6.15.4. See Also
6.16. Creating Simple Menus
6.16.1. Problem 6.16.2. Solution 6.16.3. Discussion 6.16.4. See Also
6.17. Changing the Prompt on Simple Menus
6.17.1. Problem 6.17.2. Solution 6.17.3. Discussion 6.17.4. See Also
6.18. Creating a Simple RPN Calculator
6.18.1. Problem 6.18.2. Solution 6.18.3. Discussion 6.18.4. See Also
6.19. Creating a Command-Line Calculator
6.19.1. Problem 6.19.2. Solution 6.19.3. Discussion 6.19.4. See Also
7. Intermediate Shell Tools I
7.1. Sifting Through Files for a String
7.1.1. Problem 7.1.2. Solution 7.1.3. Discussion 7.1.4. See Also
7.2. Getting Just the Filename from a Search
7.2.1. problem 7.2.2. Solution 7.2.3. Discussion 7.2.4. See Also
7.3. Getting a Simple True/False from a Search
7.3.1. problem 7.3.2. Solution 7.3.3. Discussion 7.3.4. See Also
7.4. Searching for Text While Ignoring Case
7.4.1. problem 7.4.2. Solution 7.4.3. Discussion 7.4.4. See Also
7.5. Doing a Search in a Pipeline
7.5.1. problem 7.5.2. Solution 7.5.3. Discussion 7.5.4. See Also
7.6. Paring Down What the Search Finds
7.6.1. problem 7.6.2. Solution 7.6.3. Discussion 7.6.4. See Also
7.7. Searching with More Complex Patterns 7.8. Searching for an SSN
7.8.1. problem 7.8.2. Solution 7.8.3. Discussion 7.8.4. See Also
7.9. Grepping Compressed Files
7.9.1. problem 7.9.2. Solution 7.9.3. Discussion 7.9.4. See Also
7.10. Keeping Some Output, Discarding the Rest
7.10.1. problem 7.10.2. Solution 7.10.3. Discussion 7.10.4. See Also
7.11. Keeping Only a Portion of a Line of Output
7.11.1. problem 7.11.2. Solution 7.11.3. Discussion 7.11.4. See Also
7.12. Reversing the Words on Each Line
7.12.1. problem 7.12.2. Solution 7.12.3. Discussion 7.12.4. See Also
7.13. Summing a List of Numbers
7.13.1. problem 7.13.2. Solution 7.13.3. Discussion 7.13.4. See Also
7.14. Counting String Values
7.14.1. problem 7.14.2. Solution 7.14.3. Discussion 7.14.4. See Also
7.15. Showing Data As a Quick and Easy Histogram
7.15.1. problem 7.15.2. Solution 7.15.3. Discussion 7.15.4. See Also
7.16. Showing a Paragraph of Text After a Found Phrase
7.16.1. Problem 7.16.2. Solution 7.16.3. Discussion 7.16.4. See Also
8. Intermediate Shell Tools II
8.1. Sorting Your Output
8.1.1. Problem 8.1.2. Solution 8.1.3. Discussion 8.1.4. See Also
8.2. Sorting Numbers
8.2.1. Problem 8.2.2. Solution 8.2.3. Discussion 8.2.4. See Also
8.3. Sorting IP Addresses
8.3.1. Problem 8.3.2. Solution 8.3.3. Discussion 8.3.4. See Also
8.4. Cutting Out Parts of Your Output
8.4.1. Problem 8.4.2. Solution 8.4.3. Discussion 8.4.4. See Also
8.5. Removing Duplicate Lines
8.5.1. Problem 8.5.2. Solution 8.5.3. Discussion 8.5.4. See Also
8.6. Compressing Files
8.6.1. Problem 8.6.2. Solution 8.6.3. Discussion 8.6.4. See Also
8.7. Uncompressing Files
8.7.1. Problem 8.7.2. Solution 8.7.3. Discussion 8.7.4. See Also
8.8. Checking a tar Archive for Unique Directories
8.8.1. Problem 8.8.2. Solution 8.8.3. Discussion 8.8.4. See Also
8.9. Translating Characters
8.9.1. Problem 8.9.2. Solution 8.9.3. Discussion 8.9.4. See Also
8.10. Converting Uppercase to Lowercase
8.10.1. Problem 8.10.2. Solution 8.10.3. Discussion 8.10.4. See Also
8.11. Converting DOS Files to Linux Format
8.11.1. Problem 8.11.2. Solution 8.11.3. Discussion 8.11.4. See Also
8.12. Removing Smart Quotes
8.12.1. Problem 8.12.2. Solution 8.12.3. Discussion 8.12.4. See Also
8.13. Counting Lines, Words, or Characters in a File
8.13.1. Problem 8.13.2. Solution 8.13.3. Discussion 8.13.4. See Also
8.14. Rewrapping Paragraphs
8.14.1. Problem 8.14.2. Solution 8.14.3. Discussion 8.14.4. See Also
8.15. Doing More with less
8.15.1. Problem 8.15.2. Solution 8.15.3. Discussion 8.15.4. See Also
9. Finding Files: find, locate, slocate
9.1. Finding All Your MP3 Files
9.1.1. Problem 9.1.2. Solution 9.1.3. Discussion 9.1.4. See Also
9.2. Handling Filenames Containing Odd Characters
9.2.1. Problem 9.2.2. Solution 9.2.3. Discussion 9.2.4. See Also
9.3. Speeding Up Operations on Found Files
9.3.1. Problem 9.3.2. Solution 9.3.3. See Also
9.4. Finding Files Across Symbolic Links
9.4.1. Problem 9.4.2. Solution 9.4.3. Discussion 9.4.4. See Also
9.5. Finding Files Irrespective of Case
9.5.1. Problem 9.5.2. Solution 9.5.3. Discussion 9.5.4. See Also
9.6. Finding Files by Date
9.6.1. Problem 9.6.2. Solution 9.6.3. Discussion 9.6.4. See Also
9.7. Finding Files by Type
9.7.1. Problem 9.7.2. Solution 9.7.3. Discussion 9.7.4. See Also
9.8. Finding Files by Size
9.8.1. Problem 9.8.2. Solution 9.8.3. Discussion 9.8.4. See Also
9.9. Finding Files by Content
9.9.1. Problem 9.9.2. Solution 9.9.3. Discussion 9.9.4. See Also
9.10. Finding Existing Files and Content Fast
9.10.1. Problem 9.10.2. Solution 9.10.3. Discussion 9.10.4. See Also
9.11. Finding a File Using a List of Possible Locations
9.11.1. Problem 9.11.2. Solution 9.11.3. Discussion 9.11.4. See Also
10. Additional Features for Scripting
10.1. "Daemon-izing" Your Script
10.1.1. Problem 10.1.2. Solution 10.1.3. Discussion 10.1.4. See Also
10.2. Reusing Code with Includes and Sourcing
10.2.1. Problem 10.2.2. Solution 10.2.3. Discussion 10.2.4. See Also
10.3. Using Configuration Files in a Script
10.3.1. Problem 10.3.2. Solution 10.3.3. Discussion 10.3.4. See Also
10.4. Defining Functions
10.4.1. Problem 10.4.2. Solution 10.4.3. Discussion 10.4.4. See Also
10.5. Using Functions: Parameters and Return Values
10.5.1. Problem 10.5.2. Solution 10.5.3. Discussion 10.5.4. See Also
10.6. Trapping Interrupts
10.6.1. Problem 10.6.2. Solution 10.6.3. Discussion 10.6.4. See Also
10.7. Redefining Commands with alias
10.7.1. Problem 10.7.2. Solution 10.7.3. Discussion 10.7.4. See Also
10.8. Avoiding Aliases, Functions
10.8.1. Problem 10.8.2. Solution 10.8.3. Discussion 10.8.4. See Also
11. Working with Dates and Times
11.1. Formatting Dates for Display
11.1.1. Problem 11.1.2. Solution 11.1.3. Discussion 11.1.4. See Also
11.2. Supplying a Default Date
11.2.1. Problem 11.2.2. Solution 11.2.3. Discussion 11.2.4. See Also
11.3. Automating Date Ranges
11.3.1. Problem 11.3.2. Solution 11.3.3. Discussion 11.3.4. See Also
11.4. Converting Dates and Times to Epoch Seconds
11.4.1. Problem 11.4.2. Solution 11.4.3. Discussion 11.4.4. See Also
11.5. Converting Epoch Seconds to Dates and Times
11.5.1. Problem 11.5.2. Solution 11.5.3. Discussion 11.5.4. See Also
11.6. Getting Yesterday or Tomorrow with Perl
11.6.1. Problem 11.6.2. Solution 11.6.3. Discussion 11.6.4. See Also
11.7. Figuring Out Date and Time Arithmetic
11.7.1. Problem 11.7.2. Solution 11.7.3. Discussion 11.7.4. See Also
11.8. Handling Time Zones, Daylight Saving Time, and Leap Years
11.8.1. Problem 11.8.2. Solution 11.8.3. See Also
11.9. Using date and cron to Run a Script on the Nth Day
11.9.1. Problem 11.9.2. Solution 11.9.3. Discussion 11.9.4. See Also
12. End-User Tasks As Shell Scripts
12.1. Starting Simple by Printing Dashes
12.1.1. Problem 12.1.2. Solution 12.1.3. Discussion 12.1.4. See Also
12.2. Viewing Photos in an Album
12.2.1. Problem 12.2.2. Solution 12.2.3. Discussion 12.2.4. See Also
12.3. Loading Your MP3 Player
12.3.1. Problem 12.3.2. Solution 12.3.3. Discussion 12.3.4. See Also
12.4. Burning a CD
12.4.1. Problem 12.4.2. Solution 12.4.3. Discussion 12.4.4. See Also
12.5. Comparing Two Documents
12.5.1. Problem 12.5.2. Solution 12.5.3. Discussion 12.5.4. See Also
13. Parsing and Similar Tasks
13.1. Parsing Arguments for Your Shell Script
13.1.1. Problem 13.1.2. Solution 13.1.3. Discussion 13.1.4. See Also
13.2. Parsing Arguments with Your Own Error Messages
13.2.1. Problem 13.2.2. Solution 13.2.3. Discussion 13.2.4. See Also
13.3. Parsing Some HTML
13.3.1. Problem 13.3.2. Solution 13.3.3. Discussion 13.3.4. See Also
13.4. Parsing Output into an Array
13.4.1. Problem 13.4.2. Solution 13.4.3. Discussion 13.4.4. See Also
13.5. Parsing Output with a Function Call
13.5.1. Problem 13.5.2. Solution 13.5.3. Discussion 13.5.4. See Also
13.6. Parsing Text with a read Statement
13.6.1. Problem 13.6.2. Solution 13.6.3. Discussion 13.6.4. See Also
13.7. Parsing with read into an Array
13.7.1. Problem 13.7.2. Solution 13.7.3. Discussion 13.7.4. See Also
13.8. Getting Your Plurals Right
13.8.1. Problem 13.8.2. Solution 13.8.3. Discussion 13.8.4. See Also
13.9. Taking It One Character at a Time
13.9.1. Problem 13.9.2. Solution 13.9.3. Discussion 13.9.4. See Also
13.10. Cleaning Up an SVN Source Tree
13.10.1. Problem 13.10.2. Solution 13.10.3. Discussion 13.10.4. See Also
13.11. Setting Up a Database with MySQL
13.11.1. Problem 13.11.2. Solution 13.11.3. Discussion 13.11.4. See Also
13.12. Isolating Specific Fields in Data
13.12.1. Problem 13.12.2. Solution 13.12.3. Discussion 13.12.4. See Also
13.13. Updating Specific Fields in Data Files
13.13.1. Problem 13.13.2. Solution 13.3. Discussion 13.13.4. See Also
13.14. Trimming Whitespace
13.14.1. Problem 13.14.2. Solution 13.14.3. Discussion 13.14.4. See Also
13.15. Compressing Whitespace
13.15.1. Problem 13.15.2. Solution 13.15.3. Discussion 13.15.4. See Also
13.16. Processing Fixed-Length Records
13.16.1. Problem 13.16.2. Solution 13.16.3. Discussion 13.16.4. See Also
13.17. Processing Files with No Line Breaks
13.17.1. Problem 13.17.2. Solution 13.17.3. Discussion 13.17.4. See Also
13.18. Converting a Data File to CSV
13.18.1. Problem 13.18.2. Solution 13.18.3. Discussion 13.18.4. See Also
13.19. Parsing a CSV Data File
13.19.1. Problem 13.19.2. Solution 13.19.3. Discussion 13.19.4. See Also
14. Writing Secure Shell Scripts
14.1. Avoiding Common Security Problems
14.1.1. Problem 14.1.2. Solution 14.1.3. Discussion 14.1.4. See Also
14.2. Avoiding Interpreter Spoofing
14.2.1. Problem 14.2.2. Solution 14.2.3. Discussion 14.2.4. See Also
14.3. Setting a Secure $PATH
14.3.1. Problem 14.3.2. Solution 14.3.3. Discussion 14.3.4. See Also
14.4. Clearing All Aliases
14.4.1. Problem 14.4.2. Solution 14.4.3. Discussion 14.4.4. See Also
14.5. Clearing the Command Hash
14.5.1. Problem 14.5.2. Solution 14.5.3. Discussion 14.5.4. See Also
14.6. Preventing Core Dumps
14.6.1. Problem 14.6.2. Solution 14.6.3. Discussion 14.6.4. See Also
14.7. Setting a Secure $IFS
14.7.1. Problem 14.7.2. Solution 14.7.3. Discussion 14.7.4. See Also
14.8. Setting a Secure umask
14.8.1. Problem 14.8.2. Solution 14.8.3. Discussion 14.8.4. See Also
14.9. Finding World-Writable Directories in Your $PATH
14.9.1. Problem 14.9.2. Solution 14.9.3. Discussion 14.9.4. See Also
14.10. Adding the Current Directory to the $PATH
14.10.1. Problem 14.10.2. Solution 14.10.3. Discussion 14.10.4. See Also
14.11. Using Secure Temporary Files
14.11.1. Problem 14.11.2. Solution 14.11.3. Discussion 14.11.4. See Also
14.12. Validating Input
14.12.1. Problem 14.12.2. Solution 14.12.3. Discussion 14.12.4. See Also
14.13. Setting Permissions
14.13.1. Problem 14.13.2. Solution 14.13.3. Discussion 14.13.4. See Also
14.14. Leaking Passwords into the Process List
14.14.1. Problem 14.14.2. Solution 14.14.3. Discussion 14.14.4. See Also
14.15. Writing setuid or setgid Scripts
14.15.1. Problem 14.15.2. Solution 14.15.3. Discussion 14.15.4. See Also
14.16. Restricting Guest Users
14.16.1. Problem 14.16.2. Solution 14.16.3. Discussion 14.16.4. See Also
14.17. Using chroot Jails
14.17.1. Problem 14.17.2. Solution 14.17.3. Discussion 14.17.4. See Also
14.18. Running As a Non-root User
14.18.1. Problem 14.18.2. Solution 14.18.3. Discussion 14.18.4. See Also
14.19. Using sudo More Securely
14.19.1. Problem 14.19.2. Solution 14.19.3. Discussion 14.19.4. See Also
14.20. Using Passwords in Scripts
14.20.1. Problem 14.20.2. Solution 14.20.3. Discussion 14.20.4. See Also
14.21. Using SSH Without a Password
14.21.1. Problem 14.21.2. Solution 14.21.3. Discussion 14.21.4. See Also
14.22. Restricting SSH Commands
14.22.1. Problem 14.22.2. Solution 14.22.3. Discussion 14.22.4. See Also
14.23. Disconnecting Inactive Sessions
14.23.1. Problem 14.23.2. Solution 14.23.3. Discussion 14.23.4. See Also
15. Advanced Scripting
15.1. Finding bash Portably for #!
15.1.1. Problem 15.1.2. Solution 15.1.3. Discussion 15.1.4. See Also
15.2. Setting a POSIX $PATH
15.2.1. Problem 15.2.2. Solution 15.2.3. Discussion 15.2.4. See Also
15.3. Developing Portable Shell Scripts
15.3.1. Problem 15.3.2. Solution 15.3.3. Discussion 15.3.4. See Also
15.4. Testing Scripts in VMware
15.4.1. Problem 15.4.2. Solution 15.4.3. Discussion 15.4.4. See Also
15.5. Using for Loops Portably
15.5.1. Problem 15.5.2. Solution 15.5.3. Discussion 15.5.4. See Also
15.6. Using echo Portably
15.6.1. Problem 15.6.2. Solution 15.6.3. Discussion 15.6.4. See Also
15.7. Splitting Output Only When Necessary
15.7.1. Problem 15.7.2. Solution 15.7.3. Discussion 15.7.4. See Also
15.8. Viewing Output in Hex
15.8.1. Problem 15.8.2. Solution 15.8.3. Discussion 15.8.4. See Also
15.9. Using bash Net-Redirection
15.9.1. Problem 15.9.2. Solution 15.9.3. Discussion 15.9.4. See Also
15.10. Finding My IP Address
15.10.1. Problem 15.10.2. Solution 15.10.3. Discussion 15.10.4. See Also
15.11. Getting Input from Another Machine
15.11.1. Problem 15.11.2. Solution 15.11.3. Discussion 15.11.4. See Also
15.12. Redirecting Output for the Life of a Script
15.12.1. Problem 15.12.2. Solution 15.12.3. Discussion 15.12.4. See Also
15.13. Working Around "argument list too long" Errors
15.13.1. Problem 15.13.2. Solution 15.13.3. Discussion 15.13.4. See Also
15.14. Logging to syslog from Your Script
15.14.1. Problem 15.14.2. Solution 15.14.3. Discussion 15.14.4. See Also
15.15. Sending Email from Your Script
15.15.1. Problem 15.15.2. Solution 15.15.3. Discussion 15.15.4. See Also
15.16. Automating a Process Using Phases
15.16.1. Problem 15.16.2. Solution 15.16.3. Discussion 15.16.4. See Also
16. Configuring and Customizing bash
16.1. bash Startup Options
16.1.1. Problem 16.1.2. Solution 16.1.3. Discussion 16.1.4. See Also
16.2. Customizing Your Prompt
16.2.1. Problem 16.2.2. Solution
16.2.2.1. Basic prompts 16.2.2.2. Fancy prompts
16.2.3. Discussion
16.2.3.1. Colors
16.2.4. See Also
16.3. Change Your $PATH Permanently
16.3.1. Problem 16.3.2. Solution 16.3.3. Discussion 16.3.4. See Also
16.4. Change Your $PATH Temporarily
16.4.1. Problem 16.4.2. Solution 16.4.3. Discussion 16.4.4. See Also
16.5. Setting Your $CDPATH
16.5.1. Problem 16.5.2. Solution 16.5.3. Discussion 16.5.4. See Also
16.6. Shortening or Changing Command Names
16.6.1. Problem 16.6.2. Solution 16.6.3. Discussion 16.6.4. See Also
16.7. Adjusting Shell Behavior and Environment
16.7.1. Problem 16.7.2. Solution 16.7.3. Discussion 16.7.4. See Also
16.8. Adjusting readline Behavior Using .inputrc
16.8.1. Problem 16.8.2. Solution 16.8.3. Discussion 16.8.4. See Also
16.9. Keeping a Private Stash of Utilities by Adding ~/bin
16.9.1. Problem 16.9.2. Solution 16.9.3. Discussion 16.9.4. See Also
16.10. Using Secondary Prompts: $PS2, $PS3, $PS4
16.10.1. Problem 16.10.2. Solution 16.10.3. Discussion 16.10.4. See Also
16.11. Synchronizing Shell History Between Sessions
16.11.1. Problem 16.11.2. Solution 16.11.3. Discussion 16.11.4. See Also
16.12. Setting Shell History Options
16.12.1. Problem 16.12.2. Solution 16.12.3. Discussion 16.12.4. See Also
13. Creating a Better cd Command
16.13.1. Problem 16.13.2. Solution 16.13.3. Discussion 16.13.4. See Also
16.14. Creating and Changing into a New Directory in One Step
16.14.1. Problem 16.14.2. Solution 16.14.3. Discussion 16.14.4. See Also
16.15. Getting to the Bottom of Things
16.15.1. Problem 16.15.2. Solution 16.15.3. Discussion 16.15.4. See Also
16.16. Adding New Features to bash Using Loadable Built-ins
16.16.1. Problem 16.16.2. Solution 16.16.3. Discussion 16.16.4. See Also
16.17. Improving Programmable Completion
16.17.1. Problem 16.17.2. Solution 16.17.3. Discussion 16.17.4. See Also
16.18. Using Initialization Files Correctly
16.18.1. Problem 16.18.2. Solution 16.18.3. Discussion 16.18.4. See Also
16.19. Creating Self-Contained, Portable RC Files
16.19.1. Problem 16.19.2. Solution 16.19.3. Discussion
16.19.3.1. Assumptions 16.19.3.2. Criteria
16.19.4. See Also
16.20. Getting Started with a Custom Configuration
16.20.1. Problem 16.20.2. Solution 16.20.3. Discussion 16.20.4. See Also
17. Housekeeping and Administrative Tasks
17.1. Renaming Many Files
17.1.1. Problem 17.1.2. Solution 17.1.3. Discussion 17.1.4. See Also
17.2. Using GNU Texinfo and Info on Linux
17.2.1. Problem 17.2.2. Solution 17.2.3. Discussion 17.2.4. See Also
17.3. Unzipping Many ZIP Files
17.3.1. Problem 17.3.2. Solution 17.3.3. Discussion 17.3.4. See Also
17.4. Recovering Disconnected Sessions Using screen
17.4.1. Problem 17.4.2. Solution 17.4.3. Discussion
17.4.3.1. Caveats 17.4.3.2. Configuration
17.4.4. See Also
17.5. Sharing a Single bash Session
17.5.1. Problem 17.5.2. Solution 17.5.3. Discussion 17.5.4. See Also
17.6. Logging an Entire Session or Batch Job
17.6.1. Problem 17.6.2. Solution 17.6.3. Discussion 17.6.4. See Also
17.7. Clearing the Screen When You Log Out
17.7.1. Problem 17.7.2. Solution 17.7.3. Discussion 17.7.4. See Also
17.8. Capturing File Metadata for Recovery
17.8.1. Problem 17.8.2. Solution 17.8.3. Discussion 17.8.4. See Also
17.9. Creating an Index of Many Files
17.9.1. Problem 17.9.2. Solution 17.9.3. Discussion 17.9.4. See Also
17.10. Using diff and patch
17.10.1. Problem 17.10.2. Solution 17.10.3. Discussion 17.10.4. See Also
17.11. Counting Differences in Files
17.11.1. Problem 17.11.2. Solution 17.11.3. Discussion 17.11.4. See Also
17.12. Removing or Renaming Files Named with Special Characters
17.12.1. Problem 17.12.2. Solution 17.12.3. Discussion 17.12.4. See Also
17.13. Prepending Data to a File
17.13.1. Problem 17.13.2. Solution 17.13.3. Discussion 17.13.4. See Also
17.14. Editing a File in Place
17.14.1. Problem 17.14.2. Solution 17.14.3. Discussion 17.14.4. See Also
17.15. Using sudo on a Group of Commands
17.15.1. Problem 17.15.2. Solution 17.15.3. Discussion 17.15.4. See Also
17.16. Finding Lines in One File But Not in the Other
17.16.1. Problem 17.16.2. Solution 17.16.3. Discussion 17.16.4. See Also
17.17. Keeping the Most Recent N Objects
17.17.1. Problem 17.17.2. Solution 17.17.3. Discussion 17.17.4. See Also
17.18. Grepping ps Output Without Also Getting the grep Process Itself
17.18.1. Problem 17.18.2. Solution 17.18.3. Discussion 17.18.4. See Also
17.19. Finding Out Whether a Process Is Running
17.19.1. Problem 17.19.2. Solution 17.19.3. Discussion 17.19.4. See Also
17.20. Adding a Prefix or Suffix to Output
17.20.1. Problem 17.20.2. Solution 17.20.3. Discussion 17.20.4. See Also
17.21. Numbering Lines
17.21.1. Problem 17.21.2. Solution 17.21.3. Discussion 17.21.4. See Also
17.22. Writing Sequences
17.22.1. Problem 17.22.2. Solution 17.22.3. Discussion 17.22.4. See Also
17.23. Emulating the DOS Pause Command
17.23.1. Problem 17.23.2. Solution 17.23.3. Discussion 17.23.4. See Also
17.24. Commifying Numbers
17.24.1. Problem 17.24.2. Solution 17.24.3. Discussion 17.24.4. See Also
18. Working Faster by Typing Less
18.1. Moving Quickly Among Arbitrary Directories
18.1.1. Problem 18.1.2. Solution 18.1.3. Discussion 18.1.4. See Also
18.2. Repeating the Last Command
18.2.1. Problem 18.2.2. Solution 18.2.3. Description 18.2.4. See Also
18.3. Running Almost the Same Command
18.3.1. Problem 18.3.2. Solution 18.3.3. Discussion 18.3.4. See Also
18.4. Substituting Across Word Boundaries
18.4.1. Problem 18.4.2. Solution 18.4.3. Discussion 18.4.4. See Also
18.5. Reusing Arguments
18.5.1. Problem 18.5.2. Solution 18.5.3. Discussion 18.5.4. See Also
18.6. Finishing Names for You
18.6.1. Problem 18.6.2. Solution 18.6.3. Discussion 18.6.4. See Also
18.7. Playing It Safe
18.7.1. Problem 18.7.2. Solution 18.7.3. Discussion 18.7.4. See Also
19. Tips and Traps: Common Goofs for Novices
19.1. Forgetting to Set Execute Permissions
19.1.1. Problem 19.1.2. Solution 19.1.3. Discussion 19.1.4. See Also
19.2. Fixing "No such file or directory" Errors
19.2.1. Problem 19.2.2. Solution 19.2.3. Discussion 19.2.4. See Also
19.3. Forgetting That the Current Directory Is Not in the $PATH
19.3.1. Problem 19.3.2. Solution 19.3.3. Discussion 19.3.4. See Also
19.4. Naming Your Script Test
19.4.1. Problem 19.4.2. Solution 19.4.3. Discussion 19.4.4. See Also
19.5. Expecting to Change Exported Variables
19.5.1. Problem 19.5.2. Solution 19.5.3. Discussion 19.5.4. See Also
19.6. Forgetting Quotes Leads to "command not found" on Assignments
19.6.1. Problem 19.6.2. Solution 19.6.3. Discussion 19.6.4. See Also
19.7. Forgetting That Pattern Matching Alphabetizes 19.8. Forgetting That Pipelines Make Subshells
19.8.1. Problem 19.8.2. Solution 19.8.3. Discussion 19.8.4. See Also
19.9. Making Your Terminal Sane Again
19.9.1. Problem 19.9.2. Solution 19.9.3. Discussion 19.9.4. See Also
19.10. Deleting Files Using an Empty Variable
19.10.1. Problem 19.10.2. Solution 19.10.3. Discussion 19.10.4. See Also
19.11. Seeing Odd Behavior from printf
19.11.1. Problem 19.11.2. Solution 19.11.3. Discussion 19.11.4. See Also
19.12. Testing bash Script Syntax
19.12.1. Problem 19.12.2. Solution 19.12.3. Discussion 19.12.4. See Also
19.13. Debugging Scripts
19.13.1. Problem 19.13.2. Solution 19.13.3. Discussion 19.13.4. See Also
19.14. Avoiding "command not found" When Using Functions
19.14.1. Problem 19.14.2. Solution 19.14.3. Discussion 19.14.4. See Also
19.15. Confusing Shell Wildcards and Regular Expressions
19.15.1. Problem 19.15.2. Solution 19.15.3. Discussion 19.15.4. See Also
A. Reference Lists
A.1. bash Invocation A.2. Prompt String Customizations A.3. ANSI Color Escape Sequences A.4. Built-in Commands and Reserved Words A.5. Built-in Shell Variables A.6. set Options A.7. shopt options A.8. Adjusting Shell Behavior Using set, shopt, and Environment Variables A.9. Test Operators A.10. I/O Redirection A.11. echo Options and Escape Sequences A.12. printf
A.12.1. Examples A.12.2. See Also
A.13. Date and Time String Formatting with strftime A.14. Pattern-Matching Characters A.15. extglob Extended Pattern-Matching Operators A.16. tr Escape Sequences A.17. Readline Init File Syntax A.18. emacs Mode Commands A.19. vi Control Mode Commands A.20. Table of ASCII Values
B. Examples Included with bash
B.1. Startup-Files Directory Examples
C. Command-Line Processing
C.1. Command-Line Processing Steps
C.1.1. Quoting C.1.2. eval
D. Revision Control
D.1. CVS
D.1.1. Pros D.1.2. Cons D.1.3. Example D.1.4. See Also
D.2. Subversion
D.2.1. Pros D.2.2. Cons D.2.3. Example D.2.4. See Also
D.3. RCS
D.3.1. Pros D.3.2. Cons D.3.3. Example D.3.4. Workon Script D.3.5. See Also
D.4. Other
D.4.1. Document Comparison D.4.2. Change Tracking and Versions D.4.3. Accessing These Features
E. Building bash from Source
E.1. Obtaining bash E.2. Unpacking the Archive E.3. What's in the Archive
E.3.1. Documentation E.3.2. Configuring and Building bash E.3.3. Testing bash E.3.4. Potential Problems E.3.5. Installing bash as a Login Shell E.3.6. Examples
E.4. Who Do I Turn To?
E.4.1. Asking Questions E.4.2. Reporting Bugs
Colophon
  • ← Prev
  • Back
  • Next →
  • ← Prev
  • Back
  • Next →

Chief Librarian: Las Zenow <zenow@riseup.net>
Fork the source code from gitlab
.

This is a mirror of the Tor onion service:
http://kx5thpx2olielkihfyo4jgjqfb7zx7wxr3sd4xzt26ochei4m6f7tayd.onion