Minishell-shellプログラムの作成
3060 ワード
bashを真似て小さなshellプロジェクトを作成する
입력값 : [echo helloworld! > test.txt]
토크나이저 결과
[ "echo", "helloworld!", ">", "test.txt"]
렉서 결과
[
{type: 'command', value:"echo" },
{type: 'string', value: "helloworld!"},
{type: 'redirect', value: ">"},
{type: 'file', value: "test.txt"}
]
Shellにコマンドを入力すると、その文字列をTokenに分割してLexer処理するLexical解析が行われます。
コマンドを入力すると、まず自分で作成したクローン関数を優先的に実行します。
クローン関数(bashシミュレーション関数)
クローン関数1:現在のディレクトリのcdを変更する
クローン関数2:echo(-nオプション実装)パラメータとして送信されたテキストを出力
クローン関数3:環境変数を表示するenv
クローン関数4:現在のプロセスを終了
クローン関数5:環境変数を追加するためにエクスポート
クローン関数6:unset、環境変数をクリア
クローン関数7:pwd現在のパスを表示
リダイレクト(<、<、>、>)
echo hello > a > b > c
result : a 빈파일, b 빈파일, c hello
次のパイプの前に、最後に宣言されたリダイレクトが最終目標になります。
クローン関数に実行するコマンドがない場合は、OS関数を実行します。
オペレーティングシステムPATHのファイルの実行
絶対パスを使用する場合は、システムcallstat関数を使用してファイルの存在を決定する方法でコマンドを実行します。「ls」のようにファイル名だけを書く場合は、PATHのパスを迂回して「ls」ファイルを検索して実行します。
実行時にプロセスを作成して実行します。正常に終了した可能性があるので、exitコードを受信する必要があります。親プロセスはwaitpid関数を使用してサブプロセスの終了を待機します。
Reference
この問題について(Minishell-shellプログラムの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@jay13jeong/Minishell-shell-프로그램-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol