Автор Тема: Пренасочване на изхода в bash  (Прочетена 13157 пъти)

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Правя си тук едни експерименти. Пускам пакетно изпълнение, което оперира върху определен каталог. До тук добре. Обаче от време на време получавам разни съобщения на екрана, които бих искал да запазя за проверка. Понякога това са грешки. Списъка е прекалено дълъг и не се хваща в буфера, че да си ги копна от там.

Пробвах разбира се с пренасочване тип >> file. Обаче не работи нито като дам ./script.sh >> file, нито вътре в самия него. Той реално е един прост цикъл  (for file in /home/user/t/proba/4/index*; do) който подава на друго пакетно изпълнение. Не работи и вътре в него да дам ./script-2.sh "$file" >> file.

Когато в конзолката напиша ./script.sh | less това работи. Обаче така ръчно трябва да си взимам изхода и слагам някъде, защото няма как да го запазя от less или more. Така и правя. Но се чудя при друг случай, като пак ми се наложи, дали няма по-добър начин? Някой знае ли?


Благодаря!
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #1 -: Mar 04, 2021, 12:36 »
Пробва ли с tee?

Код:
./script-2.sh | tee -a output.txt
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Пренасочване на изхода в bash
« Отговор #2 -: Mar 04, 2021, 13:54 »
За съжаление не стана нито на първия, нито на втория. Аз всъщност се оказа, че лъжа, че с less става. Първия създава обвивка, втория създава обвивка и stdout и stderr, кой знае в кое небитие отиват. Имаше нещо за пренасочването им чрез променливи или беше четене на tty, ама съм забравил.

Както и да е. Реално намерих, каквото ме интересуваше да знам, но беше за някаква бъдеща употреба.

Благодаря ти!
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

programings

  • Напреднали
  • *****
  • Публикации: 221
  • Distribution: Arch Linux, BunsenLabs Linux, FreeBSD
  • Window Manager: XFCE, MATE, Openbox
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #3 -: Mar 05, 2021, 01:52 »
exec &>/път/до/файл след shebang-а?
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Пренасочване на изхода в bash
« Отговор #4 -: Mar 05, 2021, 08:18 »
Това не го разбрах. Предлагаш да го направя така?

С какво ми помага тази замяна на „картинката“?

Забавен факт. Не съществува man единичка за exec има само за семейство функции на C. Но от там разбрах за какво става въпрос. По принцип не знам защо се ползва това изолиране, като по принцип sh си прави нещо подобно.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

remotexx

  • Напреднали
  • *****
  • Публикации: 3210
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #5 -: Mar 05, 2021, 15:40 »
 Гога, не разбрах сега оправи ли се, или още чекаш някой да те оправи? Т.е. ти каза че си намерил решение, ама не разбрах какво, освен с копиране от терминала, което не се брои..
и моите 5 ст.

https://stackoverflow.com/questions/637827/redirect-stderr-and-stdout-in-bash#637839

И както казва пътеводителя /според зависи коя версия си/
Единствената промяна е
От &>
На >&

The man page does specify a preference for '&>' over '>&', which is otherwise equivalent.

Ама подозирам че ти искаш Грешките да ги фърля към стандартния изход..
Т.е.

Код
GeSHi (Bash):
  1. do_something 2>&1 | tee -a some_file
« Последна редакция: Mar 05, 2021, 15:41 от remotexx »
Активен

jet

  • Напреднали
  • *****
  • Публикации: 3472
  • Distribution: debian
  • Window Manager: kde
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #6 -: Mar 05, 2021, 15:50 »
Другия проблем (макар, че няма код и се гадае) е твойта програма какво точно връща (стандартен изход (stdout) ли е, грешка ли е (stderr) и т.н.) защото на екрана
изглеждат еднакво, но са различни потоци и те се пренасочват по различен начин.

Ремо си промени мнението и той говори за същото
« Последна редакция: Mar 05, 2021, 15:51 от jet »
Активен

..⢀⣴⠾⠻⢶⣦⠀
  ⣾⠁⢠⠒⠀⣿⡁
  ⢿⡄⠘⠷⠚⠋
  ⠈⠳⣄⠀⠀⠀⠀  Debian, the universal operating system.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Пренасочване на изхода в bash
