シェルスクリプト総合 その29

!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。

スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

740デフォルトの名無しさん (ワッチョイ 638a-OaPJ)2018/11/28(水) 09:03:44.81ID:6Gc6vrWs0
NFS特有のエラーがあるとは思いもしなかったりするんだよな。
挙げ句の果てにファイルロックがうまく動かないとか言い出す。

741デフォルトの名無しさん (ワッチョイ d398-/G1A)2018/11/28(水) 12:41:41.17ID:V/2Czdkr0
所詮、ネットワークを介したファイル共有だからね
ディスクはアクセスできない = 故障 と考えていいけど
ネットワークは一時的な切断やエラー、大きな遅延が想定される
だからリトライやタイムアウトといった処理を行う

通常のディスクアクセスを行うコードは、こういった
ネットワーク特有の事象について考慮されてない場合が多い

だから(NFSの設定により)ネットワーク通信が正常に完了
できるまで待ち続ける(プログラムはタイムアウトしないのでフリーズした状態)
もしくは一時的な接続不良でエラー終了したりする

742デフォルトの名無しさん (ワッチョイ c364-m15j)2018/11/28(水) 20:10:37.32ID:N04UITTm0
シェルスクリプトの関数の名前の直後の括弧って あれはshに
「これは関数の名前ですよ」って教えるためのものっていう認識でOK?
foo() {
echo foo
}
↑こういうのの「()」。なんかCやらと同じように引数の指定とかができたらいいのにと
初心者ながら思ったんだけど そういう訳でもなさそうだし。

えっ

744デフォルトの名無しさん (アウアウウー Sa27-ml8p)2018/11/28(水) 20:22:26.38ID:wHjpMIAFa
引数は $1, $2 とかで受け取る。
呼び出す側は普通のコマンド実行のように書く。

