ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
אורח · ·
 

הודעה פורסם: 12/02/2004 - 15:04
נושא ההודעה: DOSH - עוד שאל ללינוקס שאני יוצר

לפני כיומיים התחלתי לבנות בפרל יישום משלי לשאל דמוי באש. קראתי לו DOSH - DL8's Own SHell. למה לא DOS תבינו לבד. למה בפרל? כי זאת שפה שאני אוהב Smile
יכול להיות שהוא יעבוד טוב על דוס ווינדוס, אבל הוא לא יציג את התיקיה שבה הוא נמצא (אני משתמש ב pwd כדי למצוא את התיקיה המקומית. תקראו לי עצלן אבל מה לעשות? לא מצאתי בינתיים דרך אחרת)
הקוד מקור בינתיים (הכל פה אמור להיות קוד פתוח לא?):
קוד:

#!/usr/bin/perl
# Some info about the program itself and other shit. Ignore
# program version
my $VERSION="0.1";
# Program name in the long and the short versions
my $PNAME_SHORT="DOSH";
my $PNAME="DL8's Own SHell";
# End of program info
# Start of the program
chomp($host=`hostname`);
print "===== $PNAME v $VERSION =====\n";
args(@ARGV) if($#ARGV>0);
while(1) {
   # Get the current working directory, currently working only in *nix (but tested only on Linux)
   # TODO (optional): Find a way that works also in DOS/Windows
   chomp($curdir=`pwd`);
   # The line of the shell like in Bash: <user>@<host>:<current directory>$
   # the $ at the end is probably the only difference beyween Bash and this shell :)
   print getlogin."\@$host:$curdir\$ ";
   chomp($cmd=<STDIN>);
   analyze($cmd);
}
sub analyze {
   my($cmd)=@_;
   # Help command
   if($cmd=~/^\s*help/) {
      print "$PNAME v $VERSION help\n";
      print "Built in commands:\n";
      print "cd [directory]\tChanges the working diretory\n".
      "exit [number]\texits $PNAME_SHORT\n".
      "about\tPrints info about $PNAME_SHORT\n";
   }
   # About command
   elsif($cmd=~/^\s*about/) {
      print "*+*+*+ About $PNAME v $VERSION +*+*+*\n";
      select(undef,undef,undef,0.5);
      print "$PNAME_SHORT is a Perl implementation for a Bash like shell\n".
      "It's made for learning purposes and for fun :)\n";
      select(undef,undef,undef,0.5);
      print "Credits:\n";
      select(undef,undef,undef,0.5);
      print "Coding and development: DL8/bzImage (I have 2 nicknames)\n".
      "ICQ: 218469623\n".
      "Email + MSN: DL8\@linux.net\n".
      "AIM: dili888\n\n";
      select(undef,undef,undef,0.5);
      print "Some good help and advice: Hobbit HK\n".
      "ICQ: 127853198\n".
      "MSN + Email: hobbit_hk\@hotmail.com\n";
   }
   # Exit
   elsif($cmd=~/^\s*exit\s*(\d)?$/) {
      print "Good bye\n";
      if($1) {
         print "Exitting with code $1\n";
         exit($1);
      }
      exit(0);
   }
   elsif($cmd=~/^\s*cd\s*(.+)$/) {
      if(!chdir $1) {
         print "$PNAME_SHORT: $1: Either there's no such directory, access is denied or it's a file\n";
      }
   }
   # Add another commands if necessary
   else {
      if(system($cmd)==-1) {
         print "$PNAME_SHORT: $cmd: command or program not found or access is denied\n";
      }
   }
}
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 12/02/2004 - 16:10
נושא ההודעה:

אם אתה רוצה להוסיף לזה הרבה מהתכונות החזקות של bash תשתמש במודול של readline . ופתאום העבודה תהפוך להיות סבירה. ר' לדוגמה perl -MCPAN -e shell

אגב, יש כמובן את: http://freshmeat.net/projects/perlshell

ומשהו לא לגמרי רלוונטי: http://packages.debian.org/unstable/shells/lsh
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 12/02/2004 - 16:13
נושא ההודעה:

ועוד נושא מעניין: טיפול בסיגנלים. כאן דברים מתחילים להיות "מעניינים" כי הם כבר לא לגמרי פרוצדורליים.

אתה רוצה לנסות לממש job control ?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
DL8לא בפורום כעת ת.הצטרפות: 14/01/2004 · הודעות: 783 · מיקום: 127.0.0.1
 

הודעה פורסם: 12/02/2004 - 18:26
נושא ההודעה:

אני יודע שזה קצת נובי, אבל מה זה job control? בחיים לא יצא לי להשתמש בזה
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם מספר ICQ 
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
zeltakלא בפורום כעת ת.הצטרפות: 06/06/2003 · הודעות: 104 ·
 

הודעה פורסם: 13/02/2004 - 00:39
נושא ההודעה:

job control זה היכולת להעביר process לרקע עם ctrl-z, או היכולת להעביר לו signals - למשל ctrl-c או ctrl-\.

_________________
:qw!
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
DL8לא בפורום כעת ת.הצטרפות: 14/01/2004 · הודעות: 783 · מיקום: 127.0.0.1
 

הודעה פורסם: 14/02/2004 - 09:16
נושא ההודעה:

נראה לי שבשביל זה אני צריך תרד שיחכה לאחד מצירופי המקשים האלה ויבצע את הפעולות הדרושות. ואני מנסה עכשיו לעשות אפשרות להתחיל פעולה ברקע. בינתיים לא הולך לי ממש טוב. הקוד:
קוד:

# Add a new job to work in the background and add it to a list while it's running
sub new_job {
   my($name)=@_;
   print "Starting background job $name...\n";
   my $kidpid;
   $kidpid=fork();
   print "$kidpid\n";
   if(!defined $kidpid) {
      warn "PNAME_SHORT: Can't fork and make job\n";
      undef $kidpid;
      return;
   }
   if(!$kidpid) {
      my $index=$#jobs;
      $jobs[$index]=$name;
      system($name);
      print "$kidpid\n";
      undef $jobs[$index];
   }
}
# List the jobs running
sub list_jobs() {
   foreach $i(@jobs) {
      print "$i\n";
   }
}

כשאני עושה פעולה שרצה ברקע אז זה לא מריץ ברקע ואני לא יכול "להרוג" עם קונטרול C את התרד (או זה בכלל עובד על תרד אחר) וכשאני מנסה לכתוב איזה תו אחרי שהתרד הסתיים הכל די נדפק
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם מספר ICQ 
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח
  2. אורח
  3. אורח
  4. DL8
  5. zeltak
  6. DL8