« Отговор #7 -: Mar 05, 2021, 17:36 »
Уф, това е една много дълга история.

Наистина си правя експерименти и то хипер-безполезни.

То реално код няма. Аз ви го дадох на практика всичкия.

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. cp names-org names
  4.  
  5. mkdir "КАТЕГОРИИ"
  6. cd "КАТЕГОРИИ"
  7. mkdir "Главна"
  8. mkdir "Договори"
  9. mkdir "Дл. характеристики"
  10. mkdir "Формуляри"
  11. mkdir "Бланки"
  12. mkdir "Трудови договори"
  13. mkdir "Справки"
  14. mkdir "Форми"
  15. mkdir "Декларации НОИ"
  16. mkdir "Програми"
  17.  
  18. cd "$OLDPWD"
  19.  
  20. for file in /home/user/t/proba/4/index*; do
  21.    [ -e "$file" ] || continue
  22.    # http://mywiki.wooledge.org/BashPitfalls#line-57
  23.  
  24. #    echo "http://web.archive.org/web/20001227214621/http://docstore.odit.info/?s=4&rid="$(echo "$file" | cut -d'=' -f3) >> 4-2
  25.  
  26.    ./odit-err.el "$file"
  27.  
  28.  
  29.  
  30.  
  31. done
  32.  
  33.  


Тия работи отгоре ги добавих, защото го изпълнявах няколко пъти (заради грешките), иначе си е само цикъла.

Сърцето на нещото е един макрос на Емакс. Ама като казвам макрос, баш макрос имам предвид. Направо не ми е за показване:

https://mega.nz/file/qlwW1ajB#hUvvB8_JQi1g-LH6ZFCce1o2fgCeQtehP_XTMaVuY0o

Никакво програмиране няма вътре. Баш си е ламерия. Иди до там, изтрии това, прескочи до другото, давай и него. Нещата, които бих направил, ако го правих на ръка.

По принцип не исках да стигам до Емакс. Исках да ползвам pup и iconv. Щеше да ми спести тази ламерия.

Работата е там, че съм изтеглил едни неща с wget. Ето един конкретен:

http://web.archive.org/web/20081207033126/http://docstore.odit.info/?s=4&rid=1424

Но всичките са такива. В заглавката се твърди, че документа съдържа Уникод. Обаче вътре има текст, който е на cp1251.

Pup обаче вътрешно го преобразува до… Мик 86. Е, няма iconv за Mik. Емакс има, но ако ще минавам през Емакс, то за чии да ползувам pup?!?

Така, за самия Емакс. На Fosdem миналия месец гледах един пич (голям съм му почитател заради Nyxt и други неща), който в доклада си:

https://ambrevar.xyz/lisp-repl-shell/index.html

казва така:

Цитат
As a scripting language, Emacs Lisp is not a great choice either because emacs --script can only print to stderr.

Когато го видях не разбрах к~ъв му е проблема, че не пише в stdout. Та нали двете по принцип почти винаги са на едно място?! Още от времената на php, много рядко да не кажа почти никога не съм виждал някой да ги пренасочва. Вече не помня и как се правеше.

=*=

Относно проблема оправих се лесно, защото там, където Емакс беше сгрешил, резултата от обработката беше некоректен и това се виждаше с просто око, защото преименува документите по съдържанието в тях. Имах две причини да не ползвам wget --content-disposition , както брилянтно ми помогна Programings.

А целия проблем беше, че в пет от 1 036 документа (като онзи горе) баш по време, когато е минал паяка на IA не е показана реклама. И съответно в снимката липсва един div. Е да, ама нали съм Мара Подробната (видно от всяко мое мнение), аз съм си го целял отделно. Просто го прескочих и в следващото триене си влиза и той. Така заобиколих проблема.

Както казах — ламерия до шия и само ви загубих времето. Но понеже често правя експерименти, щеше да ми е от полза някой път да не е чак толкова ръчно ваденето на грешки.
 



« Последна редакция: Mar 05, 2021, 17:50 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

