13

I ran a deployment script to setup my server as root. Then I tried to run another script called test.sh which had the following lines in it:

# Logging
exec  > >(tee -a /var/log/test_full.log)
exec 2> >(tee -a /var/log/test_error.log)

However when I try this I get the following error:

test.sh: 19: test.sh: Syntax error: redirection unexpected

What might be causing this issue do you think? I've not heard of this error before.

Jimmy
  • 12,087
  • 28
  • 102
  • 192

2 Answers2

19

This answer solves your problem, assuming that your script snippet is complete.

In brief, you are running your script through dash, not bash. The solution is as simple as adding the necessary #!/bin/bash

What a system runs by default if the #! is missing varies from system to system. On my system, I don't get your error because a shell that understands your redirections is run by default. I've had to simulate the case where dash would be the default shell to reproduce your error.

Community
  • 1
  • 1
Louis
  • 146,715
  • 28
  • 274
  • 320
  • Hi. Sorry to be a pain but both files start with #!/bin/bash – Jimmy Nov 24 '13 at 20:57
  • 1
    Fact: when I run your ``test.sh`` script as ``bash test.sh`` there's no error, but when I run it with ``dash test.sh`` I get the exact error you get. For whatever reason exists on your system, it's not ``bash`` that is executing your script. – Louis Nov 24 '13 at 21:00
  • 2
    Ah, it's because I ran it "sh test.sh" I think! – Jimmy Nov 24 '13 at 21:26
11

Assuming you run your script with ./myscript, make sure your scripts starts with

#!/bin/bash

and not #!/bin/sh or anything else. The error suggests that another shell than Bash is used.

If your script indeed do, check that /bin/bash is not a symbolic link and that it indeed is Bash with /bin/bash --version .

damienfrancois
  • 52,978
  • 9
  • 96
  • 110