Попробуйте создать простой файл bash
#!/bin/bash
echo $@
И запустить
./bash.sh file1 file2 file3 file4 > file5
даст вам
file1 file2 file3 file4
./bash.sh file1 file3 file4 >file5 <file2
даст вам
file1 file3 file4
в файле 5 вы видите список аргументов, то, что делает cat, принимает список аргументов и записывает его в вывод std, поэтому файл 2 игнорируется, это не параметр, а фактически вход
если вы хотите, чтобы cat читал из std input assign - после команды
cat file1 > file5 < file2 file3 file4 -
это будет записывать
1111
3333
4444
2222
в файл 5
<означает перенаправление ввода std, если вы пишете </p>
cat file1 > file5 file3 file4 -
, он читает из файла file1, file3 и file4 и вашей клавиатуры в файл5