If you’ve encountered the error message “Syntax error: redirection unexpected” while running a script in Ubuntu Linux, you’re not alone. This error can be a bit puzzling, especially if you’re migrating from a different Linux distribution like SUSE, where you didn’t encounter the same issue. In this article, we’ll explain why this error occurs and provide you with a solution to get your script running smoothly.

The Problem

Here’s the scenario: You have a script that includes the following line of code:

read direc <<< $(basename `pwd`)

However, when you attempt to run this script in Linux, you encounter the dreaded “Syntax error: redirection unexpected.” This error message is puzzling, especially if you’ve tested the script on another Linux distribution like SUSE without any issues.

The root cause of this error lies in the default shell used in the Ubuntu you are using. Ubuntu uses Dash (Debian Almquist Shell) as its default system shell, not Bash. Dash is a lightweight, POSIX-compliant shell, and it does not support certain features that Bash provides, such as the <<< redirection operator.

Let’s delve into the reasons behind this error and how to resolve it.

The Solution

To resolve the “Syntax error: redirection unexpected” issue, you need to ensure that your script explicitly uses Bash rather than the default system shell (Dash). Here’s how to do it:

Step 1: Update the Shebang Line

Open your script in a text editor and locate the shebang line at the top. The shebang line specifies which shell should be used to interpret the script. Make sure it points to Bash. You have two options:

Option 1: Use an Absolute Path to Bash


Option 2: Use env to Locate Bash

#!/usr/bin/env bash

Step 2: Make the Script Executable

If your script is not already marked as executable, you’ll need to do so. In the terminal, navigate to the directory containing your script and run the following command:

chmod +x script.sh

Step 3: Run the Script

Now, you can execute your script with the following command:


Best Practice: Do not use explicit sh command

Do not use the explicit sh command to run the script, as it will ignore the shebang line and use the default system shell (Dash) instead.

# Don't do this!
sh ./script.sh

Additional Consideration

If you’re running your script with sudo privileges, make sure to specify Bash explicitly as well. Here’s the correct way to run a script with sudo:

sudo bash ./script.sh

Using sudo sh ./script.sh would still invoke the default system shell, which is not what you want.


The “Syntax error: redirection unexpected” error in Ubuntu Linux is caused by the default use of Dash as the system shell, which lacks support for certain Bash features. To resolve this issue, update the shebang line in your script to explicitly specify Bash and ensure your script is executable. By following these steps, you can run your script smoothly on Ubuntu and avoid encountering this error.

Microsoft MVP

Chris Pietschmann is a Microsoft MVP, HashiCorp Ambassador, and Microsoft Certified Trainer (MCT) with 20+ years of experience designing and building Cloud & Enterprise systems. He has worked with companies of all sizes from startups to large enterprises. He has a passion for technology and sharing what he learns with others to help enable them to learn faster and be more productive.
HashiCorp Ambassador Microsoft Certified Trainer (MCT) Microsoft Certified: Azure Solutions Architect