The second entry should work fine. The "ambiguous redirect" error sometimes happens if you either have spaces where they shouldn't be, or conversely when an important space is missing.
I would simplify your command to demonstrate:
echo "Test" >/tmp/x.txt 2>&1 &
The ">/tmp/x.txt" part will redirect stdout (file handle #1). A space between the > and the file name is permitted (although in this context would be confusing), but otherwise there should not be any spaces in here.
The 2>&1 will redirect stderr (file handle 2) to whatever file handle 1 goes to (which is stdout). There must not be any spaces in here, either.
The & will background your task. This must be offset with a space from the preceding character.
Reversing the two redirections does not work (although echo is a poor choice here since it does not produce stderr output):
echo "This will not work" 2>&1 >/tmp/x.txt &
This means:
2>&1
Redirect file handle 2 to where file handle 1 goes (which at this point is still the console)
>/tmp/x.txt
Redirect file handle 1 to a file - but since file handle 2 (stderr) is already redirected at this point, it will keep its destination and still go to the console.
The first command you wrote is simply a syntax error.
echo &>/tmp/x.txt
Update: @Wildcard pointed out in the comments that this is actually valid syntax.
echo &> foo
. (2) Don’t give example commands that are asynchronous if you don’t have to. (3) Learn about shells. There’s more than one shell in the Unixverse, and they accept different command syntaxes. Learn how to tell what shell you’re using.