danaildr

  • Напреднали
  • *****
  • Публикации: 165
  • Distribution: Debian Buster
  • Window Manager: KDE Plasma
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #8 -: Mar 06, 2021, 08:37 »
що не пробваш 
Код
GeSHi (Bash):
  1. ./script-2.sh "$file" >> file 2>>1
или
Код
GeSHi (Bash):
  1. ./script-2.sh "$file" >> file 2>>file

Би трябвало резултата да е идентичен.
Активен

Закона на Мърфи е: Точното определение и логичното по-нататъшно развитие на общото ентропично учение, според което всички частички във вселената се стремят да се подредят във възможно най-голям безпорядък. Познанието, че на път за там споменатите частички поне веднъж ти се изпречват в краката.

remotexx

  • Напреднали
  • *****
  • Публикации: 3210
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #9 -: Mar 06, 2021, 10:45 »
Гога  освен емакс и там другите на ххМакс и Чък Норис, се сещам още и за Щирлиц  дето  няма да му се опре един Мик, а и е толко дърт , върви под ХП още, че навярно няма да има проблеми и с винцето.

https://www.softportal.com/devsoft-1952-1.html

Е тоя Pup като ти конвертира от 1251 до Мик, значи и тои отбира от Мик и 1251, що па да не пробваш и с него. Ама то като ти е вътре 1251 за какво ти е изобщо  да го конвертираш? Ти не го искаш в 1251 ли, ами тогава в какво го искаш?

П.П. и каква стана тя сега - по въпроса за Мик затворения код води по точки пред отворения, а?

П.П.П. и само информативно - колко часа ти отне ръчното натамъняване на няколко хил. Реда скрипт и дали нямаше да е по-бързо да си добавиш липсващата дефиниция на Мик кодовата таблица - само 256 символа е , не е като да бичиш на ръка хиляди редове код... ама нали щом е опънат сорс требе да опънем некой друг да я свърши тая работа а ние само да се радваме на плодовете на труда му безплатно  :P
« Последна редакция: Mar 06, 2021, 11:01 от remotexx »
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Пренасочване на изхода в bash
« Отговор #10 -: Mar 06, 2021, 11:38 »
Тия дни се сещах за Щирлиц, гениално програмче, обожавам го. Ама що все си мисля, че съм виждал кода му? Не го ли отвориха по някое време?

=*=

А бе тя работата има даже още по-голяма предистория. Имах желание да пробвам pup, още, когато научих за него:

https://www.linux-bg.org/forum/index.php?topic=48685.msg312543#msg312543

Хвала на Програмингс, непрекъснато научавам хитринки от него.

И преди няколко дни (май беше понеделник) се сетих, че отдавна искам да си направя архив на архива. Демек онази услуга горе не случайно я давам на IA. Повече от година е свалена и не работи. Капиталистическа му работа. Какъвто Иво Прокопа, такива и подчинените му.

И викам си — г̀опеле т'ва е идеален „проект“ за Пъп. Е Пъп не се оказа толкова гениален. Той вътрешно преобразува всеки един tag. Това може да се преживее, като просто провериш, как го е преобразувал. Но не е така, когато не работиш с Уникод. Това вече не се преживява. Аз буквално (в Кейт за по-бързо) проверих всяка кирилска кодировка, за да разбера, каква мацаница е свършил. И като стигнах до IBM 866 взех да се кръстя, защото се оказа, че не е дори той.

Иначе самия макрос го „написах“ по-бързо отколкото успях да инсталирам pup. За първи път се докосвам с моите ръце (а не през някакви материали) с go. Този go, който е в Дебиан 8, се оказа стар за pup.  Ужас и безумие! После бях забравил, че то и дом трябва да му се прави. Нищо, че с това започва всеки урок. Ама то с тази „стара“ версия се оказа, че и други пътища трябва да се правят и други чудеса. И това само да установя, че Pup ползва нещо си, което се появява в единадесета версия или нещо такова. И то е баш за Уникод, на който му ядох ташаците.

То тая работа хубаво. Го е език на Гългъл и пичовете са се постарали да е тъпо като за шиндошари. Викат ти — вземи тези работи, набухай ги в /usr/local и работата ще спи. Всичко една команда — tar. Ама врякат: не забравяй, ако имаш друга версия да я махнеш. И изведнъж се сещаш, защо са измислени пакетите и не работим с tar.

