Skip to content

Subject

KIM CHAN HEE edited this page Feb 17, 2023 · 3 revisions

Minishell

As beautiful as a shell

γ€€μ‰˜λ§ŒνΌμ΄λ‚˜ μ•„λ¦„λ‹€μš΄ 그것

Summary: This project is about creating a simple shell. Yes, your own little bash. You will learn a lot about processes and file descriptors. Version: 6

γ€€μš”μ•½: 이번 ν”„λ‘œμ νŠΈμ˜ λͺ©ν‘œλŠ” κ°„λ‹¨ν•œ μ‰˜μ„ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. λ§žμ•„μš”, λ‹Ήμ‹ λ§Œμ˜ μž‘μ€ bash. ν”„λ‘œμ„ΈμŠ€ 그리고 파일 λ””μŠ€ν¬λ¦½ν„°μ— λŒ€ν•΄ μ•„μ£Ό 많이 배우게 될 κ²λ‹ˆλ‹€. v6


Contents

Chapter Contents page
I Introduction 2
II Common Instructions 3
III Mandatory part 4
IV Bonus part 6

Chapter 1

Introduction

The existence of shells is linked to the very existence of IT. At the time, all coders agreed that communicating with a computer using aligned 1/0 switches was seriously irritating. It was only logical that they came up with the idea of creating a software to communicate with a computer using interactive lines of commands in a language somewhat close to the human language.

γ€€μ‰˜μ€ IT의 νƒœμ΄ˆλΆ€ν„° ν•¨κ»˜ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ λ‹Ήμ‹œ, λͺ¨λ“  κ°œλ°œμžλ“€μ€ 1κ³Ό 0으둜만 이루어진 μŠ€μœ„μΉ˜λ‘œ 컴퓨터와 ν†΅μ‹ ν•˜λŠ” 것은 ꡉμž₯히 μ„±κ°€μ‹œλ‹€λŠ” 점에 λ™μ˜ν–ˆμ–΄μš”. 그듀이 μΈκ°„μ˜ 언어에 μ–΄λŠ 정도 κ°€κΉŒμš΄ μ–Έμ–΄λ‘œ 된 λŒ€ν™”ν˜• λͺ…λ Ή 라인을 μ‚¬μš©ν•˜μ—¬ 컴퓨터와 ν†΅μ‹ ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“œλŠ” 아이디어λ₯Ό 내놓은 것은 λ‹Ήμ—°ν•œ μˆ˜μˆœμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

Thanks to Minishell, you’ll be able to travel through time and come back to problems people faced when Windows didn’t exist.

γ€€Minishell덕뢄에, Windowsκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜μ„ μ‹œμ ˆ μ‚¬λžŒλ“€μ΄ κ²ͺμ—ˆλ˜ 문제λ₯Ό λ§ˆμ£Όν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.


Chapter 2

