2016-09-22 8 views
0

type -t typeを実行するのにpopenを使用すると、エラーメッセージ-tが見つかりません。シェルでtype -t typeを実行すると、が組み込まれてになります。これはなぜpopenで動作しないのですか?linuxでタイプ-tコマンドを使用します。c?

+0

あなたが書いたコードを表示することはありますか?それはコンパイラのエラーメッセージかランタイムエラーですか? – UnholySheep

+0

FILE * file = popen( "タイプ-tタイプ"、 "w");このエラーは、実行時に標準出力に表示されます。私がタイプ-t型をシェルで直接使用すると、組み込み関数が得られます。 (エラーなし) – Ellebasi

答えて

0

POSIXは、popenで使用されるシェルが/bin/shであることを指定します。あなたのインタラクティブシェルはおそらくbashです。 typeコマンドの動作は、shbashでは異なります。 sh-tをサポートしていません。

システムにはおそらくにシンボリックリンクされた/bin/shがありますが、それは単なる実装の詳細です。

あなたがbash動作が必要な場合は、明示的bashを実行します。

popen("/bin/bash -c 'type -t type'", "r") 

Live demoを。

+0

私の対話型シェルはbashです。 Ok -tは、shで説明されているshではサポートされていません。あなたの答えをありがとう。回避策はありますか?プログラムの場合は、組み込みのコマンドとファイルを組み込んだときに結果を組み込む別のコマンドがありますか? – Ellebasi

+0

これは素晴らしい作品です。 :-)どのようにしてif文にpopen( "/ bin/bash -c 'タイプ-t型'"、 "r")の出力(組み込み、ファイル)を使うことができますか? – Ellebasi

+0

私は出力に組み込みとファイルの代わりにultinとileを入れていることがわかります。どのように解決できますか? – Ellebasi

関連する問題