[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 01:32 / Filesize : 243 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part4



1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

852 名前:login:Penguin mailto:sage [2009/02/19(木) 23:37:20 ID:cCKDE498]
>>851
sed使え。

853 名前:login:Penguin mailto:sage [2009/02/19(木) 23:49:02 ID:emv2wr4j]
>>852
ありがトン

854 名前:login:Penguin mailto:sage [2009/02/20(金) 00:42:21 ID:myUOwbMU]
bashとshでどう違います?

shだと
export hoge=FUgfdsa とかできない
配列が使えない
くらいは知ってるんですが

855 名前:login:Penguin mailto:sage [2009/02/20(金) 00:49:54 ID:XTIEtF8Q]
古いシェルのことを考えたら切りがないよ
www.bookshelf.jp/texi/autoconf-ja/autoconf-ja_10.html
/bin/shを名乗るならPOSIX sh準拠でいてほしいね

856 名前:login:Penguin mailto:sage [2009/02/20(金) 00:56:59 ID:+4QiWBsa]
>>854
いろいろ違うがshの種類によってもさらに違うので一概には言えない。
おかげで、GNU autotools は恐しく涙ぐましい努力をしている。
詳しくは「移植性 シェルスクリプト」あたりでぐぐれ。

857 名前:login:Penguin mailto:sage [2009/02/20(金) 01:42:32 ID:slfVamAC]
>>854
以下のスクリプトを test-cdpath.sh として保存する。
---------
#!/bin/sh
# #!/bin/bash

echo "mkdir -p hoge/foo"
mkdir -p hoge/foo
pwd
cd hoge
pwd
cd foo
pwd

exit
----------
$ export CDPATH="/usr/src"
$ ./test-cdpath.sh


858 名前:login:Penguin mailto:sage [2009/02/20(金) 11:19:48 ID:UmU5RxVP]
>>854
自分で比較してみれば
heirloom.sourceforge.net/sh.html

859 名前:login:Penguin mailto:sage [2009/02/22(日) 23:16:28 ID:+4BXOJtP]
自分は普段kshを使ってプログラムを作っています。
ただ自己学習の一環として他のshもやってみようと思い、
cshの本をとりあえず買ってきました。
内容はアルゴリズム特集のようなもので入門書ではないです。そこそこむずかしめ。

ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。
本当でしょうか?無駄金使ってしまいましたかね?
幸い業務で使うわけではないので勉強すれば役に少しは立ちそうですが・・。

860 名前:login:Penguin mailto:sage [2009/02/22(日) 23:23:52 ID:yH/Zc28c]
>>859
うちの会社はcshのが多いわけだが。hp-uxとかsolarisとか。aixはどうだっけ?



861 名前:login:Penguin mailto:sage [2009/02/22(日) 23:27:29 ID:i9kTRR2X]
>>859
> ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。
> 本当でしょうか?無駄金使ってしまいましたかね?

本当です!(><)
「cshスクリプト使うのはよくないよ〜(considered harmful)」って文書があるくらい。

862 名前:login:Penguin mailto:sage [2009/02/22(日) 23:30:07 ID:+4BXOJtP]
>>860>>861
ありがとうございます。
使ってるところもあるけどあまり推奨されては居ないみたいなんですね。
とりあえずアルゴリズム集っぽい本なので表面的に理解して
ざっと勉強してみるくらいはしてみようかと思います。



863 名前:login:Penguin mailto:sage [2009/02/23(月) 00:01:25 ID:02TkTA5B]
cshとbashの違いってちょっと方言が違う〜くらいでないの?
forがforeachとか

あんまりしらないけど

864 名前:login:Penguin mailto:sage [2009/02/23(月) 00:42:30 ID:/AxKX1aI]
cshとtcshはどう地がうんすか?

865 名前:login:Penguin mailto:sage [2009/02/23(月) 01:44:47 ID:Abtbk8hJ]
cshに知恵がついたのがtcsh。

もはや両方とも過去の遺物。ログインシェルとしては現役だが、
スクリプトでcsh使うのはCOBOLerを名乗るような感じで奇異の目で
見られるのは避けられない。

866 名前:login:Penguin mailto:sage [2009/02/23(月) 01:46:15 ID:RMEIkcBQ]
つーかcshはUNIXの話だろ。
linuxはbash

867 名前:login:Penguin mailto:sage [2009/02/23(月) 02:08:49 ID:Pbes3ogj]
>>864
最近はcshは単にtcshへのシンボリックリンクというシステムが
多いんじゃないかな? Solarisは最近はどうなのかな?

868 名前:login:Penguin mailto:sage [2009/02/23(月) 08:25:23 ID:c65f34nn]
>>866
>linuxはbash
なんだよ、それ。

869 名前:login:Penguin mailto:sage [2009/02/23(月) 11:12:11 ID:KfjF9GSX]
bash
OpenSolaris,mac,linux

ksh
Solaris

870 名前:login:Penguin mailto:sage [2009/02/23(月) 11:29:59 ID:KfjF9GSX]
たまに、SolarisとかHP-UX使ってる輩が、linux系のシェルスクリプトの質問で
そのスクリプト動かないんですが、なんて質問してるバカがいる

で、OSきくと、SolarisとかHP-UXだったりする
あなたのはshellはなんですか?なんて逆質問されたりする




871 名前:login:Penguin mailto:sage [2009/02/23(月) 11:42:17 ID:0iVkUMQ3]
sh: HP-UX
csh: IRIX
bash: OpenSolaris, Mac OS X
ksh: AIX, Solaris

872 名前:login:Penguin mailto:sage [2009/02/23(月) 16:32:54 ID:/AxKX1aI]
いやsolarisはcshですよ

873 名前:login:Penguin [2009/02/23(月) 17:41:46 ID:YasG1lnX]
久々のメジャーアップデート、定番シェル「bash」が4.0に
ttp://journal.mycom.co.jp/news/2009/02/23/031/index.html

GNUプロジェクトは20日 (米国時間)、コマンドラインシェル「bash 4.0」を
リリースした。多くのUNIX系OSに対応したソースコードは、ライセンスにGNU
GPLv3を適用、GNUプロジェクトのFTPサイトや各地のミラーサイト経由で配布
される。

2004年7月以来4年7ヶ月ぶりのメジャーアップデートとなる今回のリリースでは、
zshライクな機能を追加。ディレクトリ名を入力するだけでカレントディレクトリ
を変更できる「autocd」、サブディレクトリを再帰的にファイル検索する「globstar」、
入力補完時にディレクトリ名のスペルミスを修正する「dirspell」などのオプションが
新設された。

新しいリダイレクト演算子として「&>>」を追加、標準出力 (>>) と標準エラー出力 (2>&1)
を結合したデータをファイルにアウトプットすることが可能になった。case構文中のコマンド
区切り文字として「;&」および「;;&」を追加、いわゆるフォールスルーが実現されている。

bashのラインエディット機能を担うライブラリ「GNU readline」もアップデート、メジャー
バージョンのv6.0としてリリースされた。変数「history-size」の定義により履歴の最大数が
設定できるようになるなど、いくつかの変更が加えられている。bash 4.0のビルドには、ソース
コードに同梱されるreadline 6.0が必要。

874 名前:login:Penguin mailto:sage [2009/02/23(月) 17:46:37 ID:8fvTtZVR]
>>873
globstarが素敵

875 名前:login:Penguin mailto:sage [2009/02/23(月) 18:19:31 ID:0iVkUMQ3]
ちったあ処理速度は速くなったのかね

876 名前:login:Penguin mailto:sage [2009/02/23(月) 23:46:13 ID:3cx/aS+U]
>>874
find -name のショートカットか。

877 名前:login:Penguin mailto:sage [2009/02/24(火) 00:49:40 ID:A7QF/SS5]
locateでいいんでないの?

878 名前:login:Penguin mailto:sage [2009/02/24(火) 08:32:50 ID:p4EZ+me2]
locateは、必ずその前にupdatedbかけないと、正しい結果は得られない

879 名前:login:Penguin mailto:sage [2009/02/24(火) 10:05:02 ID:o4EbZdLy]
locate使ったこと無いな
/etc/cron.daily/slocate.cron は真っ先に消してしまうし。

880 名前:login:Penguin mailto:sage [2009/02/24(火) 14:05:08 ID:A7QF/SS5]
updatedbのめんどくささがあってもlocateの速さは魅力



881 名前:login:Penguin mailto:sage [2009/02/24(火) 14:44:59 ID:ijmAhEc5]
そんなあなたにinotify対応locate

882 名前:login:Penguin mailto:sage [2009/02/24(火) 18:05:43 ID:mkgOQJW+]
ホームディレクトリ以下にある~/.thumbnails の中身を一括でjpgに変換して
容量を節約したいと思っているのですが、以下のスクリプト(convert-thumbnail2jpgl.sh)で
convert-thumbnail2jpg.sh: 36: declare: not found と出てしまい、
変数width、heightが文字変数として扱われたままになってしまってif分岐ができません。
もしよろしければどなたか、不具合の原因をご指摘していただけると助かりますm(_ _)m

#!/bin/sh
find ./ -name "*.png" -print > /tmp/thumb-file-list #PNG画像ファイルをリストアップ
for file in `cat /tmp/cache-file` #リストアップされたファイルから順に処理
do
res=`expr $file : "\(.*\).png"`
convert -background white -flatten $file $file
imagescale=`identify $file | egrep -o '[[:digit:]]*x[[:digit:]]*\ '| tr -d "\ "`
#ImageMagickを使って"幅x高さ"の書式で画像の大きさを取り出す
declare -i width
width=`echo -n $imagescale |sed 's/x.*//'` #"幅x高さ"から幅の部分のみを取り出す
declare -i height
height=`echo -n $imagescale |sed 's/.*x//'` #"幅x高さ"から高さの部分のみを取り出す
if [ $width -lt 96 -o $height -lt 96];then
#縦横いずれかが96ピクセル以下の画像はnautilus上でそのまま表示される
mogrify -format jpg -quality 80 $file #PNGをJPGに変換
mv $res.jpg $res.png #拡張子をPNGに偽装し、本来あったPNGに上書き保存
else
mogrify -resize 75% -format jpg -quality 80 $file
mv $res.jpg $res.png
fi
done
cat /tmp/thumb-file-list >> thumb-cache-file
#(未着手)次回の変換時に偽装されたJPGを再エンコードしないように変換した分を記録

883 名前:login:Penguin mailto:sage [2009/02/24(火) 18:51:30 ID:0/zaoYuK]
>>882
> find ./ -name "*.png" -print > ***/tmp/thumb-file-list*** #PNG画像ファイルをリストアップ
> for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理
読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。

一行目を #!/bin/sh -x にするか
$ sh -x convert-thumbnail2jpg.sh
とかやって頑張れ。

> if [ $width -lt 96 -o $height -lt 96];then
] の前にスペースを入れないとエラーになるはず。

