Как работает перенаправление ввода / вывода оболочки «1 <> файл»?

Оберните URL в одиночные кавычки. Происходит то, что амперсанд интерпретируется оболочкой.

curl 'http://172.16.0.47/index.php?ACT=47&id=6'
1
31.03.2018, 16:18
1 ответ

Это было в ответе, который Стефан Шазела написал . Это функция оболочки POSIX и не относится к bash. Он будет упомянут в руководстве к вашей оболочке вместе с описаниями других операторов перенаправления.

1<>fileоткрывает стандартный вывод, файловый дескриптор 1, как для чтения, так и для записи, и присоединяет его к файлу с именем fileв текущем каталоге.

Прежде чем это произойдет, он уже прикрепил стандартный ввод из того же файла.

Затем

trбудет читать со своего стандартного ввода из fileи заменит все символы новой строки на нулевые символы. Вывод из trзаписывается обратно в тот же файл.

Это работает до тех пор, пока результат команды trточно такой же длины, как исходные данные в file.

Если результат trкороче исходного файла, вы получите «старые данные» в конце файла:

$ cat file
too many @ here: @@@@
the end
$ tr -s '@' <file 1<>file
$ cat file
too many @ here: @
the end
nd

Обратите внимание, что он не может использовать >как в

tr '\n' '\0' <file >file

поскольку это усекает fileдо того, как trсможет прочитать из него(1<>не усекает выходной файл, но создает его, если он еще не существует ).

Он также не может использовать >>как в

tr '\n' '\0' <file >>file

, так как это добавит вывод из trв конец файла и оставит старые данные на месте.

2
27.01.2020, 23:32

Теги

Похожие вопросы