"지령선 조개?? 누구나 할 수 있어요."

9057 단어 Goshelltech
"설마... 못하겠니?"(불안을 부추기는 상법)

제약조건

  • 상호작용 케이스 만들기
  • 자체 제작용nyagos의 기존 포장을 사용하지 않음
  • 타인이 제작한 기존 포장(위탁제작 불가)
  • 자신의 코드는 goorun 명령에서만 이동할 수 있는 범위(즉 1 파일)
  • 이동!
  • 최소한의 미니 골격 골격의 골격 이미지를 필요로 하는 청사진


    while ( true ){
     text = readline()// 一行入力:最悪 gets でもよい
     system(text) /// 一行実行:最悪 CMD.EXE とかに丸投げしてもよい
    }
    
    처음에는'최악'만 하면 돼요.

    이번 정책의 방향성에 관한 방침

  • 행 입력 "github.com/mattn/go-tty"에 대한 ttyutil ReadLine 대여
    처음에는 상당한 gets를 하려고 했는데 결과적으로 bufio가 됐어요.뉴스캐너 같은 건 오히려 귀찮아
  • 실제로는 이런 일이 없었고tty의 실례를 준비하여 행수를 소비했다
  • 한 줄을 실행할 때 "os/exec"를 사용하여 쉽게 실시하십시오
  • 달팽이


    package main
    
    import (
    	"fmt"
    	"os"
    	"os/exec"
    	"strings"
    
    	"github.com/mattn/go-tty"
    	"github.com/mattn/go-tty/ttyutil"
    )
    
    func mains() error {
    	fmt.Println("Tiny Shell. Type Ctrl-D to quit.")
    
    	tty1, err := tty.Open()
    	if err != nil {
    		return err
    	}
    	defer tty1.Close()
    
    	for {
    		clean, err := tty1.Raw()
    		if err != nil {
    			return err
    		}
    		fmt.Println("Ready")
    		text, err := ttyutil.ReadLine(tty1)
    		clean()
    		if err != nil {
    			return err
    		}
    
    		fields := strings.Fields(text)
    		if len(fields) <= 0 {
    			continue
    		}
    		cmd := exec.Command(fields[0], fields[1:]...)
    		cmd.Stdout = os.Stdout
    		cmd.Stderr = os.Stderr
    		cmd.Stdin = os.Stdin
    		cmd.Run()
    	}
    }
    
    func main() {
    	if err := mains(); err != nil {
    		fmt.Fprintln(os.Stderr, err.Error())
    		os.Exit(1)
    	}
    }
    

    설명해주세요!

  • main()에서 호출mains()error은 오류 처리를 간소화하는 제 스타일이기 때문에 너무 신경 쓰지 마세요.
  • 자세히 보면 반 개 정도https://github.com/zetamatta/go-readline-ny/#example2go의 변체지만 누구도 복사 붙이면 안 된다고 할 수 없다(징그럽다!)
  • 프로그램의 상반부는 한 줄 입력(=ReadLine 호출)을 위한 준비 작업(문자 키 입력의 초기화)에 사용됩니다.여기는 go-tty의 규격이기 때문에 요오드가 없습니다.
  • go-tty는 원래 콘솔에서 입력한 라이브러리였는데, 이것을 사용하면 Enter 키가 없는 키로 얻을 수 있다.ttyutil.ReadLine은 샘플로 제공됨
  • go-tty는 UNIX의 단말기 조작을 모방한 잠금장치(Windows에서는 잠금장치가 아니라 시뮬레이션)를 모방했다.UNIX 시스템 터미널에는 Cocked 모드와 Raw 모드가 있는데 전자는 Enter가 눌리기 전에 터미널 위탁 편집을 하는데 이 상태에서는 백스페이스 등 간단한 수정만 가능해 제대로 된 편집 기능이 있다고 보기 어렵다.Emacs-Like의 복잡한 편집을 위해 Raw 모드라고 하며, 입력 문자를 응용 프로그램에 직접 보내는 모드로 전환하고, 응용 프로그램에서 키의 해석·커서의 이동을 상세히 진행해야 한다.이번 번거로운 일은 ReadLine에게 던져라!
  • 힌트지만 뭔가 ttyutil인 것 같아.리드라인이면 커버될 수 있어 내선에 잘 쓰지 못했기 때문에 이번에는 F-BASIC 스타일의'리드'를 힌트로 8비트 풍미로 얼버무렸다.
  • 뒷부분은 입력한 줄을 단어 단위로 나누고 exec로 분할한다.Command 전용
  • "아, 간단하죠?"

    TO BE CONTINUED...?

  • 환경 변수는 참조할 수도 변경할 수도 없음
  • 현재 디렉토리도 변경할 수 없음
  • 배관도 리디렉션도 안돼 ('애교 부리지 마!'"앤티앨리어싱?"
  • 스크립트가 없습니다.Lua?그게 뭐야
  • 방법을 생각해야 되는 거 아니야?(기분이 좋으면 계속 쓰세요)

    좋은 웹페이지 즐겨찾기