С помощью 1>&2
вы перенаправляете стандартный вывод туда, куда идет стандартная ошибка. Это делается не часто.
С 2>&1
вы делаете обратное, что более распространено.
Делая это:
$ echo "hello world" >hello.out 1>&2
hello world
$ cat hello.out
Я получаю "hello world" в потоке ошибок, но >hello.out
также создает пустой файл hello.out
(или усекает его, если он существует).
Это последнее перенаправление в строке, которая «выигрывает», но файл создается, когда перенаправление анализируется слева направо, перед выполнением команды.
В случае с вами (те .
в конце командных строк, которые у вас есть, вероятно, является опечаткой, верно?):
$ sqlite -echo test.sqlite <test44.sql >test44.out 1>&2
Это должно работать так же, как мой тест echo
выше, поскольку sqlite
(или, по крайней мере, sqlite3
на OpenBSD, с которым я тестирую), выводит выполненные команды SQL в стандартный вывод.