Toon posts:

Nano leest niet van stdin *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zat eens wat te prutsen in Bash, en ik kreeg het voor elkaar de terminal te laten crashen. Ik tikte het volgende in:
code:
1
date | nano test.txt

Lijkt me redelijk simpel toch. De output van date wordt in nano gegooid met de filename test.txt. Bij mij loopt echter de hele terminal vast, en in plaats van test.txt, ontstaat test.save.

Zou ik toch bijna de vraag vergeten...
Wat is hier aan de hand? Is dit een bug, en hoe is dit gedrag te omzeilen?

[ Voor 14% gewijzigd door Verwijderd op 15-09-2006 00:41 ]


  • Jungian
  • Registratie: Juni 2006
  • Niet online

Jungian

>_<

Verwijderd schreef op vrijdag 15 september 2006 @ 00:39:
Ik zat eens wat te prutsen in Bash, en ik kreeg het voor elkaar de terminal te laten crashen. Ik tikte het volgende in:
code:
1
date | nano test.txt

Lijkt me redelijk simpel toch. De output van date wordt in nano gegooid met de filename test.txt. Bij mij loopt echter de hele terminal vast, en in plaats van test.txt, ontstaat test.save.

Zou ik toch bijna de vraag vergeten...
Wat is hier aan de hand? Is dit een bug, en hoe is dit gedrag te omzeilen?
Wat zou je zeggen van
code:
1
date > test.txt


Neemt de output van date en plaatst dat in het bestand test.txt

0.0


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 22:43

Cyphax

Moderator LNX
Jungian schreef op vrijdag 15 september 2006 @ 00:50:
[...]


Wat zou je zeggen van
code:
1
date > test.txt


Neemt de output van date en plaatst dat in het bestand test.txt
Dat is iets anders als wat Remco wil, hij wil de output in Nano hebben. Dat kan best op andere manieren, sure (date > test.txt && nano test.txt) maar daar gaat het dan weer niet om. :)
Hij lijkt bij mij ook vast te lopen... dat is dus wel gek ja.

[edit]
Als je in dat nano-venstertje gaat tikken en je killed vervolgens in een andere terminal (SIGHUP is voldoende) nano, dan komt die tekst evengoed in je terminal terecht. 't Is echt nano dat crashed, niet je hele terminal ofzo.

[ Voor 19% gewijzigd door Cyphax op 15-09-2006 00:59 ]

Saved by the buoyancy of citrus


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Op een OpenBSD bak werkt het wel (nano wordt gestart, datum verschijnt erin) maar daarna slaat 'ie "vast". Enkel met een CTRL-Z krijg ik 'm er uit... :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ripperke
  • Registratie: Augustus 2003
  • Laatst online: 15-10-2025

ripperke

w00t!

ookal eens per ongeluk gedaan =)
komt omdat nano niet kan lezen van stdin, vi bv kan dit wel

code:
1
date |vi -

If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 22:43

Cyphax

Moderator LNX
RobIII schreef op vrijdag 15 september 2006 @ 01:00:
Op een OpenBSD bak werkt het wel (nano wordt gestart, datum verschijnt erin) maar daarna slaat 'ie "vast". Enkel met een CTRL-Z krijg ik 'm er uit... :Y)
Op een Linuxbak doet 'ie dat ook. Je hebt met CTRL-Z nano alleen niet afgesloten.
Overigens doet Pico hetzelfde.

Saved by the buoyancy of citrus


  • Paul
  • Registratie: September 2000
  • Laatst online: 23:10
Volgens mij kun je op die manier helemaal geen data in dat bestand zetten in nano :)

farli:/tmp$ echo "hoi" | nano test.txt
Received SIGHUP or SIGTERM

Buffer written to test.txt.save
farli:/tmp$


Beste is dus eerst de output te pipen naar een bestand, en daarna pas het bestand in nano openen.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

