カスタムシェルのコマンドラインパラメータと引用符の使用の効果を理解する

カスタムシェルのコマンドラインパラメータと引用符の使用の効果を理解する

Cを使用してカスタムシェルを作成しており、解析、フォークと実行、パイピング、リダイレクトなどを正常に実行しています。特定のタイプのコマンドが私のシェルを捨てているようです。

Bashシェルでは、次のコマンドが機能します。

bash> echo "abc" >> tempFile
bash> sed  s/a/b/g  tempFile
bash> sed  's/a/b/g'  tempFile

私のカスタムシェルから

mysh> sed  s/a/b/g  tempFile
mysh> sed  's/a/b/g'  tempFile

最初の sed コマンドは動作し、2 番目のコマンドは以下のように失敗します。

sed: 1: "'s/a/b/g'": invalid command code '

これがシェルからコマンドを分岐して実行する方法です。

execvp(qualifiedPath, arguments)

上記のコマンドでは、qualifiedPath"/usr/bin/sed"とパラメータは文字ポインタで終わる配列です(例:最初のNULLコマンドの場合は、、、2番目のコマンドの場合、、、、)。 [0] = "sed"[1] = "s/a/b/g"[2] = "TEMP"[3] = (char*)NULL[0] = "sed"[1] = "'s/a/b/g'"[2] = "TEMP"[3] = (char*)NULL

一重引用符でexecが失敗し、同じ動作が観察される理由を知っている人はいますか?

mysh> sed  "s/a/b/g"  tempFile
sed: 1: "'s/a/b/g'": invalid command code '

ベストアンサー1

@iFreilichtと@Andy Daltonに感謝します。私がどれほど愚かだったか。 Bashシェルは引用符を使用し、引数が 'または'で囲まれているかどうかに応じて、シェルが引数を挿入します。スタックオーバーフロースレッドより詳細な説明が提供される。

おすすめ記事