Ruby で興味深い問題を発見しましたが、その動作は説明できません。
実行権限のあるシェル スクリプトを実行しようとしましたが、シェル スクリプトは、そのスクリプトの実行方法を説明する先頭のシバン (#!) を誤って省略しました。
バッククォート (`) を使用して irb 内でスクリプトを実行しようとすると、次のように表示されます。
>> `./hello.sh`
(irb):3: command not found: ./hello.sh
けっこうだ。ただし、代わりに入力すると
>> `./hello.sh\n`
=> "hello\n"
驚くほど効きます。の動作は上記%x{...}
と一致していますが(同等であることを考えると驚くことでsystem()
はありません)、改行かどうかに関係なく機能しません(私にはわかりました)。また、当然のことながら#!
、シェル スクリプト (hello.sh) に適切なコードを追加すると、すべてが機能します。
答えを探してみたところ、「ruby で `./myshell` を呼び出したときにコマンドが見つかりませんでした。」にしか言及されていませんでした。ただし、応答は、改行がコマンドのセマンティクスを変更するという考えを却下します。
何か案は?