bashの最後の戻り値にアクセスするにはどうすればよいですか?


69

単純なシナリオ:wsdlプロジェクトの途中で失われたファイルを探しています。

$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl

どこにあるかがわかったので、このファイルで何かをしたい、たとえば編集したい。私のコマンドの後ろにパスをコピー/ペーストする代わりに、find以前に返されたパスを使用することは可能ですか?最後に入力した引数!$またはで最後のコマンドにアクセスできるように!!
私はそれが可能であったことを読みましたが、それは$?私にエラーを返すだけです:0: command not found

$ echo $?
0: command not found

3
これは戻り値ではなく、出力です!
ミランダベラクルスDeLaHoyaCardina

詳しく説明すると、「戻り値」は常に数値です。通常、0は成功を意味し、0以外は何らかの失敗を意味します。コマンドが出力する文字列(またはテキスト)は、「戻り値」ではなく「出力」と呼ばれます。
マイケルドースト

回答:


33

コマンド置換でコマンドを実行します。

output=$( find -name '*.wsdl' )
echo "$output"

出力はoutput変数に保存されるので、何度でも使用できます。


11
これは正しい答えではありません。$?です。
-mcmlxxxiii

@mcmlxxxiii:$?パスが含まれていません。
チョロバ

1
謝罪、私はreturn質問の用語の誤用に混乱していた。上記の質問に対するあなたの答えは絶対に正しいです。
mcmlxxxiii

4
$?最後のコマンドの終了ステータスが含まれています
ブレットワーグナー

これはが探していた答えでした。成功/失敗の戻り値ではなく、前のコマンドの出力に興味があります。よろしくお願いします!
ジョシュアピンター

74

そのための特別なbash変数はありません。

$? 最後のコマンドの終了コードが含まれます(0 =成功、> 0 =エラーコード)

次のようにfind-execフラグ付きの出力を使用できます。

 find -name  '*.wsdl' -exec emacs {} \;

{}で見つかったファイル名に置き換えられますfind。これにより、見つかったすべてのファイルに対してコマンドが実行されます。見つかったすべてのファイルを引数としてコマンドを実行する場合は、次の+ように末尾を使用します。

  find -name '*.wsdl' -exec emacs {} +

これにより、見つかったすべての.wsdlファイルが開かれた1つのemacsインスタンスが開かれます。

より一般的な解決策は、出力を変数に保存することです。

result=$(find -name '*.wsdl')
emacs $result

これは、findだけでなく、すべてのコマンドで機能します。あなたも使用するかもしれませんがxargs

  find -name '*.wsdl' | xargs emacs {}

$?他のコマンドの終了コードを返すことは可能ですか?例:ping 1.1.1.1 -w 10; リターン$?
twnaing

1
$?前のコマンドの終了コードが含まれています。したがって、答えはイエスです。
迎える

43

最後のコマンドが2回実行されることを気にしない場合、最小限のキーストロークで必要なことを実行する必要があるクイックハックを次に示します。

バックティックを使用して、ala:

`!!`

例えば

$ find。-name HardToFind.txt
some / crazy / path / to / HardToFind.txt
$ vim `!!`

*編集:上記のリンクされた「おそらくだまされた」質問にもこの回答が含まれています。まだこれに直接関連しているので、そのままにしておきますが、だまされてすみません。


2
非常に賢い。これは、コマンドを実行するまで出力が必要であることがわからないという最も一般的なケースを解決するため、受け入れられた答えだと思います。
ポールルアン

1
同意する、これは私がここに来て探しているものだ 前の行で何かを行うと、最後に返された値を使用して何かを実行することを遡及的に決定するという私の目的が無効になります。(git br | grep私のケースで見つけたブランチをチェックアウト)
ジャックケーシー

私のお気に入りの1つです。私は日常的にこれを行うと思います。
MetalGodwin

これは非常に賢いことだと思いますが、実際にどれほど役立つかはわかりません。タイピング!!は上キーを押すよりもずっと簡単ですか?そして、あなたはまだあなたのコマンドを見ることができます。コマンドを再度実行することが許容される場合、
押し上げる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.