Common Instructions

  • Your project must be written in C.

    γ€€ν”„λ‘œμ νŠΈλŠ” λ°˜λ“œμ‹œ C둜 μž‘μ„±λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • Your project must be written in accordance with the Norm. If you have bonus files/functions, they are included in the norm check and you will receive a 0 if there is a norm error inside.

    γ€€ν”„λ‘œμ νŠΈλŠ” Norm을 μ€€μˆ˜ν•˜μ—¬ μž‘μ„±λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 만일 λ³΄λ„ˆμŠ€ νŒŒμΌμ΄λ‚˜ ν•¨μˆ˜κ°€ μžˆλŠ”κ²½μš°, 이 λ˜ν•œ norm 검사에 ν¬ν•¨λ˜λ©° norm errorκ°€ μžˆλŠ” 경우 0점을 λ°›κ²Œ λœλ‹€.

  • Your functions should not quit unexpectedly (segmentation fault, bus error, double free, etc) apart from undefined behaviors. If this happens, your project will be considered non functional and will receive a 0 during the evaluation.

    γ€€μ •μ˜λ˜μ§€ μ•Šμ€ 행동(undefined behaviors)을 μ œμ™Έν•˜κ³  ν•¨μˆ˜λŠ” μ˜ˆμƒμΉ˜ λͺ»ν•˜κ²Œ μ’…λ£Œλ˜λ©΄ μ•ˆλœλ‹€.(segmentation fault, bus error, double free, etc) 이 경우 ν”„λ‘œμ νŠΈκ°€ μž‘λ™ν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ κ°„μ£Όν•˜λ©° 평가 쀑에 0점을 λ°›κ²Œ λœλ‹€.

  • All heap allocated memory space must be properly freed when necessary. No leaks will be tolerated.

    γ€€ν•„μš”ν•œ 경우 heap에 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간을 μ μ ˆν•˜κ²Œ ν•΄μ œν•΄μ•Ό ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ λˆ„μˆ˜λŠ” ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • If the subject requires it, you must submit a Makefile which will compile your source files to the required output with the flags -Wall, -Wextra and -Werror, use cc, and your Makefile must not relink.

    γ€€κ³Όμ œμ—μ„œ ν•„μš”ν•œ 경우, 결과물을 λ§Œλ“€κΈ° μœ„ν•΄ μ†ŒμŠ€ νŒŒμΌμ„ -Wall -Wextra -Werror ν”Œλž˜κ·Έμ™€ ccλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»΄νŒŒμΌν•  Makefile을 제좜 ν•΄μ•Όν•˜κ³  μ΄λŠ” 리링크가 되면 μ•ˆλ©λ‹ˆλ‹€.

  • Your Makefile must at least contain the rules $(NAME), all, clean, fclean and re.

    γ€€Makefile은 μ΅œμ†Œν•œ $(NAME), all, clean, fclean, re κ·œμΉ™μ„ 포함해야 ν•©λ‹ˆλ‹€.

  • To turn in bonuses to your project, you must include a rule bonus to your Makefile, which will add all the various headers, librairies or functions that are forbidden on the main part of the project. Bonuses must be in a different file _bonus.{c/h} if the subject does not specify anything else. Mandatory and bonus part evaluation is done separately.

    γ€€ν”„λ‘œμ νŠΈμ— λ³΄λ„ˆμŠ€λ₯Ό μ œμΆœν•˜λ €λ©΄ Makefile에 bonus κ·œμΉ™μ„ 포함해야 ν•©λ‹ˆλ‹€. bonusμ—μ„œλŠ” ν”„λ‘œμ νŠΈμ˜ mandatory partμ—μ„œ κΈˆμ§€λœ λͺ¨λ“  λ‹€μ–‘ν•œ 헀더, 라이브러리 λ˜λŠ” ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. κ³Όμ œμ—μ„œ νŠΉλ³„ν•˜κ²Œ λ‹€λ₯Έ ν•­λͺ©μ„ μ§€μ •ν•˜μ§€ μ•Šμ€ 경우 bonusλŠ” _bonus.{c/h}둜 λλ‚˜λŠ” λ‹€λ₯Έ νŒŒμΌμ— μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. Mandatory와 bonus part ν‰κ°€λŠ” λ³„λ„λ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€.

  • If your project allows you to use your libft, you must copy its sources and its associated Makefile in a libft folder with its associated Makefile. Your project’s Makefile must compile the library by using its Makefile, then compile the project.

    γ€€λ§Œμ•½ ν”„λ‘œμ νŠΈκ°€ libft의 μ‚¬μš©μ„ ν—ˆμš©ν•œλ‹€λ©΄, libft의 μ†ŒμŠ€νŒŒμΌκ³Ό Makefile을 libft 폴더 μ•ˆμ— 볡사해야 ν•©λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ˜ Makefile은 libft의 Makefile을 μ‚¬μš©ν•˜μ—¬ 라이브러리λ₯Ό 컴파일 ν•œ λ‹€μŒμ— ν”„λ‘œμ νŠΈλ₯Ό μ»΄νŒŒμΌν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • We encourage you to create test programs for your project even though this work won’t have to be submitted and won’t be graded. It will give you a chance to easily test your work and your peers’ work. You will find those tests especially useful during your defence. Indeed, during defence, you are free to use your tests and/or the tests of the peer you are evaluating.

     이 ν”„λ‘œμ νŠΈλ₯Ό μ œμΆœν•  ν•„μš”κ°€ μ—†κ³  μ μˆ˜κ°€ 맀겨지지 μ•Šλ”λΌλ„ ν”„λ‘œμ νŠΈλ₯Ό μœ„ν•œ ν…ŒμŠ€νŠΈ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄ λ³Ό 것을 ꢌμž₯ν•©λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬λΆ„μ˜ κ²°κ³Όλ¬Όκ³Ό λ™λ£Œλ“€μ˜ 결과물을 μ‰½κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆλŠ” 기회λ₯Ό 쀄 κ²ƒμž…λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ€ 이 ν…ŒμŠ€νŠΈλ“€μ΄ λ””νŽœμŠ€ 쀑에 특히 μœ μš©ν•˜λ‹€λŠ” 것을 μ•Œκ²Œ 될 것 μž…λ‹ˆλ‹€. μ‹€μ œλ‘œ, λ””νŽœμŠ€λ₯Ό ν•˜λŠ” λ™μ•ˆ μ—¬λŸ¬λΆ„μ΄λ‚˜ 평가 쀑인 λ™λ£Œμ˜ ν…ŒμŠ€νŠΈλ₯Ό 자유둭게 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • Submit your work to your assigned git repository. Only the work in the git repository will be graded. If Deepthought is assigned to grade your work, it will be done after your peer-evaluations. If an error happens in any section of your work during Deepthought’s grading, the evaluation will stop.

    γ€€ν• λ‹Ήλœ Git μ €μž₯μ†Œμ— 결과물을 μ œμΆœν•©λ‹ˆλ‹€. Git μ €μž₯μ†Œμ— μžˆλŠ” 결과물만 μ±„μ λ©λ‹ˆλ‹€. λ§Œμ•½ Deepthoughtκ°€ μ—¬λŸ¬λΆ„μ˜ μž‘μ—…μ„ μ±„μ ν•˜λ„λ‘ μ§€μ •λœλ‹€λ©΄, μ΄λŠ” λ™λ£Œν‰κ°€ μ’…λ£Œ 후에 μ΄λ€„μ§ˆ κ²ƒμž…λ‹ˆλ‹€. Deepthoughtκ°€ μ±„μ ν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ 평가가 μ’…λ£Œλ©λ‹ˆλ‹€.


