Giter Club home page Giter Club logo

bearshell's Introduction

header

⭐️ Stack ⭐️

NodeJS

iconicon

Python

iconiconicon

DB

icon icon

etc.

iconiconicon icon

🎖 Status 🎖

trophy

Solved.ac Profile

header

bearshell's People

Contributors

blingblin-g avatar rockpell avatar

Watchers

 avatar  avatar

bearshell's Issues

> |이 명령어 위치로 올때 에러처리 관련

  • bash에서는 리디렉션이 명령어 자리에 오더라도 문제 없이 동작
    • 현재 minishell에서는 리디렉션이 명령어 자리로 오면 syntax error로 처리하고 있음
  • bash에서는 파이프가 명령어 자리에 오면 syntax error
    • 현재 minishell에서는 파이프가 명령어 자리로 오면 문제 없이 동작

echo

  • 인자로 들어온 문자열을 출력한다.
  • 규칙
    • "'가 페어가 되면 하나의 문자열로 인식한다.
    • "'가 페어가 되면 해당 "'가 출력되지 않는다.
    • 명령어는 띄어쓰기로 구분된다.
    • 만약, 명령어 뒤에 "'가 이어서 붙는다면 해당 문자열까지 명령어로 인식한다.
  • 예시
    • echo" " sooyoon: error(echo : command not found), echo 뒤에 나오는 공백까지가 command로 인식되어 명령어를 찾지 못한다.
    • e"ch"o: 정상 작동

parsing

  • 파싱 내용 학습하기
  • AST를 사용할 지 여부를 위해 학습이 필요
  • 11/22일까지 파싱 구현하기

exit 및 종료 상태

  • 특정 status가 bash랑 다르게 나타남
    • ex) 256으로 나타나는것을 1로 표현해야함
  • pipe로 연결된 명령은 마지막 명령의 상태값을 반환한다.
    • is_pipe 같은 변수를 활용해서 파이프로 연결되어있는 자식이 있다면 상태값 업데이트를 하지 않는 방식으로 가장 마지막꺼만 하면 될듯
  • exit으로 전달하는 status를 wait으로 받을때는 256이 곱해져서 전달된다.

builtin functions

  • main 함수에서 builtin 함수 호출하기
    • export, env, echo ... 등을 입력 값에 따라 호출하기

환경변수 PATH 등록하기

  • 환경변수 PATH 등록하기
  • extern char **environ; 를 이용하여 구현하기
  • bin에 있는 명령어 가져와서 실행하기

works to do

  1. parsing
    quotes, pipe, redirection, semicolon;

  2. builtins --> only works as functions
    ==>need to implement functions

  3. else --> process (executive files for example /bin/~)
    ==>need environment variable like PATH or PWD ...etc.

  4. pipe, redirection, semicolon;
    $?
    ctrl-C, ctrl-D and ctrl-\ s
    Environment variables

  5. debug

env 결과

  • env한 결과의 정렬 순서가 bash랑 다른 문제

echo 다중 옵션 문제

  • bash는 echo의 -n이 여러개가 연달아 오더라도 모두 옵션으로 처리한다.
    • minishell에서는 첫번째 -n만 옵션으로 받고 나머지 옵션은 그냥 문자열로 처리하고 있다.

bash는 아래와 같이 여러개의 옵션을 하나로 인식하고 동작한다.

bash-3.2$ echo -n -n -n -n haha
hahabash-3.2$

pro_lst

  • cmd_list를 담는 리스트, 명령들을 담는다.

export로 추가한 변수 관련 문제

  • export로 변수를 추가한 후 $변수 했을때 없는걸로 인식하는 문제가 발생
  • env리스트에서 값을 가져오지 않고 extern 변수에서 가져와서 생기는 문제였음
  • 현재 export로 추가한 변수가 free 되는 문제 발생

External functs. 구경하고 오기

malloc, free, write, open, read, close, fork, wait,
waitpid, wait3, wait4, signal, kill, exit, getcwd,
chdir, stat, lstat, fstat, execve, dup, dup2, pipe,
opendir, readdir, closedir, strerror, errno

out of quotes zone

  • space가 나타나면 새로운 노드를 cmd_list에 넣기
  • 여러개의 space가 연속으로 나오는 경우 하나로 취급하도록 is_space 변수를 만들 필요가 있다.
  • pipe, redirection, semicolon이 나오는 경우 pro_list에 넣기

메모리 누수

  • piping에서 메모리 누수가 발생
    • redirection와 create_exec 관련 함수에서 문제가 생기는것으로 보임
    • 파일명과 리디렉션 문자를 따로 모아놓는 부분도 누수가 생김

echo를 위한 함수 구현

  • function that find pair of dq && q and drop... to handle double quotes && quotes
  • it would be good to execute echo after make it all about echo

implement mandatory function

  • 기본함수 구현하기
    echo with option ’-n’
    cd with only a relative or absolute path
    pwd without any options
    export without any options
    unset without any options
    env without any options and any arguments
    exit without any options

echo >| echo test 관련 문제

  • 아래의 코드를 실행하면 미니쉘이 꺼지는 문제가 있음(문제 해결)
  • bash는 위의 케이스는 정상 동작하지만 minishell에서는 syntax error로 처리하고 있음
  • 공통적으로 redirection에서 syntax error가 나는 경우 다른 파이프의 명령어가 실행되는 문제가 있음
    • bash는 syntax error가 나면 어떠한 명령어도 실행되지 않음
echo >| echo test
echo > | echo test

pars 구조체

  • 파싱에 필요한 변수들을 보관한다.
  • single_q
  • double_q

export function

필요한 기능

  • 인자로 들어오는 값이 존재하지 않을 때 현재의 환경 변수를 출력한다.
  • 인자로 들어오는 값이 존재한다면 해당 값으로 환경변수를 변경한다.

path ~ parsing

echo ~
echo ~/
echo '~'/
echo "~"/
echo ~'/'
echo ~"/"
echo ~~
echo ~(is_alnum)

cmd_lst

  • 명령어를 담는 리스트, 명령어 이름과 인수들이 들어있다.

main_parser

  • 아래의 함수들을 연결하는 작업이 필요하다.
    • double quotes zone
    • single quotes zone
    • out of quotes zone
    • 연달아 오는 문자열이 있는지 확인하고 마지막 리스트에 join 하는 함수

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.