Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
Google Site



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 10-09-2008
Registered User
 

Join Date: februari 2005
Inlägg: 56
Nonblocking I / O i bash-skript

Hej,

Finns det något sätt att utföra nonblocking I / O läser från standard in i ett bash-script?

Till exempel i C, kan du säga:


Kod:
int flags = fcntl(STDIN_FILENO, F_GETFL);
fcntl(STDIN_FILENO, F_SETFL, flags | O_NONBLOCK);
ch = fgetc(stdin);

den "fgetc" funktionen kommer inte att spärra på standard input men kommer att försöka läsa och återvända lm \u003d -1 om det inte fanns någon input väntar.

Bash har inbyggda "stå"-kommando som hänger på stdin tills den kan läsa några tecken (eller tills den tiden ute, om du ställer in den för att läsa med t-alternativet), men det verkar inte finnas något egentligt sätt att efterlikna C beteende som beskrivs ovan. Finns det?

Tack,
Neked
Sponsrade länkar
  #2 (permalänk)  
Old 10-10-2008
Registered User
 

Join Date: februari 2005
Inlägg: 56
Är detta ett lämpligt forum för detta ämne, eller ska jag flytta den någon annanstans?
  #3 (permalänk)  
Old 10-10-2008
cfajohnson's Avatar
Shell programmerare, författare
 

Join Date: mars 2007
Ort: Toronto, Kanada
Inlägg: 2550

Använd stty och dd. Här är några exempel kod:


Kod:
stty -echo -icanon time 0 min 0
while :
do
  key=$( dd bs=1 count=1 2> /dev/null; printf "." )
  key=${key%.}
  case $key in
    q) break ;;
    ?) printf "%d\n" "'$key" ;;
  esac
done
stty sane

  #4 (permalänk)  
Old 10-10-2008
Registered User
 

Join Date: februari 2005
Inlägg: 56
Pretty damn cool cfajohnson.

Här är mitt genomförande baserat på din stty idé och några ändringar:


Kod:
#!/bin/bash

if [ -t 0 ]; then
    stty -echo -icanon time 0 min 0
fi;

read line
echo "The input was, if any: " $line

if [ -t 0 ]; then
    stty sane
fi;

om detta nummer har sparats i ett namn körbar test.sh, då kan du göra följande:


Kod:
bash$ ./test.sh
The input was, if any: 
bash$ echo "test" | ./test.sh
The input was, if any: test

Anledningen till att jag använder if [-t 0]; uppgift är att se till att standard input kommer från terminalen, inte en pipa, annars får du irriterande fel:

Kod:
stty: standard input: Invalid argument

  #5 (permalänk)  
Old 10-10-2008
Registered User
 

Join Date: februari 2005
Inlägg: 56
Thumbs up

Detta inspirerade mig att göra en mycket enklare version av koden ovan, utan användning av stty:


Kod:
#!/bin/bash
if [ ! -t 0 ]; then
    read line
    echo $line
fi

  #6 (permalänk)  
Old 10-10-2008
Registered User
 

Join Date: februari 2005
Inlägg: 56
Tyvärr har ingen av ovanstående metoder fungerar inte en terminal eller en pipa är närvarande, så om du har den nämnda test.sh på en avlägsen maskin, sedan:


Kod:
bash$ echo "test" | ssh remote_machine ./test.sh
test
bash$ ssh -t remote_machine ./test.sh <== using -t flag to force terminal creation

bash$ ssh remote_machine ./test.sh
<== it blocks here on the read

Sponsrade länkar
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är Av


Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Bash: Kapslad funktioner och även andra skript FractalizeR Shell-programmering och Skript 12 08-26-2008 12:15
Fråga Linux.com: IT, japanska och utforma större och bättre bash skript Linux Bot UNIX och Linux RSS Nyheter 0 07-12-2008 10:20
Bash Skript - Arkiv generera JayC89 Shell-programmering och Skript 1 10-04-2007 10:58
Hur pass lösenord till bash skript? Siegfried Shell-programmering och Skript 5 08-04-2006 06:59
Bash Shell Scripts sonbag_pspl UNIX for Dummies Frågor & Svar 2 08-27-2004 02:31



Alla tider är GMT -4. Klockan är nu 12:45.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2010. All Rights Reserved.Ad Management by RedTyger

Content Relevant webbadresser från vBSEO 3.2.0