重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

C言語のsystem関数でエイリアスを設定したコマンドを実行する方法、どなたかご存じないでしょうか。
例えばbashを使っているユーザであれば、ユーザのbash_profileの中に
alias id='id -g username'
と記載し、idコマンドを実施した際には必ずusernameさんのグループIDを出力させるようにします。
この状態で、profileを読み込んでidコマンドを実行すると「500」等のIDが出力されます。

これをCのソースの中にsystem関数として記載します。
勿論ユーザはbashのプロファイルを読み込んでいる状態でgccします。
ソースファイル名をtest.cとすると、test.cのmainは以下

int main(){
system("id");
return 0;
}

この状態でソースをgccして、実行ファイルを実行しても出力結果は先ほどのグループIDのみではなく標準的なid,つまり
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys) 以下省略
と出力されていしまいます。

やりたい事はエイリアスを設定したコマンドをCのsystem関数で使いたいのですが、どなたかやり方ご存知の方いらっしゃいますでしょうか。

使用しているOSはLinuxです。

どうぞ宜しくお願い致します。

A 回答 (3件)

system()により呼び出されたコマンドは実行中のプログラムとは別のシェルで動作するので、シェルで登録したエイリアスや環境変数は使えない前提で使うものです。



参考URL:http://linuxjm.sourceforge.jp/html/LDP_man-pages …
    • good
    • 0

こんな感じでいかがでしょう。



system( "/bin/bash -i -c id" );

他のシェルを使用しているユーザーにも対応する必要があれば、
getpw(3) で pw_shell を見てやる必要があります。
ちなみに -i のようなオプションが全シェルで共通とは限りません。
    • good
    • 0

それはたぶんずれてる>#1.



#1 で挙がっている system(3) にあるように, 「/bin/sh を実行するから」でしょう. Linux の場合 sh は bash の (シンボリックまたはハード) リンクになっていると思うので, bash(1) を見れば原因がわかるはずです (最悪 bash のドキュメントを読めばいい).
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!