Различие между командой 'ls 2> tmp> tmp' и командой 'ls> tmp'

[115119] С помощью [115539] find[115540] с помощью [115541] stat[115542] можно найти все файлы с меткой времени модификации в понедельник следующим образом: [12112] команда [115543] find[115544] найдет все файлы и проанализирует их, которые будут переданы на фильтр [115545] awk[115546]. Команда [115547]awk[115548] будет соответствовать полю 10, которое является временем модификации файла со строкой [115549] "Mon"[115550] для извлечения файлов, измененных по понедельникам. Вы можете удалить [115553] $16[115554], чтобы распечатать все поля или использовать любое число для распечатки выбранных полей.[12113] Пример вывода первой части (на ОС X ):[12114]16777218 20556154 -rwxr-xr-x 1 корневое колесо 0 19600 "Mon" "Thu" "Thu" "Sat" 4096 16 0x20 . /бин/ду[12115]16777218 20547205 -rwxr-xr-x 1 корневое колесо 0 14256 "ср" "ту" "ту" "ср" 4096 16 0x20 ./бин/ карликовая свалка[12116]16777218 20586248 -rwxr-xr-x 2 корневое колесо 0 925 "фри" "ту" "ту" "солнце" 4096 0 0x20 . /bin/easy_install[12117]
1
06.01.2019, 15:48
2 ответа
[1181636]Короткий ответ: [1182064]ls 2>tmp >tmp[1182065] перенаправляют оба [1182066] stdout[1182067] и [1182068] stderr[1182069] в файл [1182070]tmp[1182071], в то время как [1182072]ls > tmp[1182073] перенаправляют только [1182074]stdout[1182075] в файл [1182076] tmp[1182077]. [12143]Попробуйте увидеть разницу:[12144]
5
27.01.2020, 23:12
[1181656] Обратите внимание, что вам не следует этого делать: [12154] Над оболочкой открывается [1182084]tmp[1182085] для записи на дескриптор 2, затем открывается [1182086]tmp[1182087] для повторной записи на дескриптор 1, а затем выполняется [1182088]ls[1182089]. У вас будет два дескриптора [1182090]ls[1182091], указывающие на два отдельных описания открытых файлов в одном и том же файле.[12155] Если [1182092]ls[1182093] запишет и на свой дескриптор 1 (stdout для списка файлов), и на дескриптор 2 (stderr для сообщений об ошибках), то эти выходы перезапишут друг друга (предполагая, что [1182094]tmp[1182095] является обычным файлом, а не именованной трубкой). [12156]На самом деле вывод stdout будет буферизован, поэтому более вероятно, что он будет записан в конце перед выходом [1182096]ls[1182097], поэтому он перезапишет вывод stderr. [12157]Пример:[12158]Вы должны использовать:[12159]или[12160]В этом случае оболочка открывает [1182098]tmp[1182099] в fd 2, а затем дублирует этот fd на fd 1, так что оба fd 1 и 2 будут иметь одно и то же описание открытого файла на [1182100]tmp[1182101], и выходы не будут перезаписывать друг друга.[12161]
3
27.01.2020, 23:12

Теги

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