/dev/ttyの出力を変数に入れます。

/dev/ttyの出力を変数に入れます。

2つのバックアップスクリプトを作成しました。 1つはファイル用(filebackup.sh)、もう1つはデータベース用(dbbackup.sh)です。変数に出力をfilebackup.sh呼び出して保存しました。dbbackup.sh返される出力は、スクリプトがdbbackup.shすべてのバックアップデータベースを保存するtarファイルの名前です。

スクリプトの末尾にはdbbackup.sh以下が含まれます。

echo $TARFILE > /dev/tty

スクリプトはfilebackup.sh次のようにdbbackup.shを呼び出します。

DBBACKUP="`/scripts/dbbackup.sh &>/dev/null`"

これにより、スクリプトのすべての追加出力が/ dev / nullにダンプされ、ファイル名のみが返されます。

filebackup.shを呼び出すときにファイル名が画面に印刷されることを除いて、すべてがうまく機能します。この変数は$DBBACKUP空です。私がここで何を間違っているのか?

ベストアンサー1

つまり、からその>/dev/tty部分を削除し、dbbackup.sh次を使用します。

echo $TARFILE

これは$ TARFILEを標準出力として印刷します。つまり、端末で実行している場合は画面に印刷するか、リダイレクトがある場合はファイル/パイプに印刷します(dbbackup.shシェルバックティック/拡張$(...)で発生するように)。

上記の問題を修正しましたが、関数が機能しない別の理由があります。dbbackup.shスクリプトはtarファイル名を標準出力に出力しますが、次の行にあります。

DBBACKUP="`dbbackup.sh >&/dev/null`"

dbbackup.shのすべての出力をにリダイレクトして削除します/dev/null。エラーのみを削除するには、2>/dev/nullリダイレクトを使用してください。

長いストーリー:ライン

echo $TARFILE > /dev/tty

スクリプトの他のコマンドが共有する標準出力ストリームに印刷するのではなく、コマンドの出力を現在のプロセスが接続されている端末echo/dev/ttyリダイレクトしますdbbackup.sh。したがって、dbbackup.shinの出力をさらにリダイレクトすると、dbbackup.sh >&/dev/null2番目のリダイレクトはechoコマンドに影響しません。

もっと読んでみたいかもしれませんシェルリダイレクトそしてコマンドの置き換え

おすすめ記事