Если это происходит, Вы несомненно вставили символ новой строки сами. cat
связывает их, точно так же, как это всегда делает. Можно протестировать это при помощи cat
сначала записать и затем конкатенировать:
cat > file1
# write something
# hit Ctrl+D twice to end file
# repeat steps with file2
cat file1 file2
Нет. Только оболочка может изменить свою собственную среду; set
и export
должен всегда создаваться-ins.
Это также верно для cd
, alias
и так далее.
Лучшее, которое я могу предложить, должно повторно реализовать Вашу обертку с помощью функции оболочки. Или это или сценарий оболочки, который Вы "получаете". Так или иначе обертка, которая работает в оболочке, может сделать эти вещи больше беспрепятственно.
Возможное обходное решение для Вашей исходной проблемы было бы оберткой для Вашей обертки (изображение Xzibit, не включенное):
#!/bin/bash
command="$1"
temp=$(mktemp -d)
> "$temp/$command"
chmod a+x "$temp/$command"
PATH+=:$temp
your_wrapper
rm -r "$temp"
Это создает пустой исполняемый файл, который пройдет тесты Вашей обертки, не переопределяя команду, которую Вы на самом деле хотите выполнить (встроенное).