Ubuntu:別のコマンドの出力を実行する


13

別のコマンドラインを出力するコマンドラインがあります。次に例を示します。

> commandlineA param1 param2
  commandlineB param1

与えられたパラメーターでcommandlineBを実行する単一のコマンドライン実行を希望します。

単一のコマンドラインを使用してそれを行う簡単な方法はありますか、または出力を変数に格納して実行する小さなbashファイルを実行する必要がありますか?

ありがとう


2
かなり検索しましたが、自分で見つけるために質問を投稿しなければならなかったと思います。
Lior Ohana 2015

回答:


17

あなたはこれを自分で解決したようですが、次のものを使用できます:

$(command parameter1 parameter2)

編集の編集:以下は多少間違っていますが、サブシェルでコマンドを実行しますが、環境変数は引き続き使用できることがわかります。誤解を招く人々のために申し訳ありません...

編集:サブシェルで実行され、エクスポートされていない環境変数は使用されません。同じシェルでコマンドを実行する場合は、以下を使用する必要があります。

eval $(command parameter1 parameter2)

別の答えは、bash自体をパイプ処理することです。

echo 'uname -a' | bash 

これはサブシェルでも実行され、同じシェルで実行するには、次のものが必要です。

echo 'uname -a' | bash -c

ちなみに、$()構文の代わりにバックティックを使用することもできますが、お勧めしません


(1)「サブシェルで実行される」という意味がわかりません。エクスポートされていない環境変数使用されます。(2)evalここで使用する理由がわかりません。理由があれば説明してください。(3)最後の例(  -c)は完全に間違っています。
スコット

あなたは正しいです、私はもう一度チェックしました、そして私はそこで間違っていました。リストとして実行する場合、bashシェルフォークと環境変数は引き続き使用できます。正解です。ごめんなさい。
クリスシャーロック

4

これを使って:

commandlineA param1 param2 | bash

例:

echo "uname -a" | bash

出力:

Linux k1104 2.6.38-8-generic#42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux

これには何の問題もありませんが、別のbashシェルが生成されます。
Chris Sherlock

そうする$(commandlineA param1 param2)
トリプルリー

@tripleee:オレンジとカボチャを比較しています。  printf '\143\144\040\057\n' | bashコマンドは新しい独立した(そして一時的な)シェルプロセスで実行されるため、最終的には何も行われません。対照的に、$(printf '\143\144\040\057\n')現在のアクティブな対話型シェルでディレクトリを変更します。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.