В Дебиан Го лесно се слага, ама трудно се маха. Хайде успях и с това. Всичко ден, може би ден и нещо. Щото пък трябваше да разкарам магиите от преди това.

=*=

Макроси в Емакс се пишат изключително бързо. Подчертавам. На Емакс много трудно се програмира, почти е кошмар. Но макроси се правят по-бързо и от тези на Word. Няма по-лесни макроси на планетата.

Аз вече го казах. Представяш си, какво би направил на ръка. После питаш самия Емакс, коя всъщност функция седи зад клавишната комбинация. Това ще са всичко на всичко четири-пет функциики. После надолу само цепи-лепи. Тук-там някаква незначителна промяна. И си готов.

Релно има един единствен проблем — Лисп. Не! Проблем по никакъв начин не са ми скобите. Освен, ако човек не пише на Питон или Паскал (май трябваше в обратен ред), то скоби има навсякъде. Даже са повече видове. Тук е само един вид скоби — най-най-обикновените.

Проблема е в самия Лисп. Лисп е не повече и не по-малко от неименувани списъци. Толкова. Няма повече. Най-лесния език на планетата и вселената. Е да де, ама Емакс е текстов редактор. Текста е низ, а не списък, при това неименуван мамка му. И когато опреш да прехвърляш от низ към списък и обратно, става страшна кабала. А то няма как да не се наложи. Защото неименуваните списъци вършат реалната работа, ама тая работа я вършиш върху низове, защото това е текстов редактор, а не език за програмиране. Те са едни черни магии, магарии и свинщини. Ама като нацелиш как да излъжеш Емакс, спира да е проблем.

В общи линии нахвърлях максроса за може би под час общо, но разбит в няколко часа, а редактирането му беше буквално минути.

Откриването на проблема беше дори по-мало. Буквално от един поглед. Може да разбереш сам:

https://mega.nz/file/qwhmzRIb#nIHSBFhptwzzR32OMw4qefOzGD-RjdrOE_LfaiXyhZk
https://mega.nz/file/3wxgnTQJ#T2v8R9zXbC7SuGxOAmeVfo7hNl4tAR0HrDXnvUS68EM
https://mega.nz/file/q1xwFLyS#uTg3DlYtcHhgfNvLp83sY_x6iomZOZCrf2gcPKq6NNk

Първите две ми ги изплюха други цикли още преди това, в третото имайки ги готови, ги съединих. И даже се престарах пускайки една формулка, колкото да съм сигурен, че не съм се объркал.

Трябваше ми само един грешен. Отварям един грешен и един правилен и моментално разбирам, какъв е проблема. А проблема беше липсващ <div>, който нямаше да е проблем, ако не бях го разбил на чак толкова подробни стъпки.

Та те така.
« Последна редакция: Mar 06, 2021, 12:09 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #11 -: Mar 06, 2021, 11:55 »
Така и не разбрах, какво трябва да им се направи на тези хиляди документи
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Пренасочване на изхода в bash
« Отговор #12 -: Mar 06, 2021, 12:32 »
Аз съм икономист по професия, призвание, наследство, образование и всичко, което се сетиш. Това, че в момента и най-често не го работя е само, защото съм тъп и мързелив. Но да поддържам „форма“ посещавам един форум почти толкова, колкото и ЛЗБ. Този форум е част от един мъртъв портал, в който също така имаше и секция, където потребители можеха да качват най-различни документи.

Работата на икономиста е това — съставяш документи. Нищо друго не вършиш, това е всичко. С каквото и точно да се занимаваш чак до шеф на банка, то единственото, което правиш е да създаваш още и още хартишляк, все по-често виртуален.

Е да, ама Икономедия спряха тази възможност. А тя съществуваше от две и пета. Бяха качени хиляди и хиляди неща. Само под половината ги има все още в IA. И реших да ги спася.

И като казах, че правя безсмислени упражнения, случая наистина е такъв. Почти всички тези документи са безнадежно остарели към днешна дата. Това е другата част от работата на икономиста — днес е нов ден и вчерашния е забравен.

Сега да съм честен, това не е от естеството на работата, а от държавата. Тя сменя правилата по няколко пъти дневно. С, каквото и да се занимаваш поне десетина промени годишно ще те касаят. А то са сигурно двадесет промени всеки работен ден. В последно време и в почивни. Министъра с ботокса пише заповеди в събота и неделя. После слетобяд ги сменя.

Но въпреки, че упражнението е напълно безполезно, искам да го направя. Всъщност вече съм го направил де. А искам, ако щеш и за историята да е. И все пак има малък брои неща, които и днес са си валидни и могат да се ползват.

А какво по-точно правя?

Тази система беше разделена на категории. Към всеки документ имаше някакви пояснения. Сега да не си кривя душата, повечето потребители не са си правили труд да слагат такива, защото по самия документ е ясно, за какво става дума. Но все пак, много малко, но е имало и съвестни. Тук ще спомена едно име — Иван Върбанов. Той е легенда на онзи форум и много добър с таблиците. Качил е много и много съвестно ги е документирал.

Знам, че никой тук не познава този човек, но просто наистина заслужава отбелязване.

Затова исках да спася тази информация, а не просто да извъртя един цикъл във wget да сваля всичко налично и да го хвърля в един каталог. Ами този макрос прави точно това. Взема обяснението към документа, прехвърля документа в съответния каталог и закачва и тези данни. Това е всичко. Но да направиш на ръка подобно нещо за 1 054 спасени документа е къртовски труд, на който не се наемам, колкото и да е лесен.

Затова го направих полуавтоматично. На няколко етапа, пускам да се джурка нещо. Виждам резултата. Проверявам, ако ми харесва, следващия етап. И в един момент етапите свършиха.

То реално и самите програмисти правят нещо подобно. Разбиват един проблем на малки проблеми и ги решават. Просто при тях е по-автоматизирано. Аз искам да съм сигурен в резултата и да знам точно, какво и защо. Затова има ръчната част.


Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

jet

  • Напреднали
  • *****
  • Публикации: 3472
  • Distribution: debian
  • Window Manager: kde
    • Профил
Re: Пренасочване на изхода в bash
« Отговор #13 -: Mar 06, 2021, 17:22 »
Аз винаги съсм се чудил на тези нормативни документи - всеки бара разни Word документи и накрая сам се загубва във версиите дето сам е правил.
Защо не качат такъв тип документи в някое Вики.
Например Dokuwiki - всичко се съхранява в прави текстови файлове (т.е. може да се ръчка/търси с външни програми, лесно се архивира и мести). Документите стават красиви, но най-важната благина е, че поддържа версиите на документа. Можеш да идеш и да кажеш: я ми покажи какво се е променило в този нормативен документ между тази и онази година и хоп - показва ти в цвят един до друг двата документа какво точно е променено (като kdiff3). С един поглед разбираш промените без да си играеш на открий 10-те разлики.
Ама то от калинки в тази ДА, какво да очакваш. Електронното им правителство е някаква химера/панацея дето на никой не му е ясно какво е точно.
Активен

..⢀⣴⠾⠻⢶⣦⠀
  ⣾⠁⢠⠒⠀⣿⡁
  ⢿⡄⠘⠷⠚⠋
  ⠈⠳⣄⠀⠀⠀⠀  Debian, the universal operating system.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Пренасочване на изхода в bash
« Отговор #14 -: Mar 06, 2021, 18:42 »
Това в миналото ми беше много любима и дълга тема. От една страна за самите икономисти, от друга М$ и… тук следва тирада ;D Хайде ще ви го спестя този път.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
bash срипт за местене на файлове
Общ форум
nov_chovek 3 2089 Последна публикация Oct 27, 2009, 16:17
от radoulov
bash и текущ адрес в браузър
Общ форум
remotex 3 2102 Последна публикация Oct 11, 2010, 09:11
от remotex
Вижте моето BASH-скриптче и се посмейте :D
Хумор
smil3y 8 2924 Последна публикация Oct 29, 2010, 15:18
от boris2001
BASH въпрос
Общ форум
ROKO__ 53 7851 Последна публикация Dec 03, 2010, 14:19
от ROKO__
Задача за bash
Общ форум
rcbandit 13 2882 Последна публикация Jan 18, 2011, 20:31
от luda_glawa