サブシェルスクリプトの戻り値を取得します。

サブシェルスクリプトの戻り値を取得します。

新しい.shスクリプトを起動するシェルスクリプトがあります。添え字の戻り値を変数に保存したいと思います。

このスクリプトが見つかりました。

#!/bin/bash
r=1
while [[ r -ne 0 ]]
do
r=`vx $* < \`tty\` > \`tty\``
done
exit 0

パラメータを使用してスクリプトvxを呼び出し、戻り値を変数rに格納します。 tty... とはどういう意味ですか?これは戻り値ですか? $は使えませんか?値を返すには?

ありがとうございます!

編集する:

それでは、次の文は間違っていますか?

#!/bin/bash

returnvalue=1

while  [ $returnvalue -ne 0 ]
do
    bash ./vx $1
    returnvalue=$?
done

答え1

私は実際に次のことをしたいと思います。

#! /bin/sh -
until rv "$@"; do
  continue
done

$?通常、終了状態()の実際の値を取得する必要はなく、0がtrueかfalseを意味するのかを知る必要もありません。until, while, ... 構造体でifこの問題を解決できます。上記はcontinue単に可読性のためのものです。 no-opコマンドを含むすべてのコマンドをここに配置できます:

$*引用符を使用したり残したりしないでください$@。意味がありません。

答え2

スクリプトの出力は「r」に保存され、終了コードは$?に保存されます。

だから「完了」の前に1行だけ追加してください。

result=$?

答え3

表現において

r=`vx $* < \`tty\` > \`tty\``

Bashは、これを現在スクリプトに渡されたすべてのシェル拡張引数()を渡すことがvxできる実行可能ファイル名として解釈します。$*たとえば、スクリプトの引数がある場合、* `ls /dev`vxに渡される引数のリストは、現在のディレクトリにあるすべてのファイルの名前に追加されます/dev。引数の数はファイル名の数と同じです。

vx標準入力で入力が許可されているとします。

ttyBash がファイル名として解釈する文字列を返す実行可能ファイルです。

最初の呼び出しは、tty2番目の呼び出しとは異なるファイル名を返すことがあります。たとえば、ttyファイル名がいくつかの外部条件(たとえば、以前の呼び出しで生成された名前のファイルの内容)に基づいて生成された場合、またはファイル名が次のような場合です。タイムスタンプまたは変更される可能性がある他の外部条件に基づいて生成されます。

この式は、r=`...`backtickコマンドの標準出力をに割り当てますr。バックティック式の戻り値はです$?

の標準出力は、vx2番目の呼び出しで生成されたファイル名にリダイレクトされるので、tty値はr式と同じように常に空です()r=。その結果、ループは複数回実行されません。r=0[[ r -ne 0 ]]

関連情報