📖 Scenario: You work with text files and want to compare their contents quickly without creating temporary files.
🎯 Goal: Learn how to use process substitution <() and >() in bash to handle command outputs as files.
📋 What You'll Learn
Create variables holding file names
Use process substitution to compare file contents
Redirect command output using process substitution
Print the comparison result
💡 Why This Matters
🌍 Real World
Process substitution helps you compare or process data streams easily without creating temporary files, saving time and disk space.
💼 Career
Many system administrators and developers use process substitution in bash scripts to automate file comparisons and data processing efficiently.
Progress0 / 4 steps
1
Create two text files
Create two variables called file1 and file2 with values "file1.txt" and "file2.txt" respectively. Then create these files with the following contents: file1.txt contains "apple\nbanana\ncherry" and file2.txt contains "apple\nbanana\norange".
Bash Scripting
Hint
Use echo -e with newline characters \n to write multiple lines to files.
2
Set up a variable for the diff command
Create a variable called diff_cmd and set it to the string "diff".
Bash Scripting
Hint
Just assign the string "diff" to the variable diff_cmd.
3
Use process substitution to compare files
Use the variable diff_cmd with process substitution to compare the contents of file1 and file2. Write a command using $diff_cmd and process substitution <(cat "$file1") and <(cat "$file2").
Bash Scripting
Hint
Use diff_output=$($diff_cmd <(cat "$file1") <(cat "$file2")) to capture the diff output.
4
Print the diff result
Print the variable diff_output using echo.
Bash Scripting
Hint
Use echo "$diff_output" to show the differences.
Practice
(1/5)
1. What does the process substitution syntax <() do in bash scripting?
easy
A. It runs a command and waits for user input.
B. It redirects the output of a command to a file on disk.
C. It creates a temporary file with command output saved.
D. It runs a command and provides its output as a file input to another command.
Solution
Step 1: Understand process substitution <()
This syntax runs a command and makes its output appear as a file that another command can read.
Step 2: Compare with other options
Unlike redirecting output to a disk file, <() creates a temporary file descriptor for input.
Final Answer:
It runs a command and provides its output as a file input to another command. -> Option D
Quick Check:
Process substitution <() = command output as input file [OK]
Hint: Remember: <() gives command output as a file input [OK]
Common Mistakes:
Confusing <() with output redirection >
Thinking it creates a real disk file
Assuming it waits for user input
2. Which of the following is the correct syntax to use process substitution to compare two files file1 and file2 using diff?
easy
A. diff <(cat file1) <(cat file2)
B. diff >(cat file1) >(cat file2)
C. diff <(file1) <(file2)
D. diff file1 >() file2
Solution
Step 1: Identify correct process substitution usage
Using <() runs commands and provides their output as files to diff.
Step 2: Check each option
diff <(cat file1) <(cat file2) correctly uses cat file1 and cat file2 inside <(). Options B, C, and D misuse syntax or operators.
Final Answer:
diff <(cat file1) <(cat file2) -> Option A
Quick Check:
Correct syntax for process substitution in diff = diff <(cat file1) <(cat file2) [OK]
Hint: Use <() with commands producing input, not >() [OK]
Common Mistakes:
Using >() instead of <() for input
Trying to put filenames directly inside <()
Mixing redirection symbols incorrectly
3. What will be the output of the following bash command?
comm -12 <(sort fileA.txt) <(sort fileB.txt)
Assuming fileA.txt contains: apple
banana
carrot and fileB.txt contains: banana
carrot
date
medium
A. apple
banana
carrot
date
B. banana
carrot
C. apple
D. banana
carrot
date
apple
Solution
Step 1: Understand comm -12 with process substitution
The command compares sorted files and outputs lines common to both (options 1 and 2).
Step 2: Sort and compare file contents
Sorted fileA.txt: apple, banana, carrot Sorted fileB.txt: banana, carrot, date Common lines: banana, carrot
Final Answer:
banana
carrot -> Option B
Quick Check:
Common sorted lines = banana and carrot [OK]
Hint: comm -12 shows common lines from sorted inputs [OK]
Common Mistakes:
Not sorting files before comm
Expecting all lines combined
Confusing comm options
4. Identify the error in this script snippet using process substitution:
grep 'error' >(sort > errors_sorted.txt)
medium
A. Using >() where <() is needed for input
B. Missing quotes around 'error'
C. Cannot redirect output inside >()
D. sort command should be outside process substitution
Solution
Step 1: Analyze the use of >() in the command
The syntax >() creates a writable file descriptor for output redirection, but here grep expects a file input, not output.
Step 2: Determine correct substitution type
To provide input from a command, <() should be used. Using >() here is incorrect.
Final Answer:
Using >() where <() is needed for input -> Option A
Quick Check:
Input needs <() not >() [OK]
Hint: Use <() for input, >() for output redirection [OK]
Common Mistakes:
Confusing input and output process substitution
Assuming >() can be nested inside commands
Ignoring command expectations for input/output
5. You want to run a command that reads from a file and writes output to another command simultaneously, without creating temporary files on disk. Which process substitution usage correctly achieves this?
command1 <(producer) >(consumer)
What does this setup do?
hard
A. Runs command1 output to producer and input from consumer.
B. Creates two temporary files for producer and consumer.
C. Runs producer and feeds its output as input to command1, then sends command1 output to consumer.
D. Runs consumer first, then producer.
Solution
Step 1: Understand <() and >() roles
<() provides command output as input file, >() provides a writable file for output redirection.
Step 2: Analyze the command flow
producer output feeds command1 input via <(), and command1 output is sent to consumer via >().
Final Answer:
Runs producer and feeds its output as input to command1, then sends command1 output to consumer. -> Option C
Quick Check:
<() input, >() output redirection [OK]
Hint: Use <() for input, >() for output to chain commands [OK]
Common Mistakes:
Mixing input and output substitutions
Assuming temporary disk files are created
Confusing command execution order
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.