質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Solaris

Solarisは、SunSoft社が開発・販売を行っているUnix系のOSです。Sun Microsystems社製コンピュータで動作し、またPC/AT互換機で動作するバージョンもあります。旧名称は「SunOS」ですが、現在はSolarisのカーネル部分をSunOSと呼んでいます。

Q&A

解決済

1回答

11929閲覧

コマンドラインからのshell実行戻り値とプログラムからのshell実行戻り値が違う

litteone

総合スコア10

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Solaris

Solarisは、SunSoft社が開発・販売を行っているUnix系のOSです。Sun Microsystems社製コンピュータで動作し、またPC/AT互換機で動作するバージョンもあります。旧名称は「SunOS」ですが、現在はSolarisのカーネル部分をSunOSと呼んでいます。

0グッド

0クリップ

投稿2015/05/18 04:39

rshを使って別サーバのshellを実行しその戻り値を取得するshellがあり、コマンドラインからのshell実行とC++内部からのshell実行で値が違い、原因がわからず困っております。知恵をお貸し頂けないでしょうか。

実行shell内容<test.sh>

lang

1#!/bin/sh 2V_SERVER=$1 3VRESULT=`rsh -l user ${V_SERVER} "/usr/local/test2.sh > /dev/null; echo \\$?"` 4 5exit $VRESULT

コマンドラインからshell実行

lang

1/usr/local/test.sh サーバ名 2echo $?

リモートシェルの正しい戻り値が表示される。

C++内部からのshell実行

lang

1strcpy(server,"サーバー名"); 2sprintf(command, "/usr/local/test.sh %s", server); 3int returnid = system(command); 4returnid = WEXITSTATUS(returnid); 5printf(returnid);

ファイル出力して確認したところ、プログラム側からだとtest.shの変数VRESULTに値が入っていないようです。
コマンドラインとプログラムからのshell実行について両方とも同一のユーザにてshellを実行しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

原因はわかりませんが、以下を確認してみてはいかがでしょうか。

  • 環境変数、標準入出力などに違いはないか
  • C++ プログラムから実行した場合、リモート側で test2.sh は実行されるのか
    実行されない場合、rsh を絶対パスにするとどうか
  • rsh のエラー出力に何か出ていないか (下記例)

lang

1VRESULT=`rsh -l user ${V_SERVER} "/usr/local/test2.sh > /dev/null; echo \\$?" 2> /tmp/test.errlog`

投稿2015/05/19 03:04

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

litteone

2015/05/20 01:21

ご回答ありがとうございます。 上記3点を確認した所、rshがコマンドとして認識されていなかったようです。C++プログラムのsystem()関数だとパスを認識出来なかったのが原因と思われます。 rshを絶対パスにすることで解決致しました。 丁寧なご説明ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問