シェルスクリプト総合 ..
809:login:Penguin
09/02/03 23:35:56 dPYgINgS
>>807
grep KEY
を、
perl -e '$|=1;while(<>){/KEY/&&print}'
あたりに置き換えてみるとか。いや、もういっそ全部perlで(ぉ
810:login:Penguin
09/02/04 00:20:18 b8YOwJQ5
>>808
grepの方のpidが入ってしまうのです、他のUnixでもそんなもんだったかと…
>>809
確実にlogに吐いてくれる様になったのですが、killしても親のbashだけしか死なない
現象は… スクリプトの外からkillすれば大丈夫なのですが(スクリプトの中でも条件を
変えれば死ぬ事もあるみたいなのですが)
SessionID, GroupIDはきちんとsetsidのbashのものになっている様なのですが何でなんだろう・・・
>いや、もういっそ全部perlで(ぉ
Perlでtail -fのエミュレートは出来るのでしょうか?(Perl知らないので)
811:login:Penguin
09/02/04 13:24:46 kpOfhCqC
>>807
> (tailかgrepがバッファリングされてる様)
tail -fはline bufferd、
gnu grepには--line-bufferedってオプションがある。
>>810
tailだけsetsidするんじゃ駄目なの?
> grepの方のpidが入ってしまうのです
SIGPIPEでtailは終了するから、grepだけ終了すればいいんじゃないの?
812:login:Penguin
09/02/05 02:19:11 zg2ckZs5
>>811
>gnu grepには--line-bufferedってオプションがある
古い所為か(2001年のタイムスタンプ)line-bufferedのオプション使いたいのですが残念ながら
無いみたいです。上で教えて頂いたperlの文でも入力バッファの問題は回避できる様です
>tailだけsetsidするんじゃ駄目なの?
grepの方も同じsid, gidにしたいので…
>SIGPIPEでtailは終了するから、grepだけ終了すればいいんじゃないの?
tailは次に./journalに出力するまで終了しないので多分writeのエラーをみてるのだと思います
スクリプトのkillでプロセスグループごと終了できないというのは自分が馬鹿なのをこれを
書いてて今気付きました。
(bashの内部コマンドのkillと外部コマンドでは動作が違うのを忘れてフルパスでkillコマンドを
書いたり書かなかったりしてました)
結局 grepの入力バッファの問題だけみたいでした(だからプロセスグループごとのkillに失敗した
時tailだけ手で終了させればlogに出力はした)
813:login:Penguin
09/02/07 23:40:20 /JuKteVM
神様コマンドで
デスクトップ画像変える方法教えてくれ
by ubuntu
814:login:Penguin
09/02/08 00:52:19 cCyeuq1v
>>813
gnome使ってるのなら
URLリンク(smdn.invisiblefulmoon.net)
でどうだろうか?
815:login:Penguin
09/02/08 06:42:05 u4QFXfom
>>814
ないすでーす
816:login:Penguin
09/02/11 13:22:04 IEgUtHHw
cshの勉強をするのにお勧めの書籍ってある?
817:login:Penguin
09/02/11 19:59:15 0CkacZ7G
Csh Programming Considered Harmful
URLリンク(www.faqs.org)
818:login:Penguin
09/02/12 00:03:13 Bwsj0K7C
>URLリンク(www.faqs.org)
セキュリティの問題でもあるのかと思ったら単に好みの程度の問題みたいね
いいじゃないインタプレタのシェルなんだから、本格的にプログラムが組みたければ
Cとか使えばいいんだし
自分はむしろsh系はインタプレタ言語のくせに未だに [ $a -lt $b ]; みたいな直感的に
分かりにくいし書式に癖があるとこが苦手だな
819:login:Penguin
09/02/12 00:17:02 OQTuzP5E
GNUの政治的な言いがかりだよ。Tcl 叩きなんか酷いもん
820:login:Penguin
09/02/12 09:49:04 ke7Lxuau
「インタプレタ」って表記ははじめて見た。
821:login:Penguin
09/02/12 10:16:18 9EZI+YqX
>>819
GNUは全く関係ない。
GNU出来る前から、cshはプログラム書くもんじゃないという話は定番。
822:login:Penguin
09/02/12 10:57:48 tCfZqJn3
bashで十分。
他にもあるかもしれないが、bashを極めた方が
得るものは多いのでわと。
if [ cond ];then
hoge1
else
hoge2
fi
って 見て fi のセンスに脱帽の俺(意味不明)
823:login:Penguin
09/02/12 11:23:19 9EZI+YqX
そのfiはAlgol由来
>>818
> [ $a -lt $b ];
はカッコも左右で閉じているし、中間記法で十分「直感的」だと思うが?
もしかしたら、() や < を使わないのは、「習慣的」でないと言いたいのかな?
[ より ( なんてのは「直感」とはまるで関係がない。
824:login:Penguin
09/02/12 11:33:51 oRvS6Hfm
>>823
>そのfiはAlgol由来
自分もそう覚えてたんだけど、改めて調べてみたら自信が無くなった。 この
コードサンプルによると構文は if then begin end なんだけどね。
URLリンク(en.wikipedia.org)
まあ、Algolって方言多いからどこかであったのかも。
825:login:Penguin
09/02/12 11:38:51 oRvS6Hfm
自己解決。 Algol 68の構文か。 60と68でこんなに劇的に構文が違うなんてびっくり。
URLリンク(en.wikipedia.org)
826:login:Penguin
09/02/12 11:45:02 9EZI+YqX
Algol68って書こうとしたけど、
ちょっと自信がなくなって68抜いたら余計まずかったか orz
827:login:Penguin
09/02/12 12:48:52 LH9kJjZb
>>817 の日本語訳も貼っておく。
これってかなり有名だと思うんだけど、最近の人は知らないのかな?
URLリンク(www.kiso.tsukuba.ac.jp)
828:login:Penguin
09/02/12 13:53:40 1plRLkzR
某銀行、バリバリcsh使ってバッチ処理しているぜ
「foo.cshを流します」ってメールがしょっちゅう飛んでくる
(bar.shの場合もあり)
俺は無関係なので何しているのかは知らない
829:login:Penguin
09/02/12 17:41:38 MQL/I4RH
ふぃ〜
830:login:Penguin
09/02/12 17:47:45 sR2aoOwZ
今どきcsh強制はかんべんしてくださいませんか
そろそろ移行しましょうよ
831:login:Penguin
09/02/12 21:02:17 FSng8IrW
POS業界だけどメインのスクリプトは/bin/cshだよ
832:login:Penguin
09/02/12 21:53:51 LH9kJjZb
POSってNTじゃなかったっけ?
833:login:Penguin
09/02/12 22:20:06 FSng8IrW
POSといってもwindows・solaris・Linuxと色々あるよ
834:login:Penguin
09/02/12 22:37:30 9EZI+YqX
TRONのことも忘れないで上げてください。
昔はConcurrent CP/Mのやつも…
835:login:Penguin
09/02/12 23:23:22 czJX5aHE
SunOSで育った自分は随分長くcsh/tcshに固執してたが、bashが主体のLinuxでそれを続けるのは
しんどくなってshに転向した。 慣れるとやっぱりshスクリプトの方が可搬性が高くて便利ではあるね。
836:login:Penguin
09/02/12 23:47:12 VuxIBsDt
>>820
どんな日本語発音化が一般的なのかな、インタープリターは嫌だな
>>821
重い、遅い、互換性、個人的に関数が書けないってのはあるけど、リンク先のは
sh使いのがcsh使った時の愚痴を態々レポート形式で書き連ねたみたいでなんかね
大量にコード書かなきゃいけないのならkshを推奨なんだろうけどね
>>822
' 'や';'が必要だったり必要じゃなかったり"[ $argc -lt 2 ] && exit"
で何で括弧が必要なのかとかね
括弧がコマンドのエイリアスだと知らないと直感的どころじゃないと思うけど
後、数学記号じゃなくて"-lt"とかいきなり大括弧を使うのも憶え難いな
837:login:Penguin
09/02/13 00:00:32 TCRLlSaH
>>835
自分もSunの影響はありましたね、ほかのUnixは(シェル環境が)使い辛いんだか
なんだかだったんでね
838:login:Penguin
09/02/13 00:20:30 rRTiQTAd
>>836
とりあえず、直感で文法を理解するのは止めろ。獣じゃないんだから。
839:login:Penguin
09/02/13 01:29:06 1sdCSbB5
いや、shのメタキャラの扱いは頭が痛い。ゆえにPerlに流れた人も多数と思われ
840:login:Penguin
09/02/13 04:18:13 ce9+GZrq
すべてPerlの枠内でやるぜぇ!フゥハハハー
841:login:Penguin
09/02/13 12:44:48 V9eIe9Hv
Perlをやると頭がウニるのでrubyでさらっとやりましょう。
842:login:Penguin
09/02/13 12:47:00 Gq3GLgyz
シェルスクリプトスレだから。
843:login:Penguin
09/02/13 13:54:32 yjmdVJca
了解
844:login:Penguin
09/02/13 14:02:04 rRTiQTAd
perl, python, ruby(アルファベット順)は、
コマンドラインの文字エスケープが面倒くさいぞ。
コマンドラインを直接扱えるshは、shならではの便利さがある。
845:login:Penguin
09/02/13 22:19:51 0L0k1V8C
bashと言おう!
846:login:Penguin
09/02/13 22:29:03 Gq3GLgyz
バッシュ・ザ・スタンピード
847:login:Penguin
09/02/14 01:27:18 4XWVPvB1
おくらほますたんぴーと
848:login:Penguin
09/02/19 00:43:45 E2B6YhV6
Command-line Fu
URLリンク(www.commandlinefu.com)
こことても良いサイトね
便利よ
849:login:Penguin
09/02/19 10:01:05 I3ZMt/XU
前見たときには微妙なのばっかだったが・・・
850:login:Penguin
09/02/19 23:07:11 QHZryBLH
>>848
なんだこれは
851:login:Penguin
09/02/19 23:34:35 emv2wr4j
日記を書いてるテキストファイルがあるんだけど
コマンドで
その日記の日付を置換したい場合どうすればいいか教えてください
geditでは日付それぞれ違うので一括して変更できなかったので
**/**/**
を・・・・・・・に変換したいです
よろしく男根GAYします
852:login:Penguin
09/02/19 23:37:20 cCKDE498
>>851
sed使え。
853:login:Penguin
09/02/19 23:49:02 emv2wr4j
>>852
ありがトン
854:login:Penguin
09/02/20 00:42:21 myUOwbMU
bashとshでどう違います?
shだと
export hoge=FUgfdsa とかできない
配列が使えない
くらいは知ってるんですが
855:login:Penguin
09/02/20 00:49:54 XTIEtF8Q
古いシェルのことを考えたら切りがないよ
URLリンク(www.bookshelf.jp)
/bin/shを名乗るならPOSIX sh準拠でいてほしいね
856:login:Penguin
09/02/20 00:56:59 +4QiWBsa
>>854
いろいろ違うがshの種類によってもさらに違うので一概には言えない。
おかげで、GNU autotools は恐しく涙ぐましい努力をしている。
詳しくは「移植性 シェルスクリプト」あたりでぐぐれ。
857:login:Penguin
09/02/20 01:42:32 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
09/02/20 11:19:48 UmU5RxVP
>>854
自分で比較してみれば
URLリンク(heirloom.sourceforge.net)
859:login:Penguin
09/02/22 23:16:28 +4BXOJtP
自分は普段kshを使ってプログラムを作っています。
ただ自己学習の一環として他のshもやってみようと思い、
cshの本をとりあえず買ってきました。
内容はアルゴリズム特集のようなもので入門書ではないです。そこそこむずかしめ。
ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。
本当でしょうか?無駄金使ってしまいましたかね?
幸い業務で使うわけではないので勉強すれば役に少しは立ちそうですが・・。
860:login:Penguin
09/02/22 23:23:52 yH/Zc28c
>>859
うちの会社はcshのが多いわけだが。hp-uxとかsolarisとか。aixはどうだっけ?
861:login:Penguin
09/02/22 23:27:29 i9kTRR2X
>>859
> ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。
> 本当でしょうか?無駄金使ってしまいましたかね?
本当です!(><)
「cshスクリプト使うのはよくないよ〜(considered harmful)」って文書があるくらい。
862:login:Penguin
09/02/22 23:30:07 +4BXOJtP
>>860>>861
ありがとうございます。
使ってるところもあるけどあまり推奨されては居ないみたいなんですね。
とりあえずアルゴリズム集っぽい本なので表面的に理解して
ざっと勉強してみるくらいはしてみようかと思います。
863:login:Penguin
09/02/23 00:01:25 02TkTA5B
cshとbashの違いってちょっと方言が違う〜くらいでないの?
forがforeachとか
あんまりしらないけど
864:login:Penguin
09/02/23 00:42:30 /AxKX1aI
cshとtcshはどう地がうんすか?
865:login:Penguin
09/02/23 01:44:47 Abtbk8hJ
cshに知恵がついたのがtcsh。
もはや両方とも過去の遺物。ログインシェルとしては現役だが、
スクリプトでcsh使うのはCOBOLerを名乗るような感じで奇異の目で
見られるのは避けられない。
866:login:Penguin
09/02/23 01:46:15 RMEIkcBQ
つーかcshはUNIXの話だろ。
linuxはbash
867:login:Penguin
09/02/23 02:08:49 Pbes3ogj
>>864
最近はcshは単にtcshへのシンボリックリンクというシステムが
多いんじゃないかな? Solarisは最近はどうなのかな?
868:login:Penguin
09/02/23 08:25:23 c65f34nn
>>866
>linuxはbash
なんだよ、それ。
869:login:Penguin
09/02/23 11:12:11 KfjF9GSX
bash
OpenSolaris,mac,linux
ksh
Solaris
870:login:Penguin
09/02/23 11:29:59 KfjF9GSX
たまに、SolarisとかHP-UX使ってる輩が、linux系のシェルスクリプトの質問で
そのスクリプト動かないんですが、なんて質問してるバカがいる
で、OSきくと、SolarisとかHP-UXだったりする
あなたのはshellはなんですか?なんて逆質問されたりする
871:login:Penguin
09/02/23 11:42:17 0iVkUMQ3
sh: HP-UX
csh: IRIX
bash: OpenSolaris, Mac OS X
ksh: AIX, Solaris
872:login:Penguin
09/02/23 16:32:54 /AxKX1aI
いやsolarisはcshですよ
873:login:Penguin
09/02/23 17:41:46 YasG1lnX
久々のメジャーアップデート、定番シェル「bash」が4.0に
URLリンク(journal.mycom.co.jp)
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
09/02/23 17:46:37 8fvTtZVR
>>873
globstarが素敵
875:login:Penguin
09/02/23 18:19:31 0iVkUMQ3
ちったあ処理速度は速くなったのかね
876:login:Penguin
09/02/23 23:46:13 3cx/aS+U
>>874
find -name のショートカットか。
877:login:Penguin
09/02/24 00:49:40 A7QF/SS5
locateでいいんでないの?
878:login:Penguin
09/02/24 08:32:50 p4EZ+me2
locateは、必ずその前にupdatedbかけないと、正しい結果は得られない
879:login:Penguin
09/02/24 10:05:02 o4EbZdLy
locate使ったこと無いな
/etc/cron.daily/slocate.cron は真っ先に消してしまうし。
880:login:Penguin
09/02/24 14:05:08 A7QF/SS5
updatedbのめんどくささがあってもlocateの速さは魅力
881:login:Penguin
09/02/24 14:44:59 ijmAhEc5
そんなあなたにinotify対応locate
882:login:Penguin
09/02/24 18:05:43 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
09/02/24 18:51:30 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
09/02/24 19:03:27 mkgOQJW+
>> for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理
>読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。
恥ずかしい間違いをしてしまってすみません…
一時ファイルに自分用に適当なファイル名を付けてしまっていたので、
ここに投稿する際に勝手に変更してました(元スクリプトは両方共/tmp/cache-file)
-xで内容が詳しく見られるようですね。もう少し頑張ってみます…
885:882
09/02/24 19:13:26 mkgOQJW+
1行目を
#!/bin/bash
にして、実行する際も$bash convert-thumbnail2jpg.sh と打つことで解決しました。
shではdeclareが使えず、bashでは使えるようです
お騒がせして申し訳ありませんでしたm(_ _)m
886:883
09/02/24 20:34:08 0/zaoYuK
>>884
> (元スクリプトは両方共/tmp/cache-file)
スクリプトの中で何回か使うものなら
cachefile="/tmp/cache-file"
とかやって定義してしまったほうがいいと思う。
887:882
09/02/25 01:46:08 TZfMttNn
>>886
おかげさまで無事完成しました
ありがとうございましたm(_ _)m
888:login:Penguin
09/02/26 17:54:06 fuSH76wo
関連スレ
シェルスクリプトでGUI
スレリンク(tech板)
889:login:Penguin
09/02/27 02:01:52 +MZ66A9I
bash4.0 導入した人誰かいまつか ?
RHEL5.3 make で error orz...
890:login:Penguin
09/02/28 00:15:37 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 <URLリンク(gnu.org)
891:login:Penguin
09/02/28 00:25:54 i9TaSY11
>>890
/bin/bash を置き換えたんですか?
892:login:Penguin
09/02/28 00:31:49 2KTcWABE
/usr/local/に置いただけ
俺には3.2と4.0の違いはあまり関係ないということがわかった
893:login:Penguin
09/02/28 07:37:33 zB5vZ6QQ
bashのバージョンに依存したスクリプトは趣味でやる以外はあんまり書かないと思うけど
894:login:Penguin
09/02/28 11:00:16 Tf6NC8nk
bashのバージョンに依存しないスクリプトって、ほぼ/bin/shか。
895:login:Penguin
09/03/01 14:21:53 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
09/03/01 14:54:34 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
09/03/01 15:06:32 ClVN3cK/
>>895
echo 'A B C D E F' | tr 'ABCDEF' 'BADCFE'
898:login:Penguin
09/03/01 16:12:08 jusYIGdM
bash3 とbash4 って互換性大丈夫でしょ。
899:login:Penguin
09/03/01 16:45:01 b0tpnlkt
>>896>>897
素晴らしい!!
吹雪の最中に神が現れて、いきなり春になったような心境です。
ありがとうございました。
900:login:Penguin
09/03/05 13:25:03 k1KCKSK5
原子番号を元素記号に変換してください。
例)
8 → O
26 → Fe
92 → U
901:login:Penguin
09/03/05 15:44:08 7EIm6RPk
>>900
宿題は自分でやれ。
902:login:Penguin
09/03/05 15:55:50 3/9eCgJO
まず原子番号とそれに対応する元素記号の
テーブルを作成するところからはじめよう。
903:login:Penguin
09/03/05 23:21:24 BnKU6WpI
水素なら
w3m -dump Wikipedia項目リンク | awk '$1 ~ /^1$/{print $3}
ヘリウムなら/^1$/を/^2$/に変える。
904:login:Penguin
09/03/05 23:24:25 feEdgCm8
echo O > 8
echo Fe > 26
echo U > 92
cat %1
俺天才かもしれん。
905:login:Penguin
09/03/05 23:25:16 feEdgCm8
間違えた。。。
cat $1だ。
906:login:Penguin
09/03/05 23:35:39 BnKU6WpI
#!/bin/bash
#grepバージョン
w3m -dump Wikipedia項目リンク | grep "^"$1"[[:space:]]"
907:login:Penguin
09/03/06 00:15:22 4E0LodKQ
>>903
つ awk -v x=番号 '$1 ~ "^" x "$" { print $3 }'
908:login:Penguin
09/03/06 02:41:09 0+Otyqrv
全部if文でやれ。
909:login:Penguin
09/03/06 11:10:42 Es9Fr0vK
w3m -dump Wikipedia項目リンク | perl -ane 'for (1..118) { print "$_: $F[2]\n" if $F[0]=~/^$_$/;}'
910:login:Penguin
09/03/06 19:13:45 m/0+PDHQ
一覧表示でいいなら、これが楽だろ
w3m -dump Wikipedia項目リンク | awk '/^[0-9]/{print $1,$3}'
911:login:Penguin
09/03/06 20:23:52 +R69oXB9
こんなの波動だ
#!/bin/bash
echo 原子番号は
syuuki=~/syuuki
w3m -dump Wikipedia項目リンク |awk '/^[0-9]/{print $1,$3}' - >$syuuki
read genso
echo 原子番号$gensoの元素記号は`grep $genso ~/syuuki`です。
grepが未完成 記号だけにしたい。
912:login:Penguin
09/03/06 22:47:09 tq3ZQvrP
echo 原子番号$gensoの元素記号は`ruby -ane 'BEGIN{genso = ARGV[1]}; if $F[0] == genso; p $F[1]; break; end' ~/syuuki $genso`です。
913:login:Penguin
09/03/07 09:01:58 Qelg+V+C
「原子番号」「の元素記号は」などと書かんでいいから、
改行を入れて見やすくしろ、カス。
914:login:Penguin
09/03/07 20:47:19 zmyZifQf
というかレポートに出すんだからさ
もっと初心者っぽく書いてください
期限は明日までです
↓
915:login:Penguin
09/03/07 21:07:11 cObxxbWz
よし!
やっぱり自分でやろう!
みなさんすいませんでした。忘れてください
916:login:Penguin
09/03/07 21:41:55 pgHRyspE
>>914>>915
w3m -dump URLリンク(d.hatena.ne.jp) | grep "^.ね.*に$"
917:login:Penguin
09/03/08 16:51:10 xQcHQnf7
Perlがあればシェルスクリプトなんて要らない
Perlのほうが高機能だから
918:login:Penguin
09/03/08 17:20:38 J6Fw6OuS
Perl は外部コマンド一つ呼ぶのにいちいち system() とか書かなきゃいけない時点で問題外でしょ。
シェルスクリプトは外部コマンドの呼び出しがとても多いんだから、文法レベルでサポートされてないとやってられない。
919:login:Penguin
09/03/08 18:43:54 4ovvgVHR
$date = `date`;
920:login:Penguin
09/03/08 19:34:58 J6Fw6OuS
ごめん、見直した。
921:login:Penguin
09/03/10 18:06:25 IwU0KhJ5
シェルスクリプトってOOじゃないんでしょ?
ダサっ
Perl使えない落ちこぼれが使う言語、それがシェルスクリプト
922:login:Penguin
09/03/10 19:16:49 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
09/03/10 21:34:04 t8WYWXe4
>>921
OO という観点で議論するなら perl じゃなくて
もっとまともな言語と比較しろよ。
924:login:Penguin
09/03/10 21:51:10 hrcV3cEG
>>922
sed 〜 `コマンド`
とか?
925:login:Penguin
09/03/10 22:33:24 HaCEu7vE
>>921
よりによって最も汚いOOを持つ言語を引っ張り出してきたな。。。
926:login:Penguin
09/03/10 23:10:33 XmHUdl+t
317 名前:名無しさん@お腹いっぱい。 []: 2009/03/10(火) 18:05:12
シェルスクリプトってOOじゃないんでしょ?
ダサっ
927:login:Penguin
09/03/10 23:13:24 21j8Lv5u
そもそも、ほとんどの処理を外部のコマンドに投げているのに
OOはどういうことなのだろうか?
928:login:Penguin
09/03/10 23:17:44 wgUyESoz
>>922
同僚に聞いてみたんだが、xargs なしだとだめなの?
たとえば、ファイル名の置換なら
$ find . -print|sed -e "s/〜
になると思うんだけど。
(for i in `find .`〜 のほうが使いやすいと思うが)
それか
$ コマンド|xargs -i echo {}|sed -e "s/〜
とか?
コマンドのところとか、sed で何をしたいのかを明確に
してもらえればもうちょっと回答のしようがあると思う。
929:922
09/03/10 23:39:56 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
09/03/11 02:34:25 LOMFWb0Z
>>929
xargs -iの後の{}は'{}'みたくエスケープしないとダメなんじゃないの?
931:login:Penguin
09/03/11 08:59:36 DFgGOxJ9
Windows PowerShellはOOなのに
シェルスクリプトはOOじゃないんだよね
時代遅れだね
932:login:Penguin
09/03/11 14:33:02 Z5TO7Bpy
>>929
>211
sed -u 〜
933:login:Penguin
09/03/11 21:43:30 bm/c4JTk
>>931
死ぬほど使いにくいけどな。WindowsPowerShell。
934:login:Penguin
09/03/11 22:32:39 q2e6tqEw
つか、オブジェクト指向が反省されている今になって、何を時代錯誤な事を言ってる人なんだ。
935:login:Penguin
09/03/13 11:15:15 6BZk1deA
c++やjavaのoopはあまり良いものではないからね。
特にjavaでしかoopを知らない人って、なんでもかんでもオブジェクト
にしてしまうだろうし、あれは非効率的なんだよね。
oopも使えるというならそれはそれでいいけどシェルスクリプトの延長線上
にrubyやperlがあるから、oopに拘るならばそっちを使えばいいだけのはなしだよね。
936:login:Penguin
09/03/18 18:33:49 RWYXndAF
くだ質の763に、du -hの結果をサイズ順にソートしたいってのがあった。
$ df -h
20K ./foo
8.0K ./bar
5.1M ./hoge
元質問者は勘違いってことで解決してるんだけど、これをカッコよく1 linerで実現する方法はあるんだろうか?
置換して〜ソートして〜とか、泥臭い方法しか思いつかない...
937:login:Penguin
09/03/19 00:49:00 Ex8kaKKQ
>>936
-h外して後で1024の倍数掛ければいい
938:login:Penguin
09/03/19 01:30:46 1vjKEAU9
俺もそう思うけど、
>>936が話題にしているのは、たぶんdfに限らず、単位を接尾辞とした小数数字を如何にsortするかじゃないかな。
939:login:Penguin
09/03/19 01:33:02 VEb9NHr7
そーじゃなくて>>936の出力をソートするスクリプトがあるか、だろう
おれも置換したりしないと出来値
940:login:Penguin
09/03/19 01:34:48 gobNSPAB
>>937
-hは前提条件でお願い。します。
941:login:Penguin
09/03/19 01:36:54 dcED7bZL
しかしdu -h も微妙なコマンドだな
KつきMつきで見たいやつが大半だろうにソートもできるようにしてくれよって気が
942:login:Penguin
09/03/19 03:20:47 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
09/03/19 04:02:43 3RRVnfG+
if [ -n "$1" ]; then
if expr "$1" : '[0-9][0-9]*$'; then
944:login:Penguin
09/03/19 04:04:43 M6oJqh1N
case "$1" in
[0-9])
dlevel="$1"
;;
esac
945:login:Penguin
09/03/19 04:57:28 yCb470li
>>943, 944
どうもありがとうございます
caseの方を採用させていただきました
946:login:Penguin
09/03/19 13:59:30 KDP/tv8i
>>937-941
やぱしそれなりに泥臭いやり方しかないですかね? 最初、sortはバッファサイズ変更時に
GBとかMBとか見てくれるんだからきっと、とか思ったのに。
947:login:Penguin
09/03/19 14:48:56 +WS3QA7Q
-h 外せば済む話なのに
苦労してスクリプト書く意味がわからん。
948:login:Penguin
09/03/19 15:44:21 VEb9NHr7
目的が「duの結果をソートしたい」じゃなくて「このテキストを(意味を考えて)ソートしたい」だと何度(ry
949:login:Penguin
09/03/19 15:54:38 QnAt/IUj
>>948
dfかduかはっきりしてくれ。duならxduをつかっとけ。MやGよりも視覚的にサイズを
表現してくれた方が分かりやすい。もちろんソートできる。
950:login:Penguin
09/03/19 19:05:34 KDP/tv8i
>>949
元質問はオレなんだが、>>948のとおり、別にduでもdfでもなく、GとかMとかのサイズ指定で
かつ小数点付きのを、どうソートするか、というのが意図だったわけで。
質問の仕方がまずいのは認める。すまん。
951:login:Penguin
09/03/20 10:34:47 OD1Bm4W7
シェルスクリプトで開発したツールをshcでコンパイルしたとして、
それがシェルスクリプトだとバレることってありますか?
もちろん調べればわかるでしょうけど
一般的なエンドユーザの能力ではどうでしょうか?
952:login:Penguin
09/03/20 11:49:16 vtofDqpI
>>951
つ chmod 311 a.out
953:login:Penguin
09/03/20 21:45:28 Pky/qqR2
tar
954:login:Penguin
09/03/20 21:46:03 Pky/qqR2
tar tvf filename.tar
の結果をファイル名順にソートするにはどうすればいいでしょうか?
955:login:Penguin
09/03/20 21:54:15 vtofDqpI
sort -k 6
956:login:Penguin
09/03/20 22:29:18 Pky/qqR2
>>955
ありがとうございます。以下で出来たと思います。
tar tvf filename.tar | sort -k 6
ファイル名が9番目に来ることがあるのは、OSによるものでしょうか?
957:login:Penguin
09/03/20 22:30:46 vtofDqpI
ロケール依存じゃね?
日付の表示
958:login:Penguin
09/03/20 22:45:25 Pky/qqR2
>>957
なるほど、ありがとうございます。
当初の質問とズレますが
ls -lRのディレクトリ名が
職場の環境では
temp:
となり
自宅では
./temp:
となるのもロケール依存の問題でしょうか?
959:login:Penguin
09/03/20 23:54:41 vtofDqpI
ls -lR temp
ls -lR
の違いって事はない?
960:login:Penguin
09/03/21 10:08:06 /JVnxKfV
>>959
引数にディレクトリを指定せずに>>958の違いがでます。
OSは職場がAIXで、自宅がCentOSです。
結果のリストをテキストファイルに出力してプログラムで利用しているので、
フォーマットが違うと問題があるのですが、
行末に「:」があればディレクトリと認識したり、リストのフォーマットに応じたプログラムを
書けばいいのかなと思います。
親切にありがとうございました。
961:login:Penguin
09/03/21 13:39:10 ZdP11rWE
AIXならコードベースが違うから、細かい書式も違うだろうね。
find . -printあるいはfind . -lsの結果を利用した方がいいかもね。
こっちは加工されることを前提とした出力だから。
ls -lRはそうじゃない。
962:login:Penguin
09/03/24 21:43:58 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
09/03/24 22:07:39 fdZEc0lM
returnで返すことにこだわる意味があるん?
VAL1 VAL2 に関数内で値つっこめばいいだけじゃないの?
グローバル変数がどうのとか、シェルで気にする必要ないだろと個人的に思うし。
964:login:Penguin
09/03/24 22:13:47 JcSO3hFa
>>962
URLリンク(www.linux.or.jp)
>関数ローカルの変数は、組み込みコマンド local で宣言できます。
>普通は、変数とその値は関数とその呼び出し側で共有されます。
965:962
09/03/24 23:09:01 vhkRQKv/
グローバル変数で受け渡し?
んまあそうなんですけど、
なんでもグローバルという、BASIC言語みたいなのは生理的にイヤ。
可能な限り普段から全部 local 宣言つけてますので。
なんとか、return VAL_A VAL_B
とかムリっすか?
966:login:Penguin
09/03/24 23:27:22 JcSO3hFa
>>965
無理
> return [n]
> 指定した返り値 n で関数を終了させます。
> n を省略すると、返却ステータスは関数内で最後に実行したコマンドの返却ステータスになります。
スクリプトを分けて標準入出力で受け渡すくらいしか思いつかん
967:login:Penguin
09/03/24 23:31:50 elKnmt6d
俺も昔戻り値二つ返したかったが諦めたことがある。
泣く泣くグローバルにした。
968:login:Penguin
09/03/24 23:32:20 LPmFGK87
>>965
無理矢理だけどこんなことは出来る。
foo ()
{
echo "$VAL1 $VAL2"
}
VALS=(`foo`)
VAL1=${VALS[0]}
VAL2=${VALS[1]}
969:login:Penguin
09/03/25 12:00:35 ZZ2mmRGj
グローバル変数がイヤならばそもそも sh じゃなくて別のスクリプト言語で書け。
そういう言語なんだからあきらめて受け入れろ。
無理に技巧をこらしたところで逆に可読性を落とすだけ。
970:login:Penguin
09/03/25 12:15:44 NaCjRRoe
>>969
そうおもう。perlでもrubyでもgaucheでもいいから。
でも、延長線上で使えるrubyのほうが馴染みやすいかも
971:login:Penguin
09/03/25 12:23:07 uD+uLQB8
>>962
> return VAL1 VAL2
< echo VAL1 VAL2
してreadしる
972:login:Penguin
09/03/25 17:28:54 GtIifwrA
/tmpに書け
973:login:Penguin
09/03/26 15:32:50 3e22XvSN
シェルスクリプトを始めて勉強するのですが、
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界(URLリンク(www.amazon.co.jp))
と
UNIXシェルスクリプトコマンドブック(URLリンク(www.amazon.co.jp))
どちらで勉強するのが良いでしょうか?
974:973
09/03/26 15:33:45 3e22XvSN
×始めて
○初めて
orz
975:login:Penguin
09/03/26 16:30:55 5RpvIQgk
入門bashがオヌヌメ
976:login:Penguin
09/03/27 00:19:45 hx4pY+SP
どれでもいっしょでヌメヌメ
977:login:Penguin
09/03/27 01:38:27 SSuQKmC1
>>976
>>975
ありがとうございます。
まずは>>975さんにヌメヌメして頂いた入門Bashから勉強していきたいと思います。
978:login:Penguin
09/03/27 02:32:52 3RSixa0K
つ「全部」
979:login:Penguin
09/03/29 04:23:46 k6vYgSJE
とあるディレクトリ以下に存在する
特定の拡張子のファイルのみについてファイルサイズの合計を知りたい場合、
最もマシンに負荷を与えずに結果を出すにはどの方法が適しているでしょうか?
・ duコマンドだと除外パターンのパラメータしかない
・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる
という感じで、もっとサクっと結果を軽い処理で出せるような気がするんですが・・・。
980:login:Penguin
09/03/29 05:38:56 RIZc4nP9
findとawkで
981:login:Penguin
09/03/29 07:07:03 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
09/03/29 15:49:16 HhnBqalt
>-name \.suffix
o... rz
983:login:Penguin
09/03/30 08:01:30 4/oTu4d/
10台くらいサーバセットアップする必要があり、
それぞれのapacheの設定ファイルのIP部分だけ変えたいのですが、
何かシンプルで良い方法ってあるでしょうか?
環境変数設定kono_server_no_ipを設定して、
sedあたりで設定ファイルのIP部分をkono_server_no_ipに置換処理、
みたいな感じをぱっと思いついたのですが、
もっとベターな方法ってあるでしょうか?
984:login:Penguin
09/03/30 10:33:16 rBZKWvDE
>>983
まずサーバ毎の環境変数(kono_server_no_ip)の設定はどうやるの?
環境変数の設定をエディタでやったら本末転倒だよね?
「このIP」が自分自身のipアドレスでいいなら、ifconfigで取得してsedで置換。
あと、シンプルじゃなくていいならPuppetとか。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5389日前に更新/243 KB
担当:undef