Unix / Linux - Shell 輸入/輸出重定向

Hello there, future command-line wizards! Today, we're going to embark on an exciting journey into the world of Unix/Linux shell input/output redirections. Don't worry if you've never written a line of code before – I'll guide you through this adventure step by step, just like I've done for countless students over my years of teaching. So, grab your virtual hard hats, and let's dive in!

Unix / Linux - IO Redirections

Understanding the Basics

Before we jump into the nitty-gritty, let's start with a simple analogy. Imagine the shell as a helpful assistant. Normally, this assistant reads your commands from the keyboard (standard input), shows results on the screen (standard output), and displays errors on the screen too (standard error). But what if we want to change this default behavior? That's where I/O redirection comes in handy!

Output Redirection

The Magic of '>'

Let's start with output redirection. The '>' symbol is our first magic wand. It allows us to send the output of a command to a file instead of the screen.

echo "Hello, World!" > greeting.txt

If you run this command, it won't show anything on the screen. Instead, it creates a file named 'greeting.txt' containing "Hello, World!". If the file already exists, it gets overwritten. Be careful with this power!

Append with '>>'

Now, what if you want to add more to an existing file without overwriting it? That's where '>>' comes to the rescue.

echo "How are you?" >> greeting.txt

This command appends "How are you?" to our 'greeting.txt' file. If you open the file now, you'll see both lines.

Input Redirection

Reading from Files with '<'

Just as we can redirect output, we can also redirect input. The '<' symbol allows us to use a file as input for a command.

sort < names.txt

This command reads the content of 'names.txt' and sorts it alphabetically. It's like telling the 'sort' command, "Hey, instead of waiting for me to type names, read them from this file!"

Here Document

The Magic of '<<'

Sometimes, we want to pass multiple lines of input to a command. That's where the 'here document' comes in, using '<<'.

cat << EOF
This is line 1
This is line 2
EOF

This nifty trick allows you to input multiple lines until the shell encounters 'EOF' (which stands for End Of File, but you can use any word).

Discard the Output

The Quiet '/dev/null'

There are times when we run a command but don't care about its output. Enter '/dev/null', the digital black hole of Unix/Linux.

ls non_existent_file 2> /dev/null

This command tries to list a non-existent file, but instead of showing an error, it silently discards it. It's like having a "mute" button for your commands!

Redirection Commands

Let's summarize the redirection commands we've learned in a handy table:

Command Description
> Redirects output to a file (overwrites)
>> Appends output to a file
< Redirects input from a file
<< Here document (multi-line input)
2> Redirects error output
&> Redirects both standard output and error

Practical Examples

Now that we've covered the basics, let's look at some practical examples to solidify our understanding.

Combining Input and Output Redirection

sort < unsorted_names.txt > sorted_names.txt

This command reads names from 'unsorted_names.txt', sorts them, and writes the sorted list to 'sorted_names.txt'. It's like having a personal organizer for your files!

Redirecting Both Output and Errors

ls /home /nonexistent 1> output.txt 2> error.txt

Here, we're listing two directories. The standard output (successful listing of /home) goes to 'output.txt', while any errors (like trying to list the non-existent directory) go to 'error.txt'.

Using Here Document for Script Input

mysql -u username -p << EOF
USE mydatabase;
SELECT * FROM users;
EXIT
EOF

This example uses a here document to run multiple MySQL commands without having to enter interactive mode. It's like giving your database a to-do list!

Conclusion

Congratulations! You've just taken your first steps into the powerful world of I/O redirection in Unix/Linux. Remember, like any skill, mastering these concepts takes practice. Don't be afraid to experiment – that's how we all learn!

In my years of teaching, I've seen students go from struggling with these concepts to becoming command-line ninjas. One of my students even joked that after learning I/O redirection, she felt like a "file whisperer" – able to make data flow exactly where she wanted it to go.

So, keep exploring, keep practicing, and soon you'll be redirecting input and output like a pro. Who knows? Maybe you'll be the next "file whisperer" in your coding journey!

Credits: Image by storyset