
bashスクリプト
bashスクリプト
#!/bin/bash
if [ -f *.log ]; then
echo `tar czf $(date +"%Y_%m_%d").tar.gz *.log`
fi
このようなスクリプトでecho ``(バックオート)でコマンドを実行できると思うんですが,
tar czf $(date +"%Y_%m_%d").tar.gz *.log←これ自体を表示できないでしょうか?
いまは,以下のようにしてコマンドを実行させ,さらに表示させています.
これだとあまり賢くないというか,1行でスマートに表示させたいのですが,
可能でしょうか?
if [ -f *.log ]; then
echo "tar czf $(date +"%Y_%m_%d").tar.gz *.log"
echo `tar czf $(date +"%Y_%m_%d").tar.gz *.log`
fi
投稿日時 - 2010-09-09 00:48:10
その前に
ここでバッククオート使う意味、ありますか?
tarを実行するだけなら ``の中だけ書けばいいです。
また、このコマンドでは何も出力しないので``は空文字列になり、echoも何も出力しません(正確には改行だけ表示する)。
さて、御所望の方法ですが、次のようなものがあります。
1)
# 変数に入れる
com="tar czf $(date +"%Y_%m_%d").tar.gz *.log"
# 表示
echo $com
# 実行
$com
2) set -xでトレースを有効にしたサブシェルで実行
(set -x ; tar czf $(date +"%Y_%m_%d").tar.gz *.log)
あと
> if [ -f *.log ]; then
*.logに該当するファイルが複数あるとエラーになります。
なんらかの対策が必要です
例)
#!/bin/bash
#該当ファイル名をグロービングしてを配列に入れる
declare -a f=(*.log)
#該当ファイルのチェック
#存在してなければ、*.log のままか空文字列になる(オプションによる)
if [ "$f" \!= '*.log' -a "$f" \!= '' ]
then
( set -x ; ls "${f[@]}")
fi
投稿日時 - 2010-09-09 09:43:18
このQ&Aは役に立ちましたか?
2人が「このQ&Aが役に立った」と投票しています
回答(2)