投げたジョブが終わったことを
* 正常に終わったのかどうか
* どこのディレクトリか
の情報とともにメールで
% a_job ; ( echo $? ; pwd ) | mail -s'Your job is finished' メール@アドレス &
などと自分に知らせたいのですが、tcshの場合
% false ; ( echo $? ; pwd )
0
/home/t-nissie
と、()を使うとfalseの返すstatusをうまくひろってくれないようです。
bash, ksh はOKです:
$ false ; ( echo $? ; pwd )
1
/home/t-nissie
たいていのshellに使えて短く書ける方法はないでしょうか。
--
love && peace && free_software
西松 毅
In article <yey65c4...@cms26.imr.tohoku.ac.jp>, NISHIMATSU Takeshi <t-ni...@No-spam.imr.tohoku.ac.jp> writes
> たいていのshellに使えて短く書ける方法はないでしょうか。
とりあえず、tcsh を止める.... のではないかと....
僕は Perl で書くでしょう。
> % a_job ; ( echo $? ; pwd ) | mail -s'Your job is finished' メール@アドレス &
a_job
set result=$?
( echo $result ; pwd ) | mail -s'Your job is finished' メール@アドレス &
かな?
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
この例なら
% a_job ; echo $? `pwd` | mail -s'Your job is finished' メール@アドレス &
じゃダメですか?
=======================================================================
安岡孝一@京都大学人文科学研究所附属漢字情報研究センター
http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/
=======================================================================
これは多分、tcshの場合「( )」内がサブシェルに解釈されるので、$?がサブ
シェルのその時点でのstatus、つまり0になるからなんでしょうね。
ということは
false; sh -c "echo $?; pwd" | mail …
にすれば、$?を解釈するのはメインのシェルなのでうまくいくのでは。
これは嘘か。echo $$; (echo $$) で同じ番号が2度表示されますものね。
$$のパーシングがコマンドライン展開のときに起るからに100かのっさ
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
Koichi Yasuoka wrote:
> % a_job ; echo $? `pwd` | mail -s'Your job is finished' メール@アドレス &
なるほど。
レポートが本文でなくて良いのなら、
% a_job ; mail -s "Your job is finished $? `pwd`" メール@アドレス
</dev/null &
でもいいかも。しかし、バイト数が増えていますね。。
ぼくの質問、投げたジョブが終わったことを
* 正常に終わったのかどうか
* どこのディレクトリか
の情報とともにメールで自分に知らせるにはどうしたらよいか、
に対して、tcshで
% a_job ; ( echo $? ; pwd ) | mail -s'Your job is finished' メール@アドレス &
がうまくstatusをひろわないのは()内がサブシェルによって
実行されるからだ。
% a_job ; echo $? `pwd` | mail -s'Your job is finished' メール@アドレス &
とすればたいていのshellで使える。などたくさんお答えを
いただきありがとうございます。なるほど、なるほど、
% a_job ; echo $? $PWD | mail -s'Your job is finished' メール@アドレス &
でもOKかもしれませんね。
# tcshをやめてbashにchshしたいのはやまやまなのですが、
# bashをインストールしてもらうだけに書類が10枚くらい
# 飛び交ってしまったりするとかしないとか…
In article <yeyd66bhe...@pentium3dual.imr.tohoku.ac.jp>, NISHIMATSU Takeshi <t-ni...@No-spam.imr.tohoku.ac.jp> writes
> # tcshをやめてbashにchshしたいのはやまやまなのですが、
> # bashをインストールしてもらうだけに書類が10枚くらい
> # 飛び交ってしまったりするとかしないとか…
大学でそうなのかぁ...
Mac OS X もbashがdefaultになっているみたい。
10.2 まで tcsh でしたが、10.3 はデフォルトが bash になりました。
もちろん tcsh も残っていますが。
========================================================================
飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delm...@ht.sakura.ne.jp
Hideo Sir MaNMOS Morishita wrote:
> In article <0404131809...@izumo.cc.nara-wu.ac.jp>,
> ni...@ics.nara-wu.ac.jp (NIDE Naoyuki) writes:
>> In article <0404131806...@hayabusa.ics.nara-wu.ac.jp>, I write:
>> > これは多分、tcshの場合「( )」内がサブシェルに解釈されるので、
>>
>> これは嘘か。echo $$; (echo $$) で同じ番号が2度表示されますものね。
:
> $$のパーシングがコマンドライン展開のときに起るからに100かのっさ
FreeBSD の man で見る限り、tcsh も sh も $$ は親シェルと同じ値で
あると書かれております。 echo $$; (eval echo '$$') で同じ番号がか
えってくることと、false; (eval echo '$?') で sh だと 1、csh だと
0 になることから、$? に関しての動作の違いは bsh 系と csh 系の $? に
対する初期化処理の違いでしょうか?
--
「十分間で決断し、短い理由を添えよ」
A.I.Soft, Inc. CS・品質推進課 成田隆興
さすがに、/bin/sh は入っているでしょうから、
ログインシェルはtcshを使うにしても、スクリプトは /bin/sh が
いいと思います。数値計算や文字列操作には外部コマンドの expr
を使わないといけないし、配列変数相当のことをするのがちょっと
手間ですけど、多くの場合は、csh 系よりは書きやすいはず。
--
tksotn
> NISHIMATSU Takeshi <t-ni...@No-spam.imr.tohoku.ac.jp> writes:
> > # tcshをやめてbashにchshしたいのはやまやまなのですが、
> > # bashをインストールしてもらうだけに書類が10枚くらい
> > # 飛び交ってしまったりするとかしないとか…
$HOME/bin/bash にインストールしてしまって、~/.login に
exec $HOME/bin/bash
なんてのは不許可ですか。
>>>>> OOTANI TAKASHI <tks...@anet.ne.jp> wrote:
> さすがに、/bin/sh は入っているでしょうから、
> ログインシェルはtcshを使うにしても、スクリプトは /bin/sh が
> いいと思います。数値計算や文字列操作には外部コマンドの expr
> を使わないといけないし、配列変数相当のことをするのがちょっと
> 手間ですけど、多くの場合は、csh 系よりは書きやすいはず。
同意します。ログインシェルを bash に変えたら、端末で (t)csh を使えなく
なってしまいました。
--
NAKAJI Hiroyuki (中治 弘行)
In article <407CF0D3...@ht.sakura.ne.jp>,
IIJIMA Hiromitsu <delm...@ht.sakura.ne.jp> wrote:
>> Mac OS X もbashがdefaultになっているみたい。
>
>10.2 まで tcsh でしたが、10.3 はデフォルトが bash になりました。
>もちろん tcsh も残っていますが。
この文脈では、Mac OS X の標準で login shell に設定されてい
る shell のことを言っているんだと思いますが、まさか 10.2 で
は /bin/sh の実体まで tcsh だったりはしませんよね?
10.1 の頃は /bin/sh の実体が zsh で往生したものですが、こ
ちらの変遷はどうなっているんでしょう?10.3 では bash なんで
しょうけど 10.2 では?
login shell は書換えれば変えられますけど /bin/sh は影響が
大きくて無闇に置換えられないので、ちゃんと考えた上で設定して
おいて欲しいものです。
# /bin/sh が bash な Linux もそれなりに困りものだけど、か
#と言って dash に置換えた Debian が良いかと言うとそうでもな
#さそうだし。
--
しらい たかし
> >10.2 まで tcsh でしたが、10.3 はデフォルトが bash になりました。
> >もちろん tcsh も残っていますが。
>
> この文脈では、Mac OS X の標準で login shell に設定されてい
> る shell のことを言っているんだと思いますが、まさか 10.2 で
> は /bin/sh の実体まで tcsh だったりはしませんよね?
> 10.1 の頃は /bin/sh の実体が zsh で往生したものですが、こ
> ちらの変遷はどうなっているんでしょう?10.3 では bash なんで
> しょうけど 10.2 では?
私は MacOS X に触ったのは 10.3 が初めてなので何も知らないのですが、
少なくとも、/bin/sh を起動したときに tcsh の文法が適用されるという
ことはありえないと思います。csh/tcsh と sh/bash/zsh は全く互換性のない
別々の言語だと思っていますので。
> # /bin/sh が bash な Linux もそれなりに困りものだけど、か
> #と言って dash に置換えた Debian が良いかと言うとそうでもな
> #さそうだし。
でも、bash は sh の名前で起動されたときと bash の名前で起動されたときとで
挙動を変えていますから、きちんと sh の文法の範囲内で書いていれば、実体が
bash であっても問題ないと私は認識しているのですが……なにか問題が起こる
具体例がありましたら示してもらえませんか?
むしろ、#!/bin/sh と書きながら bash の拡張を使っているスクリプトの横行が
問題。
on "Re: [Summary] tcsh% false ; ( echo $? ; pwd )"
<4080004D...@ht.sakura.ne.jp>
at Sat, 17 Apr 2004 00:48:29 +0900
IIJIMA Hiromitsu <delm...@ht.sakura.ne.jp> wrote:
> むしろ、#!/bin/sh と書きながら bash の拡張を使っているスクリプトの横行が
> 問題。
どこかに正しい #! /bin/sh なスクリプトの書き方の指針となる資料とかない
ですかね?
o 各 UNIX の /bin/sh の実体
o どこでも動くような /bin/sh の syntax
o そもそも本当の /bin/sh の実装は現在あるのか
のような。
ではでは
--
ひろせ
> どこかに正しい #! /bin/sh なスクリプトの書き方の指針となる資料とかない
> ですかね?
「UNIXプログラミング環境」じゃないですかね。あとBourneさんの
UNIXの本なんかもあったけどこれはもう売ってないかも。
> o 各 UNIX の /bin/sh の実体
> o そもそも本当の /bin/sh の実装は現在あるのか
SVR4系なら純正Bourne Shellでしょ。
> o どこでも動くような /bin/sh の syntax
別に難しくないと思うけどな。上記のシステムでman shすればいいような。
対話的はcsh系、スクリプトは/bin/shって「ふつー」でしょ? 久野
> 久野です。
> 「UNIXプログラミング環境」じゃないですかね。あとBourneさんの
> UNIXの本なんかもあったけどこれはもう売ってないかも。
和書で探すとダメダメかもしれないけど
アマゾン・ドット・コムで検索したら類書が複数ヒットしたです。
わたしのおすすめは
Portable Shell Programming
by Bruce Blinn (Author)
# Publisher: Prentice Hall PTR; Book and Disk edition (October 19, 1995)
# ISBN: 0134514947
本書中のサンプルスクリプトがプレンティス・ホールから無償で自由に
ダウンロードできたはず。ライバル本も多くはそんな風なのではないかと。
> 対話的はcsh系、スクリプトは/bin/shって「ふつー」でしょ? 久野
最大手某F社のUNIXサーバ向けプロダクトにKorn Shellを暗黙に強要する
とんでもないアプリケーションが存在します。
あの製品を作った連中とくに製品開発マネージャはいったい何を考えてんだか。
--
mailto:shi...@dd.iij4u.or.jp 渋谷伸浩
SunOS 5.xの/bin/shには
name () { list; }
なシェル関数があるのでオリジナルではないみたいです
ね。ほかのSVR4もそうだったような。
シェル関数はkshで実装されたのが最初だと思うのです
が、あとからshにも取り入れられたのかな。
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
oh...@sdg.mdd.ricoh.co.jp
> ku...@gssm.otsuka.tsukuba.ac.jp wrote:
>> 久野です。
>> 「UNIXプログラミング環境」じゃないですかね。あとBourneさんの
>> UNIXの本なんかもあったけどこれはもう売ってないかも。
> 和書で探すとダメダメかもしれないけど
> アマゾン・ドット・コムで検索したら類書が複数ヒットしたです。
> わたしのおすすめは
> 本書中のサンプルスクリプトがプレンティス・ホールから無償で自由に
> ダウンロードできたはず。ライバル本も多くはそんな風なのではないかと。
> 最大手某F社のUNIXサーバ向けプロダクトにKorn Shellを暗黙に強要する
> とんでもないアプリケーションが存在します。
> あの製品を作った連中とくに製品開発マネージャはいったい何を考えてんだか。
世界最大手某I社と某H社のUNIXサーバはKorn Shellがデフォルトという
とんでもない構成ですが、ちまたではアレはUNIXじゃないというもっぱらの
うわさです。
> SunOS 5.xの/bin/shには
>
> name () { list; }
>
> なシェル関数があるのでオリジナルではないみたいです
> ね。ほかのSVR4もそうだったような。
HP-UX でも root の .profile に
ll (){...}
la (){...}
などのcshのalias相当のものが同様の流儀で
あれこれちりばめられています。
遅くともHP-UX 7.x時代以降から。
--
mailto:shi...@dd.iij4u.or.jp 渋谷伸浩
> SunOS 5.xの/bin/shには
>
> name () { list; }
>
> なシェル関数があるのでオリジナルではないみたいです
> ね。ほかのSVR4もそうだったような。
そうなると「何がBourne Shellか」になってしまうのですが…
> シェル関数はkshで実装されたのが最初だと思うのです
> が、あとからshにも取り入れられたのかな。
1984にSVR2で導入されたようです。Korn Shellは1983にリリースされ
たようですから、太田さんのおっしゃるストーリーのようですね。
http://www.in-ulm.de/~mascheck/bourne/
で、このページっていちおう「Bourne Shellの歴史」ですよね。広義に
とるなら全部Bourne Shellだし、狭く取るならほんとにVersion 7 その
まま、これが入っているのはあとはたぶん32Vだけね。BSDですらちょっ
とだけど変わっている。確かに「#」があったらcshというのはそりゃ
BSDだなあ。
BSD使いだった自分がよく知ってるのはその/bin/shですけど 久野
P.S. おや、V7のBourne Shellのmanページのリンクがあるじゃないです
か。これに準拠しておけば安全 :-)
> > o どこでも動くような /bin/sh の syntax
POSIX (Single Unix Specification)の規格とか。
http://www.unix-systems.org/single_unix_specification/ で登録すれば
誰でも読めます。 Shell & Utilities Volumeに sh の仕様があります(cshや
kshはないです)。
> 別に難しくないと思うけどな。上記のシステムでman shすればいいような。
>
> 対話的はcsh系、スクリプトは/bin/shって「ふつー」でしょ? 久野
対話的にも、csh系を使う利点はもはや無いように思います。
前田敦司
> 対話的にも、csh系を使う利点はもはや無いように思います。
for i in LIST
do
done
よりも
foreach i LIST
end
の方が短くて済むとかいうのはあります。
--
mailto:shi...@dd.iij4u.or.jp 渋谷伸浩
maeda...@ialab.is.tsukuba.ac.jpさん:
> 対話的にも、csh系を使う利点はもはや無いように思います。
単に慣れてるだけです。ああそうだ、
set path = ( ディレクトリ ディレクトリ … )
の方が
PATH=デイレクトリ:デイレクトリ:…:デイレクトリ
より打ちやすいとか。
まあこれも慣れですかね 久野
P.S. プログラマブル補完なんかはbashは何でもできるけどtcshのが
ささっと設定できるという印象あります。
In article <c5rar1$3qc$1...@ns.src.ricoh.co.jp>,
Junn Ohta <oh...@src.ricoh.co.jp> wrote:
>> SVR4系なら純正Bourne Shellでしょ。
SVR4 系で純正 Bourne shell を実装してる OS って Solaris し
か見たことがありませんけど、他に何があるでしょうか?他の一般
的な SVR4 だと Korn shell が /bin/sh になってますよね。
>SunOS 5.xの/bin/shには
>
> name () { list; }
>
>なシェル関数があるのでオリジナルではないみたいです
>ね。ほかのSVR4もそうだったような。
確かに 4.3BSD-Reno の Bourne shell には関数は実装されてい
ないんですが、SunOS 5.x の /bin/sh は、当時 Sun microsystems
に在籍中の Steve Bourne 氏自身が書いてた筈なので、正真正銘の
Bourne shell なんじゃないでしょうか。
# Bourne 氏が Sun Mocrosystems にいたのが 89-94 で、SunOS
#5.[01] が 92 年、5.[23] が 93 年に release されています。
>シェル関数はkshで実装されたのが最初だと思うのです
>が、あとからshにも取り入れられたのかな。
SunOS の /bin/sh も Korn shell も、商用 OS で source が参
照出来ないんですが、SunOS 版 /bin/sh の系譜としては、結構よ
そからの機能を精力的に実装していたみたいです。
echo が builtin になったのも Korn shell -> Bourne shell じ
ゃありませんでしたっけ?どっちも SunOS 4.1 の頃には実装され
てました。
--
しらい たかし
なるほど。するとこれもやはり、とてもCのソースには
見えないあのヘンタイなマクロを使って書かれているの
でしょうか? :-)
XPG4のshはkshでした。
たしかに「Bourne ShellといったらV7の/bin/shだけだ」
なんていったらシェルスクリプトにコメントも書けなく
なっちゃいますね。(^^;
> 1984にSVR2で導入されたようです。Korn Shellは1983にリリースされ
> たようですから、太田さんのおっしゃるストーリーのようですね。
> http://www.in-ulm.de/~mascheck/bourne/
おお、いいサイトですね、ここ。
> BSD使いだった自分がよく知ってるのはその/bin/shですけど 久野
私もちゃんと知ってるBourne Shellといったら4.1BSD以
降のBSD variantだけです。
> たしかに「Bourne ShellといったらV7の/bin/shだけだ」
> なんていったらシェルスクリプトにコメントも書けなく
> なっちゃいますね。(^^;
まあ「:」とか「#」とかいう何もしないコマンドを/binあたりに
作っておけば…
昔のcshだかはそういう実装だったような 久野
P.S. あれ、「:」って組み込みコマンドでしたっけ… はっ! 誰かを召
喚しているような気が ^_^;;
でも、
foreach i LIST
…
end | command
とかできなくて不便。というわけで結局sh系に落ち着いちゃいますね。
In article <c5sddl$16...@utogw.gssm.otsuka.tsukuba.ac.jp>,
<ku...@gssm.otsuka.tsukuba.ac.jp> wrote:
>久野です。
> まあ「:」とか「#」とかいう何もしないコマンドを/binあたりに
>作っておけば…
>
> 昔のcshだかはそういう実装だったような 久野
csh の「:」は command ではなくて label 定義なので、Bourne
shell のつもりで「:」を記述すると、一見何も行なわないように
見えますが、空の label 名を定義してくれます。
ややこしいのは、csh では「空の label 名」という代物が存在
を許されていて、しかも lebel として機能してしまう点ですね。
--
しらい たかし
これ面白いですね。20年前私が最初に触れたシャープのOA-UXって、
SystemIII系のように記憶してたんですけど、これで見ると V7のshのようで
記憶違いだったようです。そう言えば csh も存在しなかった。
testが外部コマンドなんで、caseでもif testでも書ける場合は
caseを使う癖が付いてました。
>P.S. あれ、「:」って組み込みコマンドでしたっけ…
組み込みコマンドだったと思います。
その後使ったSystemIIIのcshは、スクリプトの1文字目が#ならcshでそうで無ければ
shで実行だったので、csh無しと比べて上位互換でしたけど、(#!の機能は無かった)
逆に、1文字目が : のときだけshで、そうでなければcshで実行する
某SVR2のcshもありびっくりしたことがあります。何故そんな仕様なのか不思議。
--
tksotn
>> 対話的にも、csh系を使う利点はもはや無いように思います。
>
> for i in LIST
> do
> done
>
> よりも
> foreach i LIST
> end
zsh だとどちらでも、OK です。
--
Hiroshi Fujishima
>> 対話的にも、csh系を使う利点はもはや無いように思います。
>
> 単に慣れてるだけです。ああそうだ、
>
> set path = ( ディレクトリ ディレクトリ … )
>
> の方が
>
> PATH=デイレクトリ:デイレクトリ:…:デイレクトリ
>
> より打ちやすいとか。
zsh だと
path=( ディレクトリ ディレクトリ … )
PATH=デイレクトリ:デイレクトリ:…:デイレクトリ
のどちらでも OK です。
> P.S. プログラマブル補完なんかはbashは何でもできるけどtcshのが
> ささっと設定できるという印象あります。
autoload -U compinit
compinit
だけで、ほとんど設定がおわってしまいます。
--
Hiroshi Fujishima
on "Re: [Summary] tcsh% false ; ( echo $? ; pwd )"
<c5rcj1$4...@utogw.gssm.otsuka.tsukuba.ac.jp>
at 17 Apr 2004 13:48:17 GMT
ku...@gssm.otsuka.tsukuba.ac.jp wrote:
(snip)
> 1984にSVR2で導入されたようです。Korn Shellは1983にリリースされ
> たようですから、太田さんのおっしゃるストーリーのようですね。
>
> http://www.in-ulm.de/~mascheck/bourne/
>
> で、このページっていちおう「Bourne Shellの歴史」ですよね。広義に
> とるなら全部Bourne Shellだし、狭く取るならほんとにVersion 7 その
> まま、これが入っているのはあとはたぶん32Vだけね。BSDですらちょっ
> とだけど変わっている。確かに「#」があったらcshというのはそりゃ
> BSDだなあ。
(snip)
同じサイトの
Various system shells
http://www.in-ulm.de/~mascheck/various/shells/
によれば、最近の UNIX ファミリに限れば /bin/sh は ash, ksh (の眷属),
bash のいずれかで、これら三者の文法の最大公約数は (恐らく) ash なので、
商用/非商用に限らず、ここ最近 (5年以内ぐらい) のどの UNIX ファミリに
おいても動作する #! /bin/sh なスクリプトを書くには、ash の文法に従え
ばよい。
という方針でいいと思うのですが、他に気をつけるべき点などありますでしょ
うか。
# これで安心して `command` の代わりに $(command) が、`expr n + m` の代
# わりに $((n + m)) が使えそうです。
ではでは
--
ひろせ
http://www.irori.org/
最近のashがどうなっているのか知らないのですが、
> # これで安心して `command` の代わりに $(command) が、`expr n + m` の代
> # わりに $((n + m)) が使えそうです。
初期のashではこれらは使えなかったような気がします。
# FreeBSD 2.xあたりのsh(ash)はどうだったかな?
記事 <40814975...@dd.iij4u.or.jp> で
"Shibuya, Nobuhiro"さんは書きました
> for i in LIST
> do
> done
> よりも
> foreach i LIST
> end
> の方が短くて済むとかいうのはあります。
sh 系だと
for i in LIST ; do (コマンド); done
と 1 liner にできるのが、
csh 系だとできないんですよね。
でもって、ループの中身は history に入らない。
history を元に、ループ内容をちょっと修正しては再実行、ということを
やってるとcsh系はちょっと不便です。
#私はtcsh使いなのですが、そういう時は「sh -c "ほげほげ"」ってやってたり…
PROJECT TEAM DoGA 高津正道 ta...@doga.jp
TBD0...@nifty.ne.jp
PROJECT TEAM DoGAのホームページ → http://doga.jp/
4月19日(月) 今日のマーフィーの法則 [ストックメイヤーの定理]
簡単に見えるものは、難しい。難しく見えたら、どうやったって不可能だ。
> autoload -U compinit
> compinit
>
> だけで、ほとんど設定がおわってしまいます。
それでどんなコマンドでも自分の思い通りに補完がカスタマイズ
されるのかなあ。
それならすごいけど。 久野
OOTANI TAKASHI wrote:
> これ面白いですね。20年前私が最初に触れたシャープのOA-UXって、
> SystemIII系のように記憶してたんですけど、これで見ると V7のshのようで
> 記憶違いだったようです。そう言えば csh も存在しなかった。
cshは存在したような記憶があるのですが、後日バージョンアップして
SystemVになったOA-UXIIの記憶と混同しているのかなぁ。
SystemIII時代のOA-UXは数ヶ月しか使ってないので。
シャープのOAシリーズは下位機種は独自設計製造でしたが、最上位
機種はピラミッドのOEMでしたよねぇ。。。
FreeBSD2.2.8で使えました。exprをfork&execしなくて済むと知ってしまった今、
tcshを使う理由が無くなってしまったような…。
FreeBSDのshがashになったのは3.xからではないかと/usr/srcをまさぐって
みたのですが、ディレクトリ名がshなだけで、TOURという名のチュートリアル
を見たらしっかり ash と書いてありました。
--
中村和志@神戸 <mailto:k...@kobe1995.net>
NAKAMURA Kazushi@KOBE <http://kobe1995.net/>
- Break the hate chain. No more kill!
administrator@[127.1]
sai...@ist.osaka-u.ac.jp.NOSPAMさん:
> シャープのOAシリーズは下位機種は独自設計製造でしたが、最上位
> 機種はピラミッドのOEMでしたよねぇ。。。
OSその他のソフト部分は下位と上位で同一だったのでしょうか。
ところでピラミッドって形はピラミッド形だったのですか?
すごく今更な質問ですが… 久野
P.S. Sequent Balanceはやじろべえ形をしていたとか(嘘)
In article <0404191944...@ns.kobe1995.net>,
NAKAMURA Kazushi <k...@kobe1995.net> wrote:
>>> 商用/非商用に限らず、ここ最近 (5年以内ぐらい) のどの UNIX ファミリに
>>> おいても動作する #! /bin/sh なスクリプトを書くには、ash の文法に従え
>>> ばよい。
ダウト。Mac OS 10.1.x の /bin/sh は zsh なので ash どころ
か Bourne shell とも互換性のない箇所が散見されます。`` を評
価する前後での変数展開が zsh はちょい特殊。
>>最近のashがどうなっているのか知らないのですが、
「最近の ash」というのが果して Kenneth Almquist 氏の手によ
るものなのかどうかはともかく、4.4BSD Alpha に実装されていた
ash は POSIX 準拠なので $(()) を実装しています。
その後 POSIX 規格の方が大幅に機能追加されてしまって、今で
は POSIX 非準拠の部分がありますが、それを厳密に POSIX 準拠に
実装し直したのが Dedian proj. の dash ですね。
>>> # これで安心して `command` の代わりに $(command) が、`expr n + m` の代
>>> # わりに $((n + m)) が使えそうです。
>>
>>初期のashではこれらは使えなかったような気がします。
4.3BSD NET/2 の ash は $(()) を実装していませんが、$() の
方は実装しています。「初期の ash」と言っても、これより前のも
のは多分世に出ていないんじゃないでしょうか。
http://www.freebsd.org/cgi/man.cgi?query=sh&apropos=0&sektion=0&manpath=4.3BSD+NET%2F2&format=html
>># FreeBSD 2.xあたりのsh(ash)はどうだったかな?
>
>FreeBSD2.2.8で使えました。exprをfork&execしなくて済むと知ってしまった今、
>tcshを使う理由が無くなってしまったような…。
4.4BSD Alpha の ash で既にどちらも実装されていた訳ですから、
そこから派生した 4.4BSD-Lite を元にした *BSD 達は最初から使
えていた筈です。
386BSD に由来していた時代の *BSD は NET/2 時代の $(()) を
使えない ash を持っていたようですが、FreeBSD だと 1.1.5.1 ま
で、NetBSD だと 0.9 までですね。
>FreeBSDのshがashになったのは3.xからではないかと/usr/srcをまさぐって
>みたのですが、ディレクトリ名がshなだけで、TOURという名のチュートリアル
>を見たらしっかり ash と書いてありました。
BSD の系譜の中で /bin/sh に Bourne shell が使われていたの
は 4.3BSD Reno までで、4.3BSD NET/2 からは ash に取って代わ
られています。
現在の *BSD 各種のうち、Reno 以前の BSD から分派した一派は
存在しませんので、*BSD に限って言えば最初から ash は使われて
いた筈です。
但し、OpenBSD は 2.2 辺りで ash じゃなくて pdksh に代わっ
ちゃったみたいですね。何があったんでしょうね?
--
しらい たかし
ashを最初に見たのはUSENET News(comp.sourcesあたり?)
だった記憶があるのですが...。OSの一部ではなくて、単
体で配布されたバージョンです。BNR/2より前だと思うの
ですが、記憶はあいまいです。
fjの長老がたの昔話が延々とつづいておりますが,
ここらで若者むけにぼくが少し解説をしておきます.
● csh系でシェルスクリプトを書いてはいけません.
Tom Christiansen 著 森 大毅 訳
「なぜ csh でプログラムを書くのが良くないのか」
(原題 "Csh Programming Considered Harmful")
http://www.klab.ee.utsunomiya-u.ac.jp/~hiroki/csh-whynot.euc
を読みましょう.
● ログインシェルは「慣れの問題」という面もあり
ますが, sh系を使う方がのちのち楽かもしれません.
● shスクリプトの書き方は
木村 孝道 著
平林 浩一 監修
Bourne Shell 自習テキスト
http://www.tsden.org/takamiti/shText/index.html
や man page, info で自習しましょう.
● a=`expr $a + 1` vs a=$(( $a + 1 ))
後者のほうが外部のコマンドexprを呼び出す overhead
cost がかからなくてよいです. ただし, 長老がたが
現在も使われているような古くて遅いマシンでもな
ければあまり気にする必要はないでしょう. 後方互
換性を気にする場合は前者を使いましょう.
#いまどきの若者はfjを読んでいるのだろうか.
--
love && peace && free_software
西松 毅 % 若者
ku...@gssm.otsuka.tsukuba.ac.jp wrote:
>>シャープのOAシリーズは下位機種は独自設計製造でしたが、最上位
>>機種はピラミッドのOEMでしたよねぇ。。。
> OSその他のソフト部分は下位と上位で同一だったのでしょうか。
違いました。ピラミッドは独自OSで、SystemVとBSDの両方が入った
変なUNIXでした。UNIVERSE切り替えという概念を持っていて、ユーザ
環境をSysVにしたりBSDにしたりできた。。。と記憶しています。
> ところでピラミッドって形はピラミッド形だったのですか?
ただの四角い筐体でしたけど、たしか、シャープがOEMしていた
モデルは最大4CPUだったはず。
齊藤明紀 saitoh@IST.OSAKA-U.AC.JP
on "Re: [Summary] tcsh% false ; ( echo $? ; pwd )"
<c60h1j$30j8$1...@nsvn01.zaq.ne.jp>
at Mon, 19 Apr 2004 21:37:29 +0900
Takashi SHIRAI wrote:
> >>> 商用/非商用に限らず、ここ最近 (5年以内ぐらい) のどの UNIX ファミリに
> >>> おいても動作する #! /bin/sh なスクリプトを書くには、ash の文法に従え
> >>> ばよい。
>
> ダウト。Mac OS 10.1.x の /bin/sh は zsh なので ash どころ
> か Bourne shell とも互換性のない箇所が散見されます。`` を評
> 価する前後での変数展開が zsh はちょい特殊。
(snip)
う"。後程 zsh の挙動を調べてみます。
//
追加でお願いなのですが、
手元の Mac OS X 10.2.8 の /bin/*sh の情報を "Various system shells" の
ページの作者の方に送ったところ、他の Mac OS X のバージョンの shell の
情報知らない? ときかれました。
手元で動いているのは 10.2.8 しかないので、10.0.x, 10.1.x, 10.3.x の環境
をお持ちの方がいましたら、/bin/*sh の情報を教えていただけないでしょう
か。
因みに 10.2.8 では以下のようになっています。
$ ls -l /bin/*sh
-rwxr-xr-x 1 root wheel 540884 Oct 6 2003 /bin/bash
-r-xr-xr-x 1 root wheel 315136 Oct 6 2003 /bin/csh
-r-xr-xr-x 1 root wheel 540884 Oct 6 2003 /bin/sh
-r-xr-xr-x 1 root wheel 315136 Oct 6 2003 /bin/tcsh
-rwxr-xr-x 1 root wheel 828780 Oct 6 2003 /bin/zsh
$ md5sum /bin/bash /bin/sh
745658963ed0921d490457685caeaf44 /bin/bash
745658963ed0921d490457685caeaf44 /bin/sh
$ md5sum /bin/csh /bin/tcsh
ced4afe1d62c8aef28e113ded7bf6599 /bin/csh
ced4afe1d62c8aef28e113ded7bf6599 /bin/tcsh
$ /bin/bash --version
GNU bash, version 2.05a.0(1)-release (powerpc-apple-darwin6.0)
Copyright 2001 Free Software Foundation, Inc.
$ /bin/sh --version
GNU bash, version 2.05a.0(1)-release (powerpc-apple-darwin6.0)
Copyright 2001 Free Software Foundation, Inc.
$ /bin/zsh --version
zsh 4.0.4 (powerpc-apple-darwin6.0)
$ /bin/tcsh -c 'echo $version'
tcsh 6.10.00 (Astron) 2000-11-19 (powerpc-apple-darwin) options 8b,nls,dl,al,sm,rh,color
$ /bin/csh -c 'echo $version'
tcsh 6.10.00 (Astron) 2000-11-19 (powerpc-apple-darwin) options 8b,nls,dl,al,sm,rh,color
# Mac OS X 関係の ML でも尋ねてみようと思っています。
tcshを捨てたい捨てたいと思っているのですが、プログラム補完機能がbashに
無いので、もう何年も我慢しています。そのうちにzshかなとも思い続けていま
す。
…と投稿しようとして何げにman bashすると、……在るぢゃん。というわけで、
1週間かけてちまちまと~/.bash*を整備し、無事tcshと決別できました。明日か
らは、職場で撲滅を始めます。(Solaris8に付いて来るbash 2.03にはプログラム
補完が無いのですが、使用頻度が少ないので良しとします。)
# ただ ` や $( に続いての補完が意図通りに動きませんが、許容範囲です。
ei-...@foc.jpさん:
> …と投稿しようとして何げにman bashすると、……在るぢゃん。
わりと新しいんですよね。綺麗かと言われるとよく分からないけど…
tcshみたいなのも好きですけどね 久野
CHANGES曰く
> This document details the changes between this version, bash-2.04-alpha1,
> and the previous version, bash-2.04-devel.
...
> 3. New Features in Bash
>
> a. A new programmable completion facility, with two new builtin commands:
> complete and compgen.
なので、2.04からですね。
# でも半年以上(私はSlackware遣い。)気付かなかったのが情けなゐ。
綺麗か否かはおいて、-Fで函數を使うと決めた時点で語単位でも文字単位でも行
全体を見れるので、自由度は優っていると思います。
ei-...@foc.jpさん:
> 綺麗か否かはおいて、-Fで函數を使うと決めた時点で語単位でも文字単位でも行
> 全体を見れるので、自由度は優っていると思います。
bashの方がデザイン的には「綺麗」「自由度優っている」と思います
が力技っぽい。tcshのは特定用途決め打ちでさっとできるようにした
「いかにも」な感じがします。それはそれで好きというか。
Zshのはどうやってカスタマイズするか知らない 久野
on "Re: [Summary] tcsh% false ; ( echo $? ; pwd )"
<0404252305...@bureau.foc.jp>
at Sun, 25 Apr 2004 14:05:08 GMT
ei-...@foc.jp wrote:
> tcshを捨てたい捨てたいと思っているのですが、プログラム補完機能がbashに
> 無いので、もう何年も我慢しています。そのうちにzshかなとも思い続けていま
> す。
>
>
> …と投稿しようとして何げにman bashすると、……在るぢゃん。というわけで、
> 1週間かけてちまちまと~/.bash*を整備し、無事tcshと決別できました。明日か
> らは、職場で撲滅を始めます。(Solaris8に付いて来るbash 2.03にはプログラム
> 補完が無いのですが、使用頻度が少ないので良しとします。)
その programmable completion を集めた
bash-completion
<URL:http://www.caliban.org/bash/index.shtml#completion>
というものがあります。参考までに。
HIROSE, Masaakiさんの<yf1hdv7mk9s.wl%hiro...@t3.rim.or.jp>から
>bash-completion
><URL:http://www.caliban.org/bash/index.shtml#completion>
>
>というものがあります。参考までに。
お、僕もコレ入れよう、と思ってたら、
Debian(woody)にはすでに /etc/bash_complete として入ってました。
知らんかった・・・・
--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
In article <c6hgtj$1q...@utogw.gssm.otsuka.tsukuba.ac.jp>,
<ku...@gssm.otsuka.tsukuba.ac.jp> wrote:
>久野です。
> bashの方がデザイン的には「綺麗」「自由度優っている」と思います
>が力技っぽい。tcshのは特定用途決め打ちでさっとできるようにした
>「いかにも」な感じがします。それはそれで好きというか。
一般論としても、bash には bash なりの美学なり設計なりがあ
って、多分最初はそのとおりに実装されていて奇麗だったんだと思
いますが、仕様変更やら機能追加やらを繰り返すうちに完全性が崩
れていって、力業による実装部分が増えていったように思えます。
その基本設計を頑なに守り続ける故のデメリットもあるのですが、
後先考えずに動けばおっけーなのか、ちゃんと考えて ad-hoc には
実装しないのか、その辺りの選択でジレンマがあるのかなという気
もします。
飽くまでも source から見た印象でしかありませんけどね。
# 例えば 2pass parse に拘ってるのでいつまで経っても $() の
#中に case statement を書けないとか :-)
--
しらい たかし
ありがとうございます。
In article <c6i8vd$bmp$1...@news-wst.ocn.ad.jp> on fj.unix.shells,
ta...@ca2.so-net.ne.jp wrote:
| お、僕もコレ入れよう、と思ってたら、
| Debian(woody)にはすでに /etc/bash_complete として入ってました。
Slackware 9.1にも、extra/bash-completion-20030911/ 以下に在りました。
ちょい古めなので、上記URLから最新版を取って来て入れ、パッケージにしまし
た。明日朝、<ftp://pub.foc.jp/slackware-alteration/pkg-Slackware-9.1/>に
置きます。
Tanaka-Qtaro-Yasuhiroさんの<c6i8vd$bmp$1...@news-wst.ocn.ad.jp>から
>Debian(woody)にはすでに /etc/bash_complete として入ってました。
/etc/bash_completion の間違いでした。すいません。
--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
10.3(サブバージョン不明)での情報です。
$ ls -l /bin/*sh
-rwxr-xr-x 1 root wheel 603488 3 24 10:42 /bin/bash
-r-xr-xr-x 1 root wheel 348068 3 24 10:42 /bin/csh
-r-xr-xr-x 1 root wheel 603488 3 24 10:41 /bin/sh
-r-xr-xr-x 1 root wheel 348068 3 24 10:42 /bin/tcsh
-rwxr-xr-x 1 root wheel 479120 3 24 10:42 /bin/zsh
$ md5sum /bin/bash /bin/sh
c290c1ebaadfba5444bc111bb37e8fcd /bin/bash
c290c1ebaadfba5444bc111bb37e8fcd /bin/sh
$ md5sum /bin/csh /bin/tcsh
f2c43adf1fb25d6aac3ca2c2fbc6431a /bin/csh
f2c43adf1fb25d6aac3ca2c2fbc6431a /bin/tcsh
$ /bin/sh --version
GNU bash, version 2.05b.0(1)-release (powerpc-apple-darwin7.0)
Copyright (C) 2002 Free Software Foundation, Inc.
$ /bin/csh --version
tcsh 6.12.00 (Astron) 2002-07-23 (powerpc-apple-darwin) options 8b,nls,dl,al,kan,sm,rh,color,dspm,filec
$ /bin/zsh --version
zsh 4.1.1 (powerpc-apple-darwin7.0)
========================================================================
飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delm...@ht.sakura.ne.jp
MacOS Xだとビルドバージョンとかあると良いかも。
[このMacについて]->[詳しい情報]くらいでみれたり
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
on "Re: [Summary] tcsh% false ; ( echo $? ; pwd )"
<yf1smevo592.wl%hiro...@t3.rim.or.jp>
at Fri, 23 Apr 2004 10:24:57 +0900
ひ@RIM wrote:
> 手元の Mac OS X 10.2.8 の /bin/*sh の情報を "Various system shells" の
> ページの作者の方に送ったところ、他の Mac OS X のバージョンの shell の
> 情報知らない? ときかれました。
>
> 手元で動いているのは 10.2.8 しかないので、10.0.x, 10.1.x, 10.3.x の環境
> をお持ちの方がいましたら、/bin/*sh の情報を教えていただけないでしょう
> か。
(snip)
情報いただいた方、ありがとうございました。これをまとめて Sven 氏に送っ
てみます。
参考までに、10.0, 10.2, 10.3 の /bin/*sh はこんなふうになっていました。
* Mac OS X 10.3.3 (clean typical install 10.3.0 + Apple Software Update )
o /bin/sh: bash 2.05b.0 (NOT {sym,hard}link to /bin/bash)
o /bin/bash: bash 2.05b.0
o /bin/csh: tcsh 6.12.00 (Astron) (NOT {sym,hard}link to /bin/tcsh)
o /bin/tcsh: tcsh 6.12.00 (Astron)
o /bin/zsh: 4.1.1
* Mac OS X 10.2.8 (pre-installed 10.2 + Apple Software Update)
o /bin/sh: bash 2.05a.0 (NOT {sym,hard}link to /bin/bash)
o /bin/bash: bash 2.05a.0
o /bin/csh: tcsh 6.10.00 (Astron) (NOT {sym,hard}link to /bin/tcsh)
o /bin/tcsh: tcsh 6.10.00 (Astron)
o /bin/zsh: 4.0.4
* Mac OS X 10.2.0 (clean typical install)
o /bin/sh: bash 2.05a.0 (NOT {sym,hard}link to /bin/bash)
o /bin/bash: bash 2.05a.0
o /bin/csh, /bin/tcsh (hard link): tcsh 6.10.00 (Astron)
o /bin/zsh: 4.0.4
* Mac OS X 10.0.0 (clean typical install)
o /bin/sh: zsh 3.0.8 (not {sym,hard}link to /bin/zsh)
o /bin/zsh: 3.0.8
o /bin/csh, /bin/tcsh (hard link): tcsh 6.08.00 (Astron)
In article <c67ng1$1v8h$1...@newsserv.ics.es.osaka-u.ac.jp>
sai...@ist.osaka-u.ac.jp.NOSPAM writes:
>>>シャープのOAシリーズは下位機種は独自設計製造でしたが、最上位
>>>機種はピラミッドのOEMでしたよねぇ。。。
>
>> OSその他のソフト部分は下位と上位で同一だったのでしょうか。
>
>違いました。ピラミッドは独自OSで、SystemVとBSDの両方が入った
>変なUNIXでした。UNIVERSE切り替えという概念を持っていて、ユーザ
>環境をSysVにしたりBSDにしたりできた。。。と記憶しています。
まるでconvexみたい。MIPS-OSもSysVとBSD風のコマンドが両方入って
いて、PATHを通す順序で挙動を変えることが出来たような。
>> ところでピラミッドって形はピラミッド形だったのですか?
>ただの四角い筐体でしたけど、たしか、シャープがOEMしていた
>モデルは最大4CPUだったはず。
某A社のやつは、ディスクだかドラムだかの筐体とかもフロア一杯に
広がっていてどれが本体だか分からなかったですが、どの箱も四角
でした。OSもA社謹製の日本語4.2BSDでした。
In article <0404191944...@ns.kobe1995.net>
k...@kobe1995.net writes:
>>> # これで安心して `command` の代わりに $(command) が、`expr n + m` の代
>>> # わりに $((n + m)) が使えそうです。
>>
>>初期のashではこれらは使えなかったような気がします。
>>
>># FreeBSD 2.xあたりのsh(ash)はどうだったかな?
>
>FreeBSD2.2.8で使えました。exprをfork&execしなくて済むと知ってしまった今、
>tcshを使う理由が無くなってしまったような…。
まだ残っていました。$変数:r 等です。
デジカメ画像をまとめて変換したい時、
% foreach i (*.jpg *.tif *.ppm)
> convert -resize 750x500 $i $i:r.jpeg
> end
を
$ for i in *.jpg *.tif *.ppm;do convert -resize 750x500 $i $i:r.jpeg;done
てな感じでワンライナーにしたいのですが、shだと $i:r が働きません。
$(basename .jpg .tif .ppm) という訳にもいきません。
何とか上手くワンライナーに出来ないものでしょうか?
--
中村和志@神戸 @mailto:k...@kobe1995.net@
NAKAMURA Kazushi@KOBE @http://kobe1995.net/@
>$ for i in *.jpg *.tif *.ppm;do convert -resize 750x500 $i $i:r.jpeg;done
そりゃもう、exprを駆使して
for i in *.jpg *.tif *.ppm ; do convert -resize 750x500 $i `expr $i : '\(.*\.\)'`jpeg ; done
でしょう。でも、これ、1行に「おさまってない」気がするなぁ…。
=======================================================================
安岡孝一@京都大学人文科学研究所附属漢字情報研究センター
http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/
=======================================================================
In article <0405152317...@ns.kobe1995.net>,
NAKAMURA Kazushi <k...@kobe1995.net> wrote:
>中村和志@神戸です。
>>FreeBSD2.2.8で使えました。exprをfork&execしなくて済むと知ってしまった今、
>>tcshを使う理由が無くなってしまったような…。
>
>まだ残っていました。$変数:r 等です。
対象は FreeBSD 2.2.8 以降の ash でいいんですね?その辺りに
なると POSIX 準拠がほぼ実現されていますので、${%} や ${#} が
使える筈です。少なくとも 2.2.6 の /bin/sh では使えました。
>$ for i in *.jpg *.tif *.ppm;do convert -resize 750x500 $i $i:r.jpeg;done
>
>てな感じでワンライナーにしたいのですが、shだと $i:r が働きません。
$ for i in *.jpg *.tif *.ppm; do convert -resize 750x500 $i ${i%.*}.jpeg; done
拡張子が「.tar.gz」のように複数から成る場合は「${i%%.*}」
ですね。
流石に「package-1.0.4b-beta」みたいな「.」付の basename の
後ろに「.tar.gz」やら「.patch」やらついてる filename 群から
basename を取出すのは無理でしょうね。
尤もこれは csh でも無理っぽいけど。
--
しらい たかし
まあ,言い始めたらきりがないですが,
あの機能もこの機能も,というのが望みの場合には
ash にこだわるよりも zsh に逃げてしまうのは
ダメなんでしょうか?
<0405152317...@ns.kobe1995.net>の記事において
k...@kobe1995.netさんは書きました。
> まだ残っていました。$変数:r 等です。
> デジカメ画像をまとめて変換したい時、
>
> % foreach i (*.jpg *.tif *.ppm)
> > convert -resize 750x500 $i $i:r.jpeg
> > end
zsh% for i in *.{jpg,tif,ppm}
for> convert -resize 750x500 $i $i:r.jpeg
とか
zsh% for i in *.{jpg,tif,ppm};do;convert -resize 750x500 $i $i:r.jpeg;done
でいけます.
ところで,
> てな感じでワンライナーにしたいのですが、shだと $i:r が働きません。
one liner というのは "一行程度で済むだろ" という
ことを言うときに意味があるだけで普段1行に納めなければと
必死に考える必要はないんじゃないでしょうか?
(zsh なら history search でも複数行呼び返せます)
# まあ,昔の環境で zsh を入れていないということなら
# 仕方ないですけど
--
∧∧
Zzz.. (- - )⌒⌒⊇~ 川口 銀河
############## ginga-fj-s...@ginganet.org
ワンライナーにしたい時、その理由は「短く済ませたい」であることもありま
すけど、「他の作業の部品として使える1つの構文に収めたい」であることもあ
りますよね。今回のお題をshで for … done で済ませることには、そういう利
点もあると思うわけです。for … done 2> /tmp/hoge とか、for … done 2>&1
| fuga とかできますからね。同じことがcshでできないのが、cshで基本的に辛
いことの1つ。試しに手元で
% foreach i (a b c)
foreach? ls $i
foreach? end >& /tmp/hoge
とかやってみるといかにも動作が怪しい…
ni...@ics.nara-wu.ac.jp
<0405162049...@hayabusa.ics.nara-wu.ac.jp>の記事において
ni...@ics.nara-wu.ac.jpさんは書きました。
> > one liner というのは "一行程度で済むだろ" という
> > ことを言うときに意味があるだけで普段1行に納めなければと
> > 必死に考える必要はないんじゃないでしょうか?
>
> ワンライナーにしたい時、その理由は「短く済ませたい」であることもありま
> すけど、「他の作業の部品として使える1つの構文に収めたい」であることもあ
> りますよね。今回のお題をshで for … done で済ませることには、そういう利
> 点もあると思うわけです。for … done 2> /tmp/hoge とか、for … done 2>&1
> | fuga とかできますからね。同じことがcshでできないのが、cshで基本的に辛
> いことの1つ。試しに手元で
なるほど.sh (zshも)の for ... は,
私は "one line" とは思っていなかった(";" で切った複数行ですよね)ので,
そもそもそういうのがでてきている時点で one line の議論になってない,
と思ったのですが,csh's foreach との比較においてはそういう意味も
あったんですね.
あまりにも当然と思って気づきませんでした.
(そういや,python だと インデントベースの構文なので
これもまた one line に出来ない言語ですね)
In article <0405162049...@hayabusa.ics.nara-wu.ac.jp>
ni...@ics.nara-wu.ac.jp writes:
>> one liner というのは "一行程度で済むだろ" という
>> ことを言うときに意味があるだけで普段1行に納めなければと
>> 必死に考える必要はないんじゃないでしょうか?
>
> ワンライナーにしたい時、その理由は「短く済ませたい」であることもありま
>すけど、「他の作業の部品として使える1つの構文に収めたい」であることもあ
>りますよね。今回のお題をshで for … done で済ませることには、そういう利
>点もあると思うわけです。for … done 2> /tmp/hoge とか、for … done 2>&1
>| fuga とかできますからね。同じことがcshでできないのが、cshで基本的に辛
>いことの1つ。試しに手元で
>
> % foreach i (a b c)
> foreach? ls $i
> foreach? end >& /tmp/hoge
>
>とかやってみるといかにも動作が怪しい…
そうです。他にも、シェルのヒストリや行編集機能を使うのに困ります。
今回の例も、実際には-resizeだけでなく、圧縮の-qualityやら、
-unasharp #x# とか、コンポジットで重ねたり…というのをパラメータを
変えて試行錯誤を繰り返すのですが、"foreach? "の中では前回のforeach
の内容をヒストリで呼び出して、編集して…というのが出来ないので。
sh(ash)でfor i in ...だと1 linerに出来る代わりに、$i:rを`basename ...`
とfork&execしないといけないのがカッタルくて。最近のデジカメは画素数が
多過ぎて、メモリが4GBくらい欲しくなる状況なので、少しでも効率良く
処理したいのでした。Fuji S2Proをdcrawで現像処理すると2千万画素に
なってしまう。
結果として、しらいさんの ${i%.*}で上手くいきました。感謝。
ま,脱線なんですけどね
<0405172346...@ns.kobe1995.net>の記事において
k...@kobe1995.netさんは書きました。
> そうです。他にも、シェルのヒストリや行編集機能を使うのに困ります。
そこで
<0405161056...@athena.ginganet.org>:
> (zsh なら history search でも複数行呼び返せます)
なのですよ.
本題ではない所への反応ですが、
<0405152317...@ns.kobe1995.net>の記事において
k...@kobe1995.netさんは書きました。
>デジカメ画像をまとめて変換したい時、
>
>% foreach i (*.jpg *.tif *.ppm)
>> convert -resize 750x500 $i $i:r.jpeg
>> end
複数のファイルに対してconvertを実行したい時は、mogrifyが便利です。
上記の例の場合、以下のようにします。
% mogrify -format jpeg -resize 750x500 *.jpg *.tif *.ppm
--
いわもと こういち(doda...@iwmt.org)
# なるようになれ、明日もイケイケ♪