grive ツールを使用して、コンピューターをGoogleドライブと同期するスクリプトを作成しようとしています。 grive
コマンドの出力をbash変数に保存したいのですが、うまくいかないようです。
一部のグーグルは、次の構文を使用してコマンド出力を変数に保存できることを教えてくれました。
VARABLENAME=$(command)
出力は後で印刷できます
echo ${VARIABLENAME}
ただし、この構文を使用すると、ターミナルで出力が印刷され、変数の内容が空になるため、griveコマンドはこれの例外のようです。
grive
の出力を変数に適切に格納するにはどうすればよいですか?
問題は、grive
コマンドがエラーストリームSTDERR(ファイル記述子2)に出力していたことです。これは通常、エラーメッセージの受け渡しに使用され、STDOUT(ファイル記述子1)は実際の(成功時)出力の表示に使用されますすべてのプログラムの(厳密に言えば)。
grive
は使用していませんが、あなたの言葉によると、開発者はコマンドからのメッセージを表示するためだけにSTDERRを使用した可能性があります。
これで、使用したコマンド置換:
VARABLENAME=$(command)
sTDERRではなく、command
のSTDOUTをVARABLENAME
に保存します。その結果、変数は空であり、ターミナルにメッセージが表示されていました。
私は提案しています:
VARABLENAME="$(command 2>&1)"
これにより、STDOUTとSTDERRの両方が変数に保存されます(この場合、STDOUTがないのでSTDERRのみです)。したがって、echo "${VARIABLENAME}"
を使用すると、目的の結果が得られます。
また、STDOUTがないため、STDERRのみを変数に保存できます(一般化、そのようなプログラムの場合はtrue):
VARABLENAME="$(command 2>&1 >/dev/null)"