Chapter 3

Mandatory part

ν”„λ‘œκ·Έλž¨ 이름 minishell
μ œμΆœν•  파일 Makefile, *.h, *.c
Makefile NAME, all, clean, fclean, re
인자
μ‚¬μš©κ°€λŠ₯ν•œ Β  μ™ΈλΆ€ ν•¨μˆ˜ Β Β Β Β Β Β  readline, rl_clear_history, rl_on_new_line, rl_replace_line, rl_redisplay, add_history, printf, malloc, free, write, access, open, read, close, fork, wait, waitpid, wait3, wait4, signal, sigaction, sigemptyset, sigaddset, kill, exit, getcwd, chdir, stat, lstat, fstat, unlink, execve, dup, dup2, pipe, opendir, readdir, closedir, strerror, perror, isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs
직접 λ§Œλ“  libft μ‚¬μš© κ°€λŠ₯
μ„€λͺ… μ‰˜μ„ μž‘μ„±ν•˜μ„Έμš”

Your shell should:

λ‹Ήμ‹ μ˜ μ‰˜μ€:

  • Display a prompt when waiting for a new command.

    μƒˆ λͺ…령을 기닀릴 λ•Œ ν”„λ‘¬ν”„νŠΈλ₯Ό ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • Have a working history.

    μž‘μ—… νžˆμŠ€ν† λ¦¬λ₯Ό κ°–κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • Search and launch the right executable (based on the PATH variable or using a relative or an absolute path).

    (PATH λ³€μˆ˜λ‚˜ μƒλŒ€, μ ˆλŒ€ 경둜λ₯Ό ν™œμš©ν•˜μ—¬) μ˜¬λ°”λ₯Έ μ‹€ν–‰ νŒŒμΌμ„ μ°Ύμ•„ μ‹€ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • Not use more than one global variable. Think about it. You will have to explain its purpose.

    μ΅œλŒ€ 1개의 μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ™œ μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν–ˆλŠ”μ§€ 생각해보고 κ·Έ λͺ©μ μ„ μ„€λͺ…ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • Not interpret unclosed quotes or special characters which are not required by the subject such as \ (backslash) or ; (semicolon).

    λ‹«νžˆμ§€ μ•Šμ€ λ”°μ˜΄ν‘œλ‚˜ (λ°±μŠ¬λž˜μ‹œ) λ‚˜ ;(μ„Έλ―Έμ½œλ‘ )κ³Ό 같이 κ³Όμ œμ— ν•„μš”ν•˜μ§€ μ•Šμ€ 특수문자λ₯Ό ν•΄μ„ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

  • Handle ’ (single quote) which should prevent the shell from interpreting the metacharacters in the quoted sequence.

    μ‰˜μ΄ quoted sequence μ•ˆμ— μžˆλŠ” metacharactersλ₯Ό ν•΄μ„ν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜λŠ” β€˜(single quote)λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • Handle " (double quote) which should prevent the shell from interpreting the metacharacters in the quoted sequence except for $ (dollar sign).

    μ‰˜μ΄ $(λ‹¬λŸ¬ 기호)λ₯Ό μ œμ™Έν•œ quoted sequence μ•ˆμ— μžˆλŠ” metacharactersλ₯Ό ν•΄μ„ν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜λŠ” β€œ(double quote)λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • Implement redirections:

    γ€€λ¦¬λ‹€μ΄λ ‰μ…˜ κ΅¬ν˜„
    • < should redirect input.

      γ€€ < λŠ” μž…λ ₯을 λ¦¬λ‹€μ΄λ ‰νŠΈ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    • > should redirect output.

      γ€€ > λŠ” 좜λ ₯을 λ¦¬λ‹€μ΄λ ‰νŠΈ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    • << should be given a delimiter, then read the input until a line containing the delimiter is seen. However, it doesn’t have to update the history!

      γ€€ << λŠ” delimiterλ₯Ό μ§€μ •ν•œ λ‹€μŒ delimiterλ₯Ό ν¬ν•¨ν•œ 쀄을 λ§Œλ‚˜κΈ° μ „κΉŒμ§€ μž…λ ₯값을 μ½μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, νžˆμŠ€ν† λ¦¬λ₯Ό μ—…λ°μ΄νŠΈ ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

    • >> should redirect output in append mode.

      γ€€ >> λŠ” append mode둜 좜λ ₯을 λ¦¬λ‹€μ΄λ ‰νŠΈ ν•©λ‹ˆλ‹€.

  • Implement pipes (| character). The output of each command in the pipeline is connected to the input of the next command via a pipe.

