-1

g ++を使用してプログラムをコンパイルして実行しようとしたところ、次のコマンドが表示されました。

g++ -o example example.cpp && ./example

そしてそれはOKです。時間を節約するために環境変数を設定しようとしました。

COMPRUN="g++ -o example example.cpp && ./example"

echo $COMPRUN割り当ては大丈夫だったと教えてくれます)。しかし、を使用して実行しようとすると$COMPRUN、が得られg++: error: &&: No such file or directoryます。

エイリアスは正常に機能しますが(私の元の問題は解決されます)、環境変数は機能しません。

コマンドの実行が環境変数からの実行と直接異なるのはなぜですか?コマンドラインはコマンドをどのように解釈して、「そのようなファイルはありません」というエラーを取得しましたか?

4

2 に答える 2

1

エラーが発生した理由は、シェルがコマンドラインを解釈しなかったためです。そのため&&、制御演算子として解釈されるのではなく、単純な文字列(コマンドのコンテキストでのファイル名)として扱われます。eval $COMPRUNシェルに実際にコマンド文字列を評価させるには、を使用する必要があります。

于 2013-03-05T17:20:34.263 に答える
1

変数ではなくシェル関数を使用して、任意のコードをカプセル化します。

$ comprun () {
    g++ -o "$1" "$1".cpp && ./"$1"
}
$ comprun example

コマンド ラインが既に解析された後にパラメータ展開が発生するため、構文構造 ( など&&) は認識されません。あなたの場合、存在しなかったファイルは「&&」でした。

于 2013-03-05T17:30:53.073 に答える