Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
C言語でシェルのようなbashを実装しました。と をサポート< > >> ; |し&ます。私の次のタスクは(、)基本的にサブシェルのサポートを追加することです。サブシェルを実装するにはどうすればよいですか。フォークして親を待機させ、環境変数を渡すことができますが、次のようなコマンドにサポートを追加する必要があります(ls | sort) ; ls(コマンドがあまり意味をなさないことは認めますが、動機は説明しています)
<
>
>>
;
|
&
(
)
(ls | sort) ; ls
どんな助けでも大歓迎です。
これを実装するには、コマンド ラインを解析し、ツリーのような構造を作成します。これはlexandの助けを借りて行うことができyacc、バーマーが提案したように、各ノードにsubshell pipeline semicolon. コマンド ライン全体を解析した後、ノード全体へのポインタをメイン プログラムに渡します。サブシェルを実行し、現在の環境を渡してfork同じプログラムをリロードするには。execve
lex
yacc
subshell
pipeline
semicolon
fork
execve