Topicstarter
De ">"-manier wordt lastig bij andere dingen. Stel je hebt een bestand 'unordered':
c_bladie
b_bladie
d_bladie
a_bladie
die je wil sorteren, maar zonder een extra bestand aan te maken.
code:
1
2
3
cp unordered unordered2 #backup
sort unordered > unordered
cat unordered #zal niets returnen
Dit werkt niet, aangezien eerst unordered wordt leeggemaakt, en daarna pas wordt gesorteerd.
Daarom dacht ik, laat ik de output van sort gewoon de input van nano worden. Met de gevolgen die in mijn TS worden beschreven.

Ik heb het ook met vim geprobeerd:
code:
1
2
3
4
5
sort unordered2 | vim unordered2
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
Waarna er niets veranderd is in unordered2. Het is dus geen bug in nano. Het lijkt iets te maken te hebben met de alternatieve manier van input geven.

Edit: ripperke vertelde het tijdens dat ik zat te schrijven. Stom hoor, van nano... het is verder wel een erg fijne editor.

[ Voor 6% gewijzigd door Verwijderd op 15-09-2006 01:13 ]


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 22:43

Cyphax

Moderator LNX
Verwijderd schreef op vrijdag 15 september 2006 @ 01:07:
De ">"-manier wordt lastig bij andere dingen. Stel je hebt een bestand 'unordered':

[...]

die je wil sorteren, maar zonder een extra bestand aan te maken.
code:
1
2
3
cp unordered unordered2 #backup
sort unordered > unordered
cat unordered #zal niets returnen
Dit werkt niet, aangezien eerst unordered wordt leeggemaakt, en daarna pas wordt gesorteerd.
Daarom dacht ik, laat ik de output van sort gewoon de input van nano worden. Met de gevolgen die in mijn TS worden beschreven.

Ik heb het ook met vim geprobeerd:
code:
1
2
3
4
5
sort unordered2 | vim unordered2
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
Waarna er niets veranderd is in unordered2. Het is dus geen bug in nano. Het lijkt iets te maken te hebben met de alternatieve manier van input geven.
Even puur om wat jij in eerste instantie wilde doen toch mogelijk te maken:
code:
1
date | nano test.txt

Of dat de beste oplossing is is een ander verhaal.

Saved by the buoyancy of citrus


  • FiscBiker
  • Registratie: April 2003
  • Laatst online: 22:14
Ik heb geen nano, maar het volgende werkt bij mij:
code:
1
sort unordered | vim -


en dan in vim:
code:
1
:w! unordered
Ook al is ie dan natuurlijk ordered
FreeBSD 6.1 btw

[ Voor 8% gewijzigd door FiscBiker op 15-09-2006 01:17 ]


  • Paul
  • Registratie: September 2000
  • Laatst online: 23:10
Waarom zou je geen extra file aan kunnen/willen maken? Bash is geen programmeertaal, dus sommige dingen moeten nu eenmaal via een omweg...
#!/bin/bash

FILE="/tmp/$(basename $0).$RANDOM.txt"
sort unordered > $FILE
nano $FILE
rm $FILE

Of natuurlijk cat $FILE > unordered maar dan klopt de filename niet meer. cp is waarschijnlijk beter maar dan moet ik weer op gaan zoeken of je dan -f mee moet geven om te overschrijven enzo :+

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

Topicstarter
Ach, ik zit gewoon een beetje te spelen, kijken waar de grenzen liggen. Ik had niet echt verwacht dat ik de grenzen al bij 1 regel code bereikt zou hebben. ;)

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

ripperke schreef op vrijdag 15 september 2006 @ 01:01:
ookal eens per ongeluk gedaan =)
komt omdat nano niet kan lezen van stdin, vi bv kan dit wel
Jawel, maar stdin is dan opeens je file (of in dit geval, de output van date) ipv keyboard input. Nano lijkt ook strict gezien alleen maar te hangen. In feite zou je in je text file een complete sessie kunnen nabootsen door de correcte karakters erin te plaatsen.

Vi(m) is blijkbaar iets slimmer dan nano in dit opzicht.

All my posts are provided as-is. They come with NO WARRANTY at all.

Pagina: 1