745デフォルトの名無しさん (ブーイモ MMe7-X8Q6)2018/11/28(水) 20:31:09.87ID:Vqd4vFOqM
>>742
ともかく ( とか、普通使わない文字を挟んでおかないと、
foo {
だとただの引数になっちゃうから。

746デフォルトの名無しさん (ワッチョイ db64-VZvV)2018/11/29(木) 13:01:23.15ID:Msn7clch0
>>745
なるほど。
「(」はサブシェルの開始だと思ってたけど
そうでもないんだね……。
シェルの構文ってちょっと難しいことすると途端に複雑怪奇になるな(俺の頭の問題かも知れんがw)
対話的な利用を前提にした設計だから仕方無いとは言え、Pythonみたいに対話状態でもバッチ状態でも扱いやすくできなかったのかな。

747デフォルトの名無しさん (ワッチョイ 5f98-r3MB)2018/11/29(木) 13:04:56.47ID:lCOis1qI0
小学生が政治語ってるのを聞いてる気分だ

748デフォルトの名無しさん (ワッチョイ db64-VZvV)2018/11/29(木) 14:34:26.85ID:Msn7clch0
「どうして解散するですか?」

749デフォルトの名無しさん (ワッチョイ 9ab3-uhYH)2018/11/29(木) 15:57:37.21ID:QFUJhwUI0
Python を使えばいいんじゃないかな

750デフォルトの名無しさん (ワッチョイ 5f98-r3MB)2018/11/29(木) 16:07:41.49ID:lCOis1qI0
Pythonは構文が複雑怪奇すぎる
かっこは関数呼び出しの引数の開始だと思っていたのに
関数を定義するときにも使うらしい

とかいうだろうな

751デフォルトの名無しさん (アメ MMff-egAi)2018/11/29(木) 16:11:55.77ID:qd4rCcG0M
wwwww

752デフォルトの名無しさん (アウアウウー Sa47-2q9Y)2018/11/29(木) 19:19:50.88ID:8tueZiBHa
そしてあらゆる言語が気に入らず、新たな言語がまた一つ作られるのであった。

753デフォルトの名無しさん (アメ MMff-egAi)2018/11/29(木) 19:39:24.56ID:qd4rCcG0M
− 世界には1,400もの競合するプログラミング言語があった −

「1,400だって!? バカげてる! み全ての用途をうまくこなす統一言語の開発が必要だ!」
「そのとおりだわ!」

やがて…

− 世界には1,401もの競合するプログラミング言語があった −

https://imgs.xkcd.com/comics/standards.png

754デフォルトの名無しさん (ワッチョイ 838a-qnZY)2018/11/29(木) 20:23:55.28ID:DaeVxseX0
>>753
男女の仲違いでもう2個増えるんだろ?

新しいのを作るんじゃなくて既存のを潰さないとな

756デフォルトの名無しさん (ワッチョイ 9ad2-uhYH)2018/11/29(木) 20:45:38.03ID:C+POVdju0
(中二なんかな・・・)

757デフォルトの名無しさん (ワッチョイ db64-VZvV)2018/11/29(木) 21:43:22.71ID:Msn7clch0
中二だろうがなんだろうが良いソフトウェアを作ってくれればそれでいい。

758デフォルトの名無しさん (ワッチョイ 9ad2-uhYH)2018/11/29(木) 22:17:13.73ID:C+POVdju0
>>757
そおやってすぐ他人に頼ろうとするからいつまでたってもクズなんやおまえ

759デフォルトの名無しさん (ワッチョイ db64-VZvV)2018/11/30(金) 01:40:39.33ID:ZZJKHSVT0
ワロタ

760デフォルトの名無しさん (ワッチョイ b69f-BnCY)2018/11/30(金) 08:21:31.28ID:ShAjvwZw0
目的を見失ってるよね
道具であるはずの言語そのものを作り出すってのは
だからって、なんでもアセンブラってわけにもいかないが

761デフォルトの名無しさん (アウアウウー Sa47-2q9Y)2018/11/30(金) 09:15:03.33ID:vx8Iixcxa
タイヤは永遠に発明され続ける。

(車輪じゃね?)

763デフォルトの名無しさん (アウアウウー Sa47-2q9Y)2018/11/30(金) 09:38:04.79ID:vx8Iixcxa
あ、そうか。まあどっちでもいいが。

764デフォルトの名無しさん (ワッチョイ 838a-qnZY)2018/11/30(金) 09:40:18.92ID:5+dLrTA80
現代だって刀鍛冶とかいるじゃん

765デフォルトの名無しさん (ワッチョイ 2398-r3MB)2018/11/30(金) 09:53:55.88ID:pEng5xY00
発明、改良と生産は違う

タイヤ、車輪で行われてるのは、発明ではなくて生産
発明こそ行われなくとも、小規模な改良は続いている

刀鍛冶も生産だろう。改良している人がいるのかは知らんが。

様々なデザインの洋服など、改良しているわけじゃないが
新しいものを作るっていうのはなんというべきだろうね
生産なんだが古い、新しいという概念はある。
だけど好みの違いでしか無いので改良とも違う

多くのものは改良されて続けているが、改良するためには
まず生産能力が必要。同じものを作れなければ改良はできないだろう

766デフォルトの名無しさん (ワッチョイ 2398-r3MB)2018/11/30(金) 10:02:51.33ID:pEng5xY00
今の言語は最高とまでは言えない。
いつしか高級言語への進化が止まって、
単なる改良しか行われなくなってしまった

高級言語を超える、超高級言語が必要
俺にはそのアイデアがあるが、なにぶん能力がないw
目的は、超高級言語の開発だが、そのためには
まず言語が作れるようにならないといけないだろうな


ちなみに超高級言語のアイデアとは、現在設計書として
自然文で書いてあるものをプログラム言語として
記述可能にしようというもの。今の言語はモジュールやクラス構造までは
プログラム言語で記述できるが、プロジェクト全体の構造までは記述できない

例えば、Railsなどのフレームワークのmodelsやcontrollersといったディレクトリ構造は
プロジェクトで決まっているにもかからわず、ドキュメントで書くしかない。
だからmodelsに置くべきものをcontrollersにおいたり、modelsではやっては
いけないような処理をやることが出来てしまう。コンパイルエラーにも実行時エラーにもならない

3行で

768デフォルトの名無しさん (アウアウウー Sa47-2q9Y)2018/11/30(金) 12:29:51.33ID:vx8Iixcxa

高級言語が
必要

769デフォルトの名無しさん (オッペケ Sr3b-xhs3)2018/11/30(金) 12:30:21.78ID:+/lt4tPpr
タイヤと
車輪は
同じもの

770デフォルトの名無しさん (アウアウウー Sa47-2q9Y)2018/11/30(金) 12:47:31.33ID:vx8Iixcxa


止めよう

771デフォルトの名無しさん (ワッチョイ 9ab3-uhYH)2018/11/30(金) 13:04:32.40ID:iEacaeBh0
実は
CASEツール
です

772デフォルトの名無しさん (ワッチョイ db64-VZvV)2018/11/30(金) 15:46:57.55ID:ZZJKHSVT0
それずっと前にKnuthが実践してた文芸作譜と同じじゃね?
そしてアレは超絶面倒な作業。

773 ◆QZaw55cn4c (ワッチョイ ba60-4R1R)2018/11/30(金) 23:23:00.81ID:MkfLpznc0
>>766
>高級言語を超える、超高級言語が必要
ちょっとワクワクしてしまいましたことを、ここに告白いたします

774デフォルトの名無しさん (ブーイモ MM26-6Zjp)2018/12/01(土) 01:32:04.95ID:3WCvWAVjM
言語に縛られてるから駄目なんだよ

とか言ってみる

775デフォルトの名無しさん (ワッチョイ 9ab3-uhYH)2018/12/01(土) 02:53:09.42ID:7CoKqMj50
「縛られるのが好き」ってプログラマ、結構多いんですよ

とか言ってみる

776デフォルトの名無しさん (オッペケ Sr3b-xhs3)2018/12/01(土) 07:47:52.11ID:U3mK8vlPr
下ネタはもっと堂々と言わな逆にいやらしく感じるで

777デフォルトの名無しさん (ワッチョイ be33-4HQR)2018/12/01(土) 10:18:14.73ID:Ly5JuDld0
全部縛ってヤってなんぼだと思うんです。

とか言ってみる。

778デフォルトの名無しさん (ワッチョイ 2398-r3MB)2018/12/01(土) 10:47:37.07ID:Km1sjdO20
お前らくだらない話ばっかり盛り上がるな

779デフォルトの名無しさん (オッペケ Sr3b-xhs3)2018/12/01(土) 12:34:48.97ID:U3mK8vlPr
さほど盛り上がっとらんやろw
人と関われよw

780デフォルトの名無しさん (ワッチョイ 9a1d-C0zt)2018/12/02(日) 02:44:47.66ID:+c90NOTB0
まあ 使える言語は多いほうが手広いわな

781デフォルトの名無しさん (オッペケ Sr3b-OA46)2018/12/02(日) 17:31:01.53ID:OYZHkh2Or
>>776
知ってる一つの言語でなんでもしようとしちゃう
っていう意味かとおもてた

782デフォルトの名無しさん (ワッチョイ 76e7-97PR)2018/12/02(日) 18:30:06.74ID:RWr+AACs0
自由に安くやってが最も困る。

783デフォルトの名無しさん (ワッチョイ db64-VZvV)2018/12/04(火) 18:22:49.34ID:VVlGsdy50
find(1)ユーティリティの速度に関しての疑問なんだけど
https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAO
ここに
「検査 -name を -type の前に置いているのは、すべてのファイルに対して stat(2) システムコールを行う無駄を省くためである。」
とある。これは「find(1)は-nameのほうが-typeより処理速度が速い」ということを言っているよね。
実のところ手元ではfindが優秀すぎるのか知らんが-nameを-typeより前に書いても後に書いても速度に変化はなかった。
が 基本的にはfindで複数の条件を指定するときは-nameを先頭あたりに置いたほうがいいのかな。
findのソースコードを見てないので推測になるが-permや-newerもstat(2)を実行してるぽいので-nameより遅い筈。

784デフォルトの名無しさん (ワッチョイ 83b3-C+j/)2018/12/04(火) 18:56:51.46ID:bTQB60BC0
statが遅いと言うのも幻想

785デフォルトの名無しさん (ブーイモ MMba-X2R9)2018/12/04(火) 19:07:42.58ID:HBlgjyZNM
最近のファイルシステムはreaddirでタイプが取得できるよ

786デフォルトの名無しさん (ワッチョイ 938a-+wPc)2018/12/06(木) 00:12:43.36ID:pQ33EIUW0
>>783
http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE
-Olevel
1
これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。

787デフォルトの名無しさん (ワッチョイ 9164-5svG)2018/12/06(木) 09:10:09.33ID:cC0kDT7D0
>>786
へえ!そうなんだ。
ってことはGNU/Linux使ってる限りは順番はどうでもいいんだな
ありがとう。

788デフォルトの名無しさん (ワッチョイ 9164-5svG)2018/12/06(木) 15:10:37.27ID:cC0kDT7D0
引数に一律にコマンドで操作を施したあと、それらをもう一度引数として扱うにはどうすればいいかな
$ a.sh arg1 arg2 arg3
みたいに起動されたとして$1,2,3にはarg1,2,3が入ってる。
これを$(echo $1 | tr '[:lower:]' '[:upper:]')みたいなコマンド置換を使ってARG1,2,3みたいに変形させる。
問題はこの後にa.shの中の別のコマンドに
somecmd "$@"
のような形でARG1,2,3を与えたいってこと。
while [ $# -eq 0 ]とshiftを使う普通のやりかたではループを抜けた後に$@が空になってしまう。
どうにかして引数の構造を維持したいんだけども……。

789デフォルトの名無しさん (ワッチョイ e1e1-eDAb)2018/12/06(木) 16:06:47.11ID:59uVculK0
>>788
eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))

790デフォルトの名無しさん (ワッチョイ 9164-5svG)2018/12/06(木) 16:38:57.36ID:cC0kDT7D0
>>789
ありがとう。

新着レスの表示
レスを投稿する