γ€€νŒŒμ΄ν”„ (| 문자) κ΅¬ν˜„ 각 νŒŒμ΄ν”„λΌμΈλ§ˆλ‹€ λͺ…λ Ήμ–΄μ˜ 좜λ ₯은 νŒŒμ΄ν”„λ₯Ό 톡해 λ‹€μŒ λͺ…λ Ήμ–΄μ˜ μž…λ ₯으둜 λ“€μ–΄κ°€μ•Ό ν•©λ‹ˆλ‹€.

  • Handle environment variables ($ followed by a sequence of characters) which should expand to their values.

γ€€ ν™˜κ²½ λ³€μˆ˜($ 뒀에 일련의 λ¬Έμžμ—΄μ΄ μ˜€λŠ” ν˜•μ‹)이 κ·Έλ“€μ˜ κ°’μœΌλ‘œ ν™•μž₯될 수 μžˆλ„λ‘ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • Handle $? which should expand to the exit status of the most recently executed foreground pipeline.

γ€€ $?λŠ” κ°€μž₯ μ΅œκ·Όμ— μ‹€ν–‰ν•œ foreground νŒŒμ΄ν”„λΌμΈμ˜ μ’…λ£Œ μƒνƒœλ₯Ό ν™•μž₯ν•˜λ„λ‘ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • Handle ctrl-C, ctrl-D and ctrl-\ which should behave like in bash.

γ€€ ctrl-C, ctrl-D, ctrl-\λŠ” bash처럼 λ™μž‘ν•˜λ„λ‘ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • In interactive mode:

