本番統合 (by urassh)#80
Merged
Merged
Conversation
PR説明用のデフォルトコメントメッセージを設定しました。
libftを追加しました。
基本となるディレクトリを作成しました。
① minishellディレクトリから平坦化
PRのテンプレートに動作確認の項目を追加した
* feat: pushされるたびにnorminetteをチェックするCIを実装 * ciのチェックはpushのみ * add: jiku/* ブランチの時もnorminette監視対象になるように * fix: master
* feat: pushされるたびにnorminetteをチェックするCIを実装 * ciのチェックはpushのみ * add: jiku/* ブランチの時もnorminette監視対象になるように * add: buildできるかどうかのテストも追加 * fix: pushごとに * fix: master
* fix: on_inputの終了ステータス処理を整理 * fix: statusをon_input内部で変更できるように関数シグネチャを変更した。 * add: expand層に$?を展開するexpand_question層を追加。 * fix: includes/prompt.hのNormを修正。 * fix: on_inputのlast_statusのSignitureを、int *->intに変更。 * chore: 可読性を上げるために、current_statusという一時変数を追加。
- declare -x プレフィックス付きで一覧表示 - export FOO (値なし) と export FOO= (空文字) を区別 - 不正な識別子にエラーメッセージを表示 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
外部コマンドのリダイレクトは子プロセスのみで実行し、 ビルトインのリダイレクトは dup で fd を保存・復元するよう変更。 cmd_not_found と exec_external_cmd を find_exec_path.c に移動。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- parse_redir の戻り値判定を !result から == ERROR に修正 - ビルトイン実行後に fflush(stdout) を追加し fd 復元前にバッファを確実にフラッシュ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts: # src/callback/on_input.c
on_input で展開済みのため exec_cmd 内の expand/expand_redir_filenames は不要。 expand_redirs.c も削除。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
シグナルハンドリング(子プロセスdefault/親ignore/復帰interactive)、 128+WTERMSIG終了コード、exec_external_cmd分離を取り込み。 prod-urassh側のis_builtin事前判定・fd保存復元・last_statusパラメータ方式を維持。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- echo/pwdのprintfをft_putstr_fd/writeに置換しリダイレクト時のバッファ問題を解消 - exec_subshellにシグナルハンドリング(default/ignore/interactive)を追加 - exec_builtin_with_redirから禁止関数fflushを削除 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
parse_tokenとis_cmd_endを分離して25行制限に対応。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ディレクトリをコマンドとして実行した際に "Is a directory" エラー(終了ステータス126)を 正しく返すように修正。また、変数展開をパイプライン全体の一括処理からコマンド単位の 実行時展開に変更し、export FOO=bar && echo $FOO が正しく動作するようにした。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
exit_status=1との混合を避けるため。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
prod-urassh ブランチの全変更を develop にマージするPR。prodブランチからの変更に加え、feature/signal-exec、feature/subshell、fix/redirect の各ブランチを統合。
実行基盤 (prod)
on_inputを本番用に組み替え、fork による外部コマンド実行を実装exec_cmd.cに外部コマンド実行を統合し重複join_pathを削除、exec_external_cmdを独立ファイルに分離find_exec_pathを追加し、コマンドが見つからない場合のエラー処理 (126/127) を実装src/checker/,docs/,print_ast*) を削除シグナルハンドリング (feature/signal-exec)
128 + WTERMSIGで正しく返すように修正サブシェル (feature/subshell)
(cmd1 && cmd2) | cmd3のようなサブシェルグループのパーサ・実行サポートを追加SUBSHELLASTノード型を追加、parse_pipelineを独立ファイルに移動exec_subshellで fork し子プロセス内でサブシェルASTを実行論理演算子 (feature/logical-operators)
&&/||論理演算子のパーサ・実行サポートを追加$?展開対応 (expand_question)、on_inputでlast_statusを管理リダイレクト修正 (fix/redirect)
is_builtin()で行い二重実行を防止printf→ft_putstr_fd/writeに変更しバッファフラッシュ問題を根本解消Expand 層
その他
exportコマンドを bash 互換に改善parse_cmdをparse_token/is_cmd_endに分離して25行制限に対応Test plan
基本コマンド実行
ls— 外部コマンドが正常に実行されることls -la /tmp— 引数付き外部コマンドが動作すること/bin/ls— 絶対パスでコマンドが実行されること./minishell— 相対パスでコマンドが実行されることnotexist→command not found(終了ステータス 127)/nonexistent_file→ パスあり存在しないコマンドでエラー (終了ステータス 127)/tmp→ ディレクトリを実行しようとしてis a directoryエラー (終了ステータス 126)ビルトインコマンド
echo hello world— 引数を出力することecho -n hello— 改行なしで出力することecho -nnn hello— 複数 n フラグでも改行なしで出力することpwd— カレントディレクトリを出力することcd /tmp && pwd— ディレクトリ移動後のパスが正しいことexport FOO=bar && echo $FOO→barexport— bash 互換のdeclare -x形式で出力されることunset FOO && echo $FOO— 変数が削除されることexit— シェルが正常に終了することexit 42→ 終了ステータスが 42 であることパイプ
echo hello | cat→helloecho hello | cat | cat— 3段パイプが動作することls | grep minishell | wc -l— 複数段パイプの結果が正しいことcat /dev/urandom | head -c 100 | wc -c→100リダイレクト
echo hello > out.txt— ファイルに書き込まれることecho hello > out.txt && cat out.txt→helloecho hello >> out.txt && echo world >> out.txt— 追記リダイレクトが動作することcat < Makefile— 入力リダイレクトが動作することecho builtin > out.txt && cat out.txt— ビルトインのリダイレクトで正しくファイルに書き込まれること(バッファ問題の修正確認)pwd > out.txt && cat out.txt— pwd のリダイレクトが正しく動作することcat < nonexistent— 存在しないファイルでエラーになることヒアドキュメント
cat << EOF→ 入力を受け付けて EOF で終了すること論理演算子
true && echo ok→okfalse && echo ng→ 何も出力されないことfalse || echo fallback→fallbacktrue || echo ng→ 何も出力されないことtrue && true && echo ok→ok(連鎖)false || false || echo last→last(連鎖)true && false || echo recovered→recovered(混合)false || true && echo ok→ok(混合)サブシェル
(echo hello)→hello(echo hello && echo world)→hello\nworld(echo hello && echo world) | cat— サブシェルとパイプの組み合わせ(false || echo ok)→ok— サブシェル内の論理演算子(cd /tmp && pwd)→/tmpでサブシェル外の pwd は変わらないこと(exit 42)→ サブシェルのみ終了し親シェルは継続すること終了ステータスと $?
echo $?— 直前の終了ステータスが表示されることtrue && echo $?→0falseの後echo $?→1notexistの後echo $?→127$?が128 + シグナル番号であること (例: Ctrl+C → 130)シグナルハンドリング
cat実行中に Ctrl+C → cat が終了しプロンプトに戻ることcat | cat | ls実行中に Ctrl+C → 正しく中断されることsleep 100実行中に Ctrl+C → 中断されることクォート
echo "hello world"→hello world(ダブルクォート)echo 'hello world'→hello world(シングルクォート)echo "hello'world"→hello'world(クォート境界)echo 'hello"world'→hello"world(クォート境界)echo "hello""world"→helloworld(連続クォート)echo "$HOME"→ 変数が展開されること (ダブルクォート内)echo '$HOME'→$HOME(シングルクォート内は展開されない)変数展開
echo $HOME— 環境変数が展開されることecho $NONEXISTENT→ 空文字列になることecho "$HOME"— ダブルクォート内で展開されることecho '$HOME'→$HOME(展開されない)ワイルドカード
echo *.c— カレントディレクトリの .c ファイルが展開されることecho src/*.c— パス付きワイルドカードが正しく展開されることエッジケース
exitと表示されてシェルが終了すること🤖 Generated with Claude Code