$ sh -x

$ A=1 ; if [ "$A" = "1"]; then echo OK ; fi
+ A=1
+ '[' 1 = '1]'
sh: [: missing `]'

884 名前:882 mailto:sage [2009/02/24(火) 19:03:27 ID:mkgOQJW+]
>> for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理
>読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。
恥ずかしい間違いをしてしまってすみません…
一時ファイルに自分用に適当なファイル名を付けてしまっていたので、
ここに投稿する際に勝手に変更してました(元スクリプトは両方共/tmp/cache-file)

-xで内容が詳しく見られるようですね。もう少し頑張ってみます…

885 名前:882 mailto:sage [2009/02/24(火) 19:13:26 ID:mkgOQJW+]
1行目を
#!/bin/bash
にして、実行する際も$bash convert-thumbnail2jpg.sh と打つことで解決しました。
shではdeclareが使えず、bashでは使えるようです

お騒がせして申し訳ありませんでしたm(_ _)m

886 名前:883 mailto:sage [2009/02/24(火) 20:34:08 ID:0/zaoYuK]
>>884
> (元スクリプトは両方共/tmp/cache-file)
スクリプトの中で何回か使うものなら
cachefile="/tmp/cache-file"
とかやって定義してしまったほうがいいと思う。

887 名前:882 mailto:sage [2009/02/25(水) 01:46:08 ID:TZfMttNn]
>>886
おかげさまで無事完成しました
ありがとうございましたm(_ _)m

888 名前:login:Penguin [2009/02/26(木) 17:54:06 ID:fuSH76wo]
関連スレ
シェルスクリプトでGUI
pc11.2ch.net/test/read.cgi/tech/1235483221/

889 名前:login:Penguin mailto:sage [2009/02/27(金) 02:01:52 ID:+MZ66A9I]
bash4.0 導入した人誰かいまつか ?
RHEL5.3 make で error orz...


890 名前:login:Penguin mailto:sage [2009/02/28(土) 00:15:37 ID:2KTcWABE]
とりあえず使えてるぞ
ubuntu8.10

GNU bash, version 4.0.0(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <gnu.org/licenses/gpl.html>



891 名前:login:Penguin mailto:sage [2009/02/28(土) 00:25:54 ID:i9TaSY11]
>>890
/bin/bash を置き換えたんですか?

892 名前:login:Penguin mailto:sage [2009/02/28(土) 00:31:49 ID:2KTcWABE]
/usr/local/に置いただけ

俺には3.2と4.0の違いはあまり関係ないということがわかった

893 名前:login:Penguin mailto:sage [2009/02/28(土) 07:37:33 ID:zB5vZ6QQ]
bashのバージョンに依存したスクリプトは趣味でやる以外はあんまり書かないと思うけど

894 名前:login:Penguin mailto:sage [2009/02/28(土) 11:00:16 ID:Tf6NC8nk]
bashのバージョンに依存しないスクリプトって、ほぼ/bin/shか。

895 名前:login:Penguin [2009/03/01(日) 14:21:53 ID:b0tpnlkt]
"A B C D E F"を
"B A D C F E"にしたり、

A
B
C
D
E
F



B
A
D
C
F
E

にしたりできますか?

つまり、AとBを入れ替え、CとDを入れ替え・・・ってな具合です。

896 名前:login:Penguin mailto:sage [2009/03/01(日) 14:54:34 ID:yaPGqr8Y]
>>895
宿題乙。

一行タイプのやつ
sed -e 's/ /\
/g' | sed -e '1~2{h;d};1~2!G' | xargs

複数行タイプのやつ
sed -e '1~2{h;d};1~2!G'

897 名前:login:Penguin mailto:sage [2009/03/01(日) 15:06:32 ID:ClVN3cK/]
>>895

echo 'A B C D E F' | tr 'ABCDEF' 'BADCFE'

898 名前:login:Penguin mailto:sage [2009/03/01(日) 16:12:08 ID:jusYIGdM]
bash3 とbash4 って互換性大丈夫でしょ。

899 名前:login:Penguin mailto:sage [2009/03/01(日) 16:45:01 ID:b0tpnlkt]
>>896>>897
素晴らしい!!
吹雪の最中に神が現れて、いきなり春になったような心境です。
ありがとうございました。

900 名前:login:Penguin [2009/03/05(木) 13:25:03 ID:k1KCKSK5]
原子番号を元素記号に変換してください。
例)
8  → O
26 → Fe
92 → U







901 名前:login:Penguin mailto:sage [2009/03/05(木) 15:44:08 ID:7EIm6RPk]
>>900
宿題は自分でやれ。

902 名前:login:Penguin [2009/03/05(木) 15:55:50 ID:3/9eCgJO]
まず原子番号とそれに対応する元素記号の
テーブルを作成するところからはじめよう。

903 名前:login:Penguin [2009/03/05(木) 23:21:24 ID:BnKU6WpI]
水素なら
w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | awk '$1 ~ /^1$/{print $3}

ヘリウムなら/^1$/を/^2$/に変える。

904 名前:login:Penguin mailto:sage [2009/03/05(木) 23:24:25 ID:feEdgCm8]
echo O > 8
echo Fe > 26
echo U > 92

cat %1




俺天才かもしれん。

905 名前:login:Penguin mailto:sage [2009/03/05(木) 23:25:16 ID:feEdgCm8]
間違えた。。。


cat $1だ。

906 名前:login:Penguin mailto:sage [2009/03/05(木) 23:35:39 ID:BnKU6WpI]
#!/bin/bash
#grepバージョン
w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | grep "^"$1"[[:space:]]"



907 名前:login:Penguin mailto:sage [2009/03/06(金) 00:15:22 ID:4E0LodKQ]
>>903
つ awk -v x=番号 '$1 ~ "^" x "$" { print $3 }'

908 名前:login:Penguin mailto:sage [2009/03/06(金) 02:41:09 ID:0+Otyqrv]
全部if文でやれ。

909 名前:login:Penguin mailto:sage [2009/03/06(金) 11:10:42 ID:Es9Fr0vK]
w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | perl -ane 'for (1..118) { print "$_: $F[2]\n" if $F[0]=~/^$_$/;}'

910 名前:login:Penguin mailto:sage [2009/03/06(金) 19:13:45 ID:m/0+PDHQ]
一覧表示でいいなら、これが楽だろ
w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | awk '/^[0-9]/{print $1,$3}'




911 名前:login:Penguin [2009/03/06(金) 20:23:52 ID:+R69oXB9]
こんなの波動だ

#!/bin/bash
echo 原子番号は
syuuki=~/syuuki
w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 |awk '/^[0-9]/{print $1,$3}' - >$syuuki
read genso
echo 原子番号$gensoの元素記号は`grep $genso ~/syuuki`です。


grepが未完成 記号だけにしたい。

912 名前:login:Penguin mailto:sage [2009/03/06(金) 22:47:09 ID:tq3ZQvrP]
echo 原子番号$gensoの元素記号は`ruby -ane 'BEGIN{genso = ARGV[1]}; if $F[0] == genso; p $F[1]; break; end' ~/syuuki $genso`です。


913 名前:login:Penguin mailto:sage [2009/03/07(土) 09:01:58 ID:Qelg+V+C]
「原子番号」「の元素記号は」などと書かんでいいから、
改行を入れて見やすくしろ、カス。

914 名前:login:Penguin mailto:sage [2009/03/07(土) 20:47:19 ID:zmyZifQf]
というかレポートに出すんだからさ
もっと初心者っぽく書いてください
期限は明日までです



915 名前:login:Penguin mailto:sage [2009/03/07(土) 21:07:11 ID:cObxxbWz]
よし!
やっぱり自分でやろう!

みなさんすいませんでした。忘れてください

916 名前:login:Penguin mailto:sage [2009/03/07(土) 21:41:55 ID:pgHRyspE]
>>914>>915
w3m -dump d.hatena.ne.jp/keyword/%BB%E0%A4%CD%A4%D0%A4%A4%A4%A4%A4%CE%A4%CB | grep "^.ね.*に$"


917 名前:login:Penguin [2009/03/08(日) 16:51:10 ID:xQcHQnf7]
Perlがあればシェルスクリプトなんて要らない
Perlのほうが高機能だから

918 名前:login:Penguin mailto:sage [2009/03/08(日) 17:20:38 ID:J6Fw6OuS]
Perl は外部コマンド一つ呼ぶのにいちいち system() とか書かなきゃいけない時点で問題外でしょ。
シェルスクリプトは外部コマンドの呼び出しがとても多いんだから、文法レベルでサポートされてないとやってられない。

919 名前:login:Penguin mailto:sage [2009/03/08(日) 18:43:54 ID:4ovvgVHR]
$date = `date`;

920 名前:login:Penguin mailto:sage [2009/03/08(日) 19:34:58 ID:J6Fw6OuS]
ごめん、見直した。



921 名前:login:Penguin [2009/03/10(火) 18:06:25 ID:IwU0KhJ5]
シェルスクリプトってOOじゃないんでしょ?
ダサっ

Perl使えない落ちこぼれが使う言語、それがシェルスクリプト

922 名前:login:Penguin mailto:sage [2009/03/10(火) 19:16:49 ID:ZRv0wOpe]
xargsとsedで文字列加工をしようとしたがうまくいきません
コマンド|xargs -n 1 sed 〜 だとコマンドの出力内容がファイル名として解釈されるし
コマンド|xargs -n 1 echo|sed 〜 だとxargsがない場合と同じ動作になります
別にシェルスクリプトを
echo ${1}|sed 〜 と作って
コマンド|xargs -n 1 スクリプト とすると sed -e "s/〜 の s が未定義と怒られる
他に方法はありますか?

923 名前:login:Penguin mailto:sage [2009/03/10(火) 21:34:04 ID:t8WYWXe4]
>>921
OO という観点で議論するなら perl じゃなくて
もっとまともな言語と比較しろよ。

924 名前:login:Penguin mailto:sage [2009/03/10(火) 21:51:10 ID:hrcV3cEG]
>>922
sed 〜 `コマンド`

とか?

925 名前:login:Penguin mailto:sage [2009/03/10(火) 22:33:24 ID:HaCEu7vE]
>>921
よりによって最も汚いOOを持つ言語を引っ張り出してきたな。。。

926 名前:login:Penguin mailto:sage [2009/03/10(火) 23:10:33 ID:XmHUdl+t]
317 名前:名無しさん@お腹いっぱい。 []: 2009/03/10(火) 18:05:12
シェルスクリプトってOOじゃないんでしょ?
ダサっ

927 名前:login:Penguin [2009/03/10(火) 23:13:24 ID:21j8Lv5u]
そもそも、ほとんどの処理を外部のコマンドに投げているのに
OOはどういうことなのだろうか?

928 名前:login:Penguin mailto:sage [2009/03/10(火) 23:17:44 ID:wgUyESoz]
>>922
同僚に聞いてみたんだが、xargs なしだとだめなの?
たとえば、ファイル名の置換なら
 $ find . -print|sed -e "s/〜
になると思うんだけど。
(for i in `find .`〜 のほうが使いやすいと思うが)

それか
 $ コマンド|xargs -i echo {}|sed -e "s/〜
とか?
コマンドのところとか、sed で何をしたいのかを明確に
してもらえればもうちょっと回答のしようがあると思う。

929 名前:922 mailto:sage [2009/03/10(火) 23:39:56 ID:ZRv0wOpe]
>>924
コマンドの結果がファイル名として認識されました。

>>928
xargsなしで今はやっています。
メイク時の出力内容をVC方式に変換するために文字列を以下のように変換しています。
make debug 2>&1 | sed -e "s/:\([0-9][0-9]*\):/(\1):/g" | sed "s/[/]/\\\/g" | sed "s/^/c:\\\cygwin\\\home\\\\${USER}\\\\${PROJNAME}\\\source\\\/g"
ただし、今の状態だとメイクが完了するまで出力がされないため、
メイクがどの程度進んでいるかの確認や、エラー/ワーニングにすぐ対応できないのです。

また、できれば2の出力だけをパイプに流したいのですが、方法はありますか?
(1は普通に画面表示)
イメージは make debug 2>( xargs -n 1 echo|sed 〜) です。

ちなみに コマンド|xargs -i echo {}|sed -e "s/〜 は
c:\cygwin\home\ユーザ名\プロジェクト名\source\{} 出力された文字列
となり、うまくいきませんでした。
# echo "{} 文字列" と認識された?

930 名前:login:Penguin mailto:sage [2009/03/11(水) 02:34:25 ID:LOMFWb0Z]
>>929
xargs -iの後の{}は'{}'みたくエスケープしないとダメなんじゃないの?



931 名前:login:Penguin [2009/03/11(水) 08:59:36 ID:DFgGOxJ9]
Windows PowerShellはOOなのに
シェルスクリプトはOOじゃないんだよね

時代遅れだね

932 名前:login:Penguin mailto:sage [2009/03/11(水) 14:33:02 ID:Z5TO7Bpy]
>>929
>211
sed -u 〜

933 名前:login:Penguin mailto:sage [2009/03/11(水) 21:43:30 ID:bm/c4JTk]
>>931
死ぬほど使いにくいけどな。WindowsPowerShell。


934 名前:login:Penguin mailto:sage [2009/03/11(水) 22:32:39 ID:q2e6tqEw]
つか、オブジェクト指向が反省されている今になって、何を時代錯誤な事を言ってる人なんだ。

935 名前:login:Penguin mailto:sage [2009/03/13(金) 11:15:15 ID:6BZk1deA]
c++やjavaのoopはあまり良いものではないからね。
特にjavaでしかoopを知らない人って、なんでもかんでもオブジェクト
にしてしまうだろうし、あれは非効率的なんだよね。
oopも使えるというならそれはそれでいいけどシェルスクリプトの延長線上
にrubyやperlがあるから、oopに拘るならばそっちを使えばいいだけのはなしだよね。

936 名前:login:Penguin mailto:sage [2009/03/18(水) 18:33:49 ID:RWYXndAF]
くだ質の763に、du -hの結果をサイズ順にソートしたいってのがあった。
 $ df -h
 20K ./foo
 8.0K ./bar
 5.1M ./hoge
元質問者は勘違いってことで解決してるんだけど、これをカッコよく1 linerで実現する方法はあるんだろうか?
置換して〜ソートして〜とか、泥臭い方法しか思いつかない...

937 名前:login:Penguin mailto:sage [2009/03/19(木) 00:49:00 ID:Ex8kaKKQ]
>>936
-h外して後で1024の倍数掛ければいい

938 名前:login:Penguin mailto:sage [2009/03/19(木) 01:30:46 ID:1vjKEAU9]
俺もそう思うけど、
>>936が話題にしているのは、たぶんdfに限らず、単位を接尾辞とした小数数字を如何にsortするかじゃないかな。

939 名前:login:Penguin mailto:sage [2009/03/19(木) 01:33:02 ID:VEb9NHr7]
そーじゃなくて>>936の出力をソートするスクリプトがあるか、だろう
おれも置換したりしないと出来値

940 名前:login:Penguin mailto:sage [2009/03/19(木) 01:34:48 ID:gobNSPAB]
>>937
-hは前提条件でお願い。します。



941 名前:login:Penguin mailto:sage [2009/03/19(木) 01:36:54 ID:dcED7bZL]
しかしdu -h も微妙なコマンドだな
KつきMつきで見たいやつが大半だろうにソートもできるようにしてくれよって気が

942 名前:login:Penguin mailto:sage [2009/03/19(木) 03:20:47 ID:yCb470li]
bashで引数が0-9の間ならダンプレベルに設定しようとしています

if [ -n $1 ]; then
if [ $1 -ge 0 -a $1 -le 9 ]; then
dlevel=$1
fi
fi

これを実行すると引数が無いときと
引数が数字以外のときにエラーメッセージが出てしまいます
引数が数値かどうかチェックする方法がないでしょうか?
よろしくおねがいします

$ ./dump.sh
./dump.sh: line 22: [: too many arguments

$ ./dump.sh 3
dlevel=3 期待通りの動き

$ ./dump.sh fufufu
./dump.sh: line 22: [: fufufu: integer expression expected

943 名前:login:Penguin mailto:sage [2009/03/19(木) 04:02:43 ID:3RRVnfG+]
if [ -n "$1" ]; then
if expr "$1" : '[0-9][0-9]*$'; then

944 名前:login:Penguin mailto:sage [2009/03/19(木) 04:04:43 ID:M6oJqh1N]
case "$1" in
[0-9])
dlevel="$1"
;;
esac

945 名前:login:Penguin mailto:sage [2009/03/19(木) 04:57:28 ID:yCb470li]
>>943, 944
どうもありがとうございます
caseの方を採用させていただきました

946 名前:login:Penguin mailto:sage [2009/03/19(木) 13:59:30 ID:KDP/tv8i]
>>937-941
やぱしそれなりに泥臭いやり方しかないですかね? 最初、sortはバッファサイズ変更時に
GBとかMBとか見てくれるんだからきっと、とか思ったのに。

947 名前:login:Penguin mailto:sage [2009/03/19(木) 14:48:56 ID:+WS3QA7Q]
-h 外せば済む話なのに
苦労してスクリプト書く意味がわからん。

948 名前:login:Penguin mailto:sage [2009/03/19(木) 15:44:21 ID:VEb9NHr7]
目的が「duの結果をソートしたい」じゃなくて「このテキストを(意味を考えて)ソートしたい」だと何度(ry

949 名前:login:Penguin mailto:sage [2009/03/19(木) 15:54:38 ID:QnAt/IUj]
>>948
dfかduかはっきりしてくれ。duならxduをつかっとけ。MやGよりも視覚的にサイズを
表現してくれた方が分かりやすい。もちろんソートできる。

950 名前:login:Penguin mailto:sage [2009/03/19(木) 19:05:34 ID:KDP/tv8i]
>>949
元質問はオレなんだが、>>948のとおり、別にduでもdfでもなく、GとかMとかのサイズ指定で
かつ小数点付きのを、どうソートするか、というのが意図だったわけで。

質問の仕方がまずいのは認める。すまん。



951 名前:login:Penguin [2009/03/20(金) 10:34:47 ID:OD1Bm4W7]
シェルスクリプトで開発したツールをshcでコンパイルしたとして、
それがシェルスクリプトだとバレることってありますか?
もちろん調べればわかるでしょうけど
一般的なエンドユーザの能力ではどうでしょうか?

952 名前:login:Penguin mailto:sage [2009/03/20(金) 11:49:16 ID:vtofDqpI]
>>951
つ chmod 311 a.out

953 名前:login:Penguin mailto:sage [2009/03/20(金) 21:45:28 ID:Pky/qqR2]
tar

954 名前:login:Penguin mailto:sage [2009/03/20(金) 21:46:03 ID:Pky/qqR2]
tar tvf filename.tar
の結果をファイル名順にソートするにはどうすればいいでしょうか?

955 名前:login:Penguin mailto:sage [2009/03/20(金) 21:54:15 ID:vtofDqpI]
sort -k 6

956 名前:login:Penguin mailto:sage [2009/03/20(金) 22:29:18 ID:Pky/qqR2]
>>955
ありがとうございます。以下で出来たと思います。
tar tvf filename.tar | sort -k 6
ファイル名が9番目に来ることがあるのは、OSによるものでしょうか?

957 名前:login:Penguin mailto:sage [2009/03/20(金) 22:30:46 ID:vtofDqpI]
ロケール依存じゃね?
日付の表示

958 名前:login:Penguin mailto:sage [2009/03/20(金) 22:45:25 ID:Pky/qqR2]
>>957
なるほど、ありがとうございます。

当初の質問とズレますが

ls -lRのディレクトリ名が
職場の環境では
temp:
となり

自宅では
./temp:
となるのもロケール依存の問題でしょうか?

959 名前:login:Penguin mailto:sage [2009/03/20(金) 23:54:41 ID:vtofDqpI]
ls -lR temp
ls -lR
の違いって事はない?

960 名前:login:Penguin mailto:sage [2009/03/21(土) 10:08:06 ID:/JVnxKfV]
>>959
引数にディレクトリを指定せずに>>958の違いがでます。
OSは職場がAIXで、自宅がCentOSです。

結果のリストをテキストファイルに出力してプログラムで利用しているので、
フォーマットが違うと問題があるのですが、
行末に「:」があればディレクトリと認識したり、リストのフォーマットに応じたプログラムを
書けばいいのかなと思います。

親切にありがとうございました。



961 名前:login:Penguin mailto:sage [2009/03/21(土) 13:39:10 ID:ZdP11rWE]
AIXならコードベースが違うから、細かい書式も違うだろうね。

find . -printあるいはfind . -lsの結果を利用した方がいいかもね。
こっちは加工されることを前提とした出力だから。
ls -lRはそうじゃない。


962 名前:login:Penguin [2009/03/24(火) 21:43:58 ID:vhkRQKv/]

bash で、複数の戻り値を返すにはどうやる?

func foo()
{
return VAL1 VAL2
}

(VAL1, VAL2)=$(foo)

こんなのがやりたいんだけど。

今まで思いついた例では、
1、ファイル経由で帰す。
echo $VAL1 >/tmp/$PID.val1
echo $VAL2 >/tmp/$PID.val2
可能だけどちょっと無駄。

2、readをつかう。
#!/bin/bash
$(foo) | read VAL1 VAL2
やってみたけど、動かない。なんとかしてくれ!。



963 名前:login:Penguin mailto:sage [2009/03/24(火) 22:07:39 ID:fdZEc0lM]
returnで返すことにこだわる意味があるん?
VAL1 VAL2 に関数内で値つっこめばいいだけじゃないの?
グローバル変数がどうのとか、シェルで気にする必要ないだろと個人的に思うし。

964 名前:login:Penguin mailto:sage [2009/03/24(火) 22:13:47 ID:JcSO3hFa]
>>962
ttp://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html
>関数ローカルの変数は、組み込みコマンド local で宣言できます。
>普通は、変数とその値は関数とその呼び出し側で共有されます。

965 名前:962 [2009/03/24(火) 23:09:01 ID:vhkRQKv/]

グローバル変数で受け渡し?

んまあそうなんですけど、
なんでもグローバルという、BASIC言語みたいなのは生理的にイヤ。
可能な限り普段から全部 local 宣言つけてますので。

なんとか、return VAL_A VAL_B
とかムリっすか?



966 名前:login:Penguin [2009/03/24(火) 23:27:22 ID:JcSO3hFa]
>>965
無理
> return [n]
> 指定した返り値 n で関数を終了させます。
> n を省略すると、返却ステータスは関数内で最後に実行したコマンドの返却ステータスになります。

スクリプトを分けて標準入出力で受け渡すくらいしか思いつかん

967 名前:login:Penguin mailto:sage [2009/03/24(火) 23:31:50 ID:elKnmt6d]
俺も昔戻り値二つ返したかったが諦めたことがある。
泣く泣くグローバルにした。

968 名前:login:Penguin mailto:sage [2009/03/24(火) 23:32:20 ID:LPmFGK87]
>>965
無理矢理だけどこんなことは出来る。

foo ()
{
echo "$VAL1 $VAL2"
}

VALS=(`foo`)

VAL1=${VALS[0]}
VAL2=${VALS[1]}



969 名前:login:Penguin mailto:sage [2009/03/25(水) 12:00:35 ID:ZZ2mmRGj]
グローバル変数がイヤならばそもそも sh じゃなくて別のスクリプト言語で書け。
そういう言語なんだからあきらめて受け入れろ。
無理に技巧をこらしたところで逆に可読性を落とすだけ。

970 名前:login:Penguin mailto:sage [2009/03/25(水) 12:15:44 ID:NaCjRRoe]
>>969
そうおもう。perlでもrubyでもgaucheでもいいから。
でも、延長線上で使えるrubyのほうが馴染みやすいかも



971 名前:login:Penguin mailto:sage [2009/03/25(水) 12:23:07 ID:uD+uLQB8]
>>962
> return VAL1 VAL2
< echo VAL1 VAL2
してreadしる


972 名前:login:Penguin mailto:sage [2009/03/25(水) 17:28:54 ID:GtIifwrA]
/tmpに書け

973 名前:login:Penguin mailto:sage [2009/03/26(木) 15:32:50 ID:3e22XvSN]
シェルスクリプトを始めて勉強するのですが、

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界(www.amazon.co.jp/dp/4797321946)



UNIXシェルスクリプトコマンドブック(www.amazon.co.jp/dp/4797330635)

どちらで勉強するのが良いでしょうか?

974 名前:973 mailto:sage [2009/03/26(木) 15:33:45 ID:3e22XvSN]
×始めて 
○初めて

orz

975 名前:login:Penguin mailto:sage [2009/03/26(木) 16:30:55 ID:5RpvIQgk]
入門bashがオヌヌメ

976 名前:login:Penguin mailto:sage [2009/03/27(金) 00:19:45 ID:hx4pY+SP]
どれでもいっしょでヌメヌメ

977 名前:login:Penguin mailto:sage [2009/03/27(金) 01:38:27 ID:SSuQKmC1]
>>976
>>975

ありがとうございます。
まずは>>975さんにヌメヌメして頂いた入門Bashから勉強していきたいと思います。

978 名前:login:Penguin mailto:sage [2009/03/27(金) 02:32:52 ID:3RSixa0K]
つ「全部」

979 名前:login:Penguin mailto:sage [2009/03/29(日) 04:23:46 ID:k6vYgSJE]
とあるディレクトリ以下に存在する
特定の拡張子のファイルのみについてファイルサイズの合計を知りたい場合、
最もマシンに負荷を与えずに結果を出すにはどの方法が適しているでしょうか?

・ duコマンドだと除外パターンのパラメータしかない
・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる

という感じで、もっとサクっと結果を軽い処理で出せるような気がするんですが・・・。

980 名前:login:Penguin mailto:sage [2009/03/29(日) 05:38:56 ID:RIZc4nP9]
findとawkで



981 名前:login:Penguin mailto:sage [2009/03/29(日) 07:07:03 ID:HsEQt0tU]
>・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる

expr要るのか?
ls -Rl | grep "\.suffix" | awk '{size += $5} END {print "total " size}'
find -name \.suffix -printf "%s\n" | awk '{size += $1} END {print "total " size}'

982 名前:login:Penguin mailto:sage [2009/03/29(日) 15:49:16 ID:HhnBqalt]
>-name \.suffix
o... rz

983 名前:login:Penguin mailto:sage [2009/03/30(月) 08:01:30 ID:4/oTu4d/]
10台くらいサーバセットアップする必要があり、
それぞれのapacheの設定ファイルのIP部分だけ変えたいのですが、
何かシンプルで良い方法ってあるでしょうか?

環境変数設定kono_server_no_ipを設定して、
sedあたりで設定ファイルのIP部分をkono_server_no_ipに置換処理、
みたいな感じをぱっと思いついたのですが、
もっとベターな方法ってあるでしょうか?

984 名前:login:Penguin mailto:sage [2009/03/30(月) 10:33:16 ID:rBZKWvDE]
>>983
まずサーバ毎の環境変数(kono_server_no_ip)の設定はどうやるの?
環境変数の設定をエディタでやったら本末転倒だよね?

「このIP」が自分自身のipアドレスでいいなら、ifconfigで取得してsedで置換。

あと、シンプルじゃなくていいならPuppetとか。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef