xtermの現在の作業ディレクトリを使用してリダイレクトしようとしています。
xterm -ls -geometry 80x30 -e 'cd /home/work/test1/; pwd; make | tee test1.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/temp/test2/; pwd; make | tee test2.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/tmp/test3/; pwd; make | tee test3.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/my_test4/; pwd; make | tee my_test4.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/append/my_test5/; pwd; make | tee my_test5.log;'
...
名前が現在の日付と時刻で、xtermの現在の最後のディレクトリ名であるファイルに出力をリダイレクトしたいと思います。
for example).
xterm -ls -geometry 80x30 -e 'cd /home/work/append/my_test5/; pwd; make | tee my_test5_03:19:12-11-2023.log;'
名前がxtermの現在の日付と時刻で、現在のディレクトリ名であるファイルに出力をリダイレクトするにはどうすればよいですか?
答え1
努力する:
xterm -ls -geometry 80x30 -e sh -o errexit -o nounset -c '
cd -P -- "$1"
pwd
make 2>&1 | tee -- "$OLDPWD/${1##*/}_$(date +%FT%T).log"
' sh ~/work/test123
sh
xterm呼び出しが$SHELL
シェルコードであると思うものを解釈するのではなく、明示的に呼び出します。- これにより、最初の位置引数を使用して、安全な方法でディレクトリをシェルに渡すことができます。
errexit
コマンドが失敗した場合は中断するオプションを使用して、失敗した場合は実行しないでください。良い測定のために追加されましたが、この単純なコードには必要ありません。make
cd
nounset
- ログファイルは、ディレクトリを変更する前に使用された元の作業ディレクトリ(したがって呼び出されたディレクトリ)に作成されます
xterm
。sh
$OLDPWD
cd
$PWD
sh
makeのstdoutとstderrをパイプにリダイレクトしてエラーも記録します(ただし、エラーはstdoutを介して渡されます。両方ともtee
エミュレートされた端末に移動するため、ここでは違いはありませんxterm
)。${1##*/}
展開すると、$1
一番右のすべての項目が削除されます/
。$(basename -- "$1")
aで終わるとうまくいきますが、改行で終わるとうまくいかないものを使用することもできます。$1
/
- ソートに便利であいまいな標準YYYY-MM-DDTHH-MM-SS形式を使用します。
ファイルが以前に存在していた場合は上書きされ、tee
ファイル-a
に追加するオプションを追加できます。
make
(and)の終了ステータスは、発信者に伝播されないsh
ため失われます。xterm
使用の代替案は、改行のerrexit
代わりに3つのコマンドをリンクし、使用してすべてがより明確になるようにすることです。&&
nounset
${var?error message}
xterm -ls -geometry 80x30 -e sh -c '
cd -P -- "${1?No dir specified}" &&
pwd &&
make 2>&1 | tee -- "$OLDPWD/${1##*/}_$(date +%FT%T).log"
' sh ~/work/test123
使用の代替はtee
use でありzsh
、このmultios
機能を使用すると別々の stdout および stderr ストリームを維持できます。そこに$OLDPWD
書くことも可能で、~-
ヒント拡張を使用して内部的にタイムスタンプを計算することによって$var:t
正しいデフォルト名です。
xterm -ls -geometry 80x30 -e zsh -c '
cd -P -- "${1?No dir specified}" &&
pwd &&
make 3> ~-/${1:t}_${(%):-%D{%FT%T}}.log >&1 >&3 2>&2 2>&3 3>&-
' zsh ~/work/test123
シャットダウン状態はmake
維持されますが、それを便利にするのではなく伝播するには、ターミナルエミュレータが必要ですxterm
。