γ€€λŒ€ν™”ν˜• λͺ¨λ“œμ—μ„œ:

  • ctrl-C displays a new prompt on a new line.

    γ€€ ctrl-CλŠ” μƒˆλ‘œμš΄ 쀄에 μƒˆλ‘œμš΄ ν”„λ‘¬ν”„νŠΈλ₯Ό ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • ctrl-D exits the shell.

    γ€€ ctrl-DλŠ” μ‰˜μ„ μ’…λ£Œν•©λ‹ˆλ‹€.
  • ctrl-\ does nothing.

    γ€€ ctrl-\은 μ•„λ¬΄λŸ° λ™μž‘λ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • Your shell must implement the following builtins:

    γ€€μ—¬λŸ¬λΆ„μ˜ μ‰˜μ€ λ‹€μŒ λ‚΄μž₯ κΈ°λŠ₯을 κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • echo with option -n

      γ€€-n μ˜΅μ…˜μ„ μ‚¬μš©ν•  수 μžˆλŠ” echo
    • cd with only a relative or absolute path

      γ€€μ˜€μ§ μƒλŒ€ λ˜λŠ” μ ˆλŒ€κ²½λ‘œλ§Œ μ‚¬μš©ν•˜λŠ” cd
    • pwd with no options

      γ€€μ˜΅μ…˜μ΄ μ—†λŠ” pwd
    • export with no options

      γ€€μ˜΅μ…˜μ΄ μ—†λŠ” export
    • unset with no options

      γ€€μ˜΅μ…˜μ΄ μ—†λŠ” unset
    • env with no options or arguments

      γ€€μ˜΅μ…˜μ΄λ‚˜ μΈμžκ°’μ΄ μ—†λŠ” env
    • exit with no options

      γ€€μ˜΅μ…˜μ΄ μ—†λŠ” exit

    The readline() function can cause memory leaks. You don’t have to fix them. But that doesn’t mean your own code, yes the code you wrote, can have memory leaks.

readline() ν•¨μˆ˜λ‘œ 인해 λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•  수 μžˆμ§€λ§Œ 이것을 κ³ μΉ  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이것이 μ—¬λŸ¬λΆ„μ΄ μž‘μ„±ν•œ μ½”λ“œκ°€ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μžˆμ–΄λ„ λœλ‹€λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.

ℹ️ You should limit yourself to the subject description. Anything that is not asked is not required. If you have any doubt about a requirement, take bash as a reference.

κ³Όμ œμ—μ„œ μš”κ΅¬ν•œ μ„€λͺ…에 μ—¬λŸ¬λΆ„μ„ μ œν•œν•΄μ•Ό ν•©λ‹ˆλ‹€. μš”κ΅¬ν•˜μ§€ μ•Šμ€ 것은 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μš”κ΅¬μ‚¬ν•­μ— λŒ€ν•΄ 의문점이 생긴닀면 [bash] λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.


Chapter 4

Bonus part


Your program has to implement:

μ—¬λŸ¬λΆ„μ˜ ν”„λ‘œκ·Έλž¨μ€ λ‹€μŒμ„ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€:

  • && and || with parenthesis for priorities.

    γ€€κ΄„ν˜Έλ₯Ό μ΄μš©ν•΄ μš°μ„ μˆœμœ„λ₯Ό ν‘œν˜„ν•œ &&, ||

  • Wildcards * should work for the current working directory.

    γ€€μ™€μΌλ“œμΉ΄λ“œ *κ°€ ν˜„μž¬ μž‘μ—… 디렉토리에 λŒ€ν•΄ λ™μž‘ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.

🚫 The bonus part will only be assessed if the mandatory part is PERFECT. Perfect means the mandatory part has been integrally done and works without malfunctioning. If you have not passed ALL the mandatory requirements, your bonus part will not be evaluated at all.

bonus partλŠ” mandatory partκ°€ μ™„λ²½ν•œ κ²½μš°μ—λ§Œ ν‰κ°€λ©λ‹ˆλ‹€. μ™„λ²½ν•˜λ‹€λŠ” 것은 mandatory partκ°€ 였λ₯˜ 없이 μ™„μ „ν•˜κ²Œ μž‘λ™ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. mandatory part의 μš”κ΅¬μ‚¬ν•­μ„ λͺ¨λ‘ ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆλ‹€λ©΄, bonus partλŠ” μ „ν˜€ ν‰κ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Chapter V

Submission and peer-evaluation

Turn in your assignment in your Git repository as usual. Only the work inside your repository will be evaluated during the defense. Don’t hesitate to double check the names of your files to ensure they are correct.

ν‰μ†Œμ²˜λŸΌ Git μ €μž₯μ†Œμ— 과제λ₯Ό μ œμΆœν•˜μ„Έμš”. λ””νŽœμŠ€ μ€‘μ—λŠ” μ €μž₯μ†Œ λ‚΄λΆ€μ˜ μž‘μ—…λ¬Όλ§Œ ν‰κ°€λ©λ‹ˆλ‹€. λ‹€μ‹œ κ²€μ‚¬ν•˜λŠ” 것을 망섀이지 말고 파일 이름이 μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜μ„Έμš”.

Clone this wiki locally