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

レス数が950を超えています。1000を超えると書き込みができなくなります。
2020/11/24(火) 21:37:20.06ID:mbTiTj6s
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

前スレ: シェルスクリプト総合 その34
https://mevius.5ch.net/test/read.cgi/tech/1597990675/
2021/02/16(火) 21:26:41.96ID:ZcpmZlC/
シェルスクリプトではライブラリに相当するものは外部コマンド
2021/02/17(水) 02:52:50.69ID:1QKhelwr
そうよ
だからそれをブラックボックスとして扱うんだ
2021/02/17(水) 03:06:40.89ID:1QKhelwr
逆に全然枯れてないし俺環上等で本業のジョブ管理に役立つツールの話はもっとするべきだと思う
gnu parallelとかcoprocとか
2021/02/17(水) 03:13:44.11ID:PIB5BTik
gnu parallel使うぐらいなら自力実装したほうが楽だと思うわ
coprocは知ってるけど使う理由が見当たらない
2021/02/18(木) 09:30:54.83ID:oVgZds3b
シス管やデータサイエンティストとかのparallelヘビーユーザーではないんで効率は気にしてないけど、まあ変な文字の扱いが良くなったxargsとして便利だと思う
配るスクリプトならより普及してるxargsに置き換えた方が良いと思うけど
Perl実装だしいっそ同梱もありだと思うが
2021/02/18(木) 09:35:31.03ID:sRdwF113
ライセンス問題ないならね
2021/02/18(木) 09:43:20.87ID:qR1rH4Mn
だから並列処理ぐらい自分で実装しろよw
2021/02/18(木) 09:50:29.23ID:sRdwF113
バイオ系のやつが使ってるけどddで割って割り当てると朝には落ち出るとか
情報出身じゃないのでなんか変な事してる可能性はあるが
2021/02/18(木) 09:56:32.04ID:qR1rH4Mn
落ち出るのかソレは大変だな
2021/02/18(木) 09:56:32.14ID:TY4RxIDt
ローカルな並列処理はmakeでいいわ
途中で止めても簡単に再開できる
2021/02/18(木) 10:15:23.24ID:sRdwF113
>>905
ちゃんとスケジュールするの割と大変じゃね?
フォアグラウンドでジョブ走らせたから別端末からアタッチ、5秒毎にpsしてコアの稼働率グラフ作ったが、シヌソイドみたいに振動してる
局所性とのTradeオフがあるから単に分ければいい訳じゃない
一度アフィニティー設定したら終わりじゃなくて、スループット監視しながら、少なくともPID制御程度のロジックは書かなきゃならんだろ
2021/02/18(木) 11:02:26.51ID:sRdwF113
>>908
欲張ってパイプ繋げて失敗するのあるある
だからと言ってteeでディスクに中間結果流すとボトルネックになるし

でもバッファリングを乗っ取ってコマンド実行するstdbufを最近知って捗った
二段以上繋ぐと前後のバッファリングモードの影響をモロに受けてた、特にいつも両脇挟まれるteeが…
コマンドがputc連打してるのか、printfにちゃんと改行付けてるのか、と調べるよりオプション全部試した方が早いね
2021/02/18(木) 11:04:00.77ID:sRdwF113
make色々活用してる人居るよな
試してみる、ありがとう
2021/02/21(日) 04:01:15.96ID:N+CZPwAr
>>902
coproc cmdだけで対話的に様子見たり追加で入力送って修整したりできるのが便利じゃないかな
スクリプト向けじゃなくてインタラクティブ向け
2021/02/21(日) 12:39:32.90ID:kbkbRMiR
シェルスクリプトってPOSIX準拠っていうか/bin/shを使うと
/bin/shの実体がいろんなシェルの場合があるから互換性問題に悩まされるな

bashだけしかなければ互換性問題に悩まされることはないが
交換可能性がある(つまりbashと同等の別の実装)があると
互換性問題に悩まされて、いろんなシェルに対応しようとすると
保守や移植のコストが増大してしまうな
2021/02/21(日) 13:50:25.30ID:lCWmWEmE
いわゆるbashismはUbuntuが/bin/shをbashからdashに変えてシステムの数あるスクリプトが動かないがあるのに気づいたのが発端でしかない
dashに変えたのはただ軽いからという理由でしかないし、dashに対応もしくはシバンを適切にという対応が終わってしまってる
いろんなシェルに対応しようとするというニーズはきわめて限られてるか、ただの空想だろな
2021/02/21(日) 23:37:24.17ID:D6Gyi0vA
POSIX準拠すれば可搬性があるって言うけどあれ嘘なんだよね
そもそもシェルが完全にPOSIXに準拠してるわけじゃなくて互換性がないから
/bin/shを使ったとしても強制的にbashを使わされる環境ある

もちろん互換性がまったくないとは言わないよ
でもPythonのバージョンが違っていて動かなくなったって話と同じぐらい
別のシェルで動かなくなったって話がでる
2021/02/21(日) 23:47:08.70ID:O3wCOSqq
bashはアプリと思ってわざわざインストールするものと
思えばいいんじゃ
高機能でメモリ食う
たまたまshとかぶってる
2021/02/22(月) 00:00:35.75ID:04l4cBcD
>>915
可搬性はある
だが、Write once, run anywhere ってことは絶対ではない
もしかしたら問題が起こることもあるが、そんな場合でも修正はそうでないより少なくて済む
くらいなかな
2021/02/22(月) 00:29:31.87ID:Vv8+u1qd
POSIX準拠はOKだけど、POSIXコマンド縛りはアホなんだよな
例えば普通にgawkを使えばいい

gawkが提供する機能はPOSIXのawkの機能を超えていて一部互換性はないけど
gawkのソースコード自体はPOSIX準拠なんだから
どのOSでもインストールすれば使うことが出来る。

POSIXコマンド縛りは言い換えれば、インストールしない縛りでしかなくて
便利なものをインストールしないなら、開発コストが上がりますよという話

いろんな環境に移植されてる便利なコマンド(bashとかgawkとかgsedとか)を
インストールしてOKという前提に立てば、それらを使ったほうが
移植性を犠牲にすること無く開発コストは下げられる
2021/02/22(月) 00:33:24.80ID:Vv8+u1qd
あとPOSIXコマンド縛り(インストールなし縛り)にすれば20年後でも動くぜ
ただし開発コストが上がるから、弊社が作った独自コマンドをインストールしろよな!
っていうのは矛盾しまくりw

そんな独自コマンドをインストールするなら
各OSに広く移植されてるコマンドをインストールしたほうがいい
例えばrubyとかpythonとかな
2021/02/22(月) 00:43:28.47ID:CFqWxJ8Z
そう無闇に否定するのも無闇にPOSIX準拠を押し付けるのと変わりないな
2021/02/22(月) 00:49:11.43ID:Vv8+u1qd
むやみに否定してるんじゃなくて
理由を言いながら否定してるから問題ないでしょ?
2021/02/22(月) 00:50:52.03ID:CFqWxJ8Z
否定したいだけというのを無闇にという
2021/02/22(月) 00:53:08.85ID:Vv8+u1qd
https://dictionary.goo.ne.jp/word/%E7%84%A1%E9%97%87/

1 結果や是非を考えないで、いちずに物事をすること。また、そのさま。「―な約束はしない方がよい」
2 物事の状態が度を超えて甚だしいさま。ひどい。「―に金がかかる」

どちらにも当てはまらない
2021/02/22(月) 00:55:37.40ID:CFqWxJ8Z
結果や是非を考えないで、いちずに物事をすること
に当たるだろうwわかりやすくいうと非しか考えてないだな
2021/02/22(月) 00:56:39.64ID:Vv8+u1qd
結果や是非を述べて否定してるだろ?
2021/02/22(月) 00:58:09.47ID:CFqWxJ8Z
是非があるのに非しか言ってないという自覚がないんじゃ話にならない
その読めなさは
2021/02/22(月) 00:58:51.57ID:Vv8+u1qd
もう一回述べるか?

POSIXコマンド縛りをしないほうが
高い移植性に加えて開発コストの削減を実現できるのだから
POSIXコマンド縛りはアホ
2021/02/22(月) 01:00:10.74ID:CFqWxJ8Z
無闇だなww
話が通じないのはわかった
2021/02/22(月) 01:00:15.42ID:Vv8+u1qd
>>926
是非を考えるっていうのは、
是と非の両方を言うって意味じゃないぞw

是と非の両方を「考える」という意味だ
考えた結果、POSIXコマンド縛りはアホというのが結論だ
2021/02/22(月) 01:01:23.37ID:CFqWxJ8Z
POSIX準拠には利点もあるし欠点もある
適時もしくは各々の好みで好きにしろってだけだな
2021/02/22(月) 01:02:56.43ID:Vv8+u1qd
POSIX準拠じゃなくてPOSIXコマンド縛りなw
POSIX準拠だとgawkのソースコードもPOSIXに準拠してるだろ

じゃあお前がPOSIXコマンド縛りの是非を考えて
是となる部分を言えばいいじゃん
何も言ってないのはお前の方だぞ
2021/02/22(月) 01:04:37.72ID:CFqWxJ8Z
>>829
わかった?
わからんだろうけど。今だに是非を自分の都合の良い視点でしか理解できないみたいだからなあ
言いたいこと言ったのでおしまいおしまい

>>831
やっぱりわからんかったか。てかいつもの話題変えるのか
POSIX準拠の利点とそう変わらないだろうに。わからんのね
2021/02/22(月) 01:06:46.96ID:Vv8+u1qd
いいから早くPOSIXコマンド縛りの
是の部分を言えよw
2021/02/22(月) 01:07:15.01ID:Vv8+u1qd
918 名前:デフォルトの名無しさん[sage] 投稿日:2021/02/22(月) 00:29:31.87 ID:Vv8+u1qd [1/9]
POSIX準拠はOKだけど、POSIXコマンド縛りはアホなんだよな
例えば普通にgawkを使えばいい
2021/02/22(月) 01:08:23.33ID:CFqWxJ8Z
>POSIX準拠の利点とそう変わらない
これがわからないんだったら語る資格はない
俺はあんたのママではないぞ
もう全て語ってるからあとはあんた次第、頑張れ
2021/02/22(月) 01:13:01.92ID:Vv8+u1qd
「POSIXコマンド縛りの是の部分を言え」

という言葉の意味がわかりませんか?
2021/02/22(月) 01:23:33.23ID:Vv8+u1qd
POSIXにはPOSIX socketやPOSIX スレッドなど多くのAPIを含んでいるが
POSIXコマンドはPOSIX全体のごく一部しか利用しておらず
POSIXコマンド縛り=POSIXの一部しか使えない制限 という意味でもある

POSIX(C言語中心のOSとのインターフェース)は必要だから作っれたけだが
POSIXの一部しか使えないPOSIXは、必要なものが使えないということを意味する
2021/02/22(月) 01:25:24.66ID:Vv8+u1qd
訂正

POSIX(C言語中心のOSとのインターフェース)は必要だから作られたわけだが
POSIXの一部しか使えないPOSIXコマンドは、必要なものが使えないということを意味する
2021/02/22(月) 01:30:49.08ID:hF/C7ALs
POSIX準拠にはPOSIXで規定されたコマンドおよびコマンドのオプションだけを利用することを規定してるのもあるな
2021/02/22(月) 02:19:05.57ID:Vv8+u1qd
> 規定してるのもあるな

なんの話してるんだよw

そんなものないって言ったら
あるって言って証拠出してくれるんだよな?
2021/02/22(月) 02:37:55.58ID:96ZdxkXC
キチガイがまた暴れてる
2021/02/22(月) 03:05:20.65ID:pc9xVD8t
gawkやRubyなんかを使うくらいならPerlを使うべき。
異論の余地はない。
2021/02/22(月) 04:19:52.69ID:Ti3ZPwKy
簡単なシェルスクリプトならググらず書けるようになった新参者だけど、
オプションの法則に統一性ないのが一番解せないわ
ショートオプションはハイフンの後が一文字っていうけどfindの-typeからして守ってないしさ
wgetにも-nvがあるけど既に形骸化してんの?
2021/02/22(月) 05:47:22.05ID:Vv8+u1qd
>>942
適切なツールを使いましょうってだけ
コマンドを組み合わせて使うなら
シェルスクリプトが一番適切
他のどの言語もコマンドを組み合わせて使うのには適していない

>>943
一部のコマンドに変なオプションがあるだけだよ
開発者がよく知らずに実装してしまっただけ
2021/02/22(月) 12:30:54.33ID:CSMFeOjN
メモリが安価になったという意味で時代は変わったんだから
組込含めてdashを選ぶ必要性はないでしょ

POSIX準拠なんてかつては大衆芸能だったが今では伝統芸能で
保存対象になるつつある歌舞伎みたいなもんだよ
2021/02/22(月) 13:38:19.02ID:DHZuB9bv
>>945
文句はディストリ屋に言ってくれ
Debian/Ubuntuはdashを選んでるし
Alpineはbusyboxを選んでるんだ
嫌でもdashやbusyboxを使わないといけないんだだよ
2021/02/22(月) 13:42:31.76ID:pc9xVD8t
>>943
ロングオプションなんかぐにゅの後出しみたいなもんやし、互換性のほうが重要やし、しゃあない。
統一性を期待するもんでも、守る守らないを議論するもんでもない。

コマンドラインの世界は、ただ混沌を受け入れるのみ。。。
2021/02/22(月) 14:06:32.02ID:G00ce5gO
ロングオプションっていうかハイフン2個で始まるオプションに関しては統一されてる
変なオプションがあるのはハイフン1個で始まるやつ

もし今からオプションを規格化するとしたら、俺なら
-で始まるのは一文字のオプションだけ。オプションの引数はなし
--で始まるのはロングオプションで、オプションの引数はあって無くてもよいが
ある場合は --long=value みたいに必ずハイフンでつなげること
--long value形式は無しってルールにするだろうな

そうしないとオプションの解析は面倒くさすぎる
2021/02/22(月) 14:28:14.65ID:7dAnGrvt
2020年代にもなってオプション解析を自前でやらなきゃいけないという時代錯誤感よ
2021/02/22(月) 14:49:21.32ID:G00ce5gO
自分でやりたくないならライブラリでも使えば?
2021/02/22(月) 14:53:50.85ID:pc9xVD8t
>>948
今さら「俺」ルールなんかいらんわ。w

https://linuxjm.osdn.jp/html/LDP_man-pages/man3/getopt.3.html

もっとも、これを使うも使わないも、個々の自由。。。
2021/02/22(月) 19:20:10.80ID:G00ce5gO
>>951
俺ルールじゃなくて、既存のルールのサブセットだけどな
まあ知らない人にとっては特殊なルールに見えるんだろうね
2021/02/22(月) 21:20:04.93ID:CSMFeOjN
>>946
シェバンに/bin/bash、 debian/control に Depends: bash って書くがよい
2021/02/22(月) 21:48:09.71ID:G30bzgiW
何か作業しようとするときにログインがbashかそうでないかは重要
2021/02/22(月) 22:36:34.00ID:pc9xVD8t
>>952
それが「俺ルール」なんだっつーの。
アホなの?w
2021/02/22(月) 22:47:21.38ID:DTTWlGhR
>>952
すでにデファクトスタンダードになってるだろう、>>951のがあるんだから「俺なら」ってのはいらないって話じゃないの
シェルスクリプト用には>>915を用いたのがになるだろうし
「俺なら」がGNUとBSDの違い(があるなら)を勘案してのかと思ったら、解析は面倒くさすぎるって言ってるから違うっぽいかな
2021/02/22(月) 22:54:09.71ID:G00ce5gO
>>951はC言語のインターフェースじゃんw
ロングオプションにも対応してないし
2021/02/22(月) 23:05:43.02ID:DTTWlGhR
よく読め。色々よく読め
2021/02/22(月) 23:05:58.69ID:UEjjQNjA
シェルで標準的に使われてるのってgetoptかgetoptsじゃないの?
どっちも微妙だけど
2021/02/22(月) 23:33:06.17ID:gzMW+qbC
getoptはPOSIX準拠じゃないうえにMacで挙動が違うしな
2021/02/24(水) 21:20:00.07ID:5t0N0rwK
現行ディレクトリ直下にあるファイルを日付順に処理したい。
dateの-dオプションと'%s'書式を使ったやりかた
(-dオプションにlsの出力の日付欄を渡して,%s書式でsortに回しやすい形式に変換する)
は思い付くのだが,できればもうちょっと汎用性のあるやりかたでやりたい。
それこそAlpine Linuxでもできるようなやりかた,せめてSUS準拠くらいで。
2021/02/24(水) 21:42:59.94ID:MoKQog7D
lsでソート出力すればいいじゃん
2021/02/24(水) 22:44:33.75ID:2EpFMX6w
Alpine LinuxだのSUS準拠だの言ってるくせに...
2021/02/25(木) 00:58:03.42ID:YHeeVxEb
>>962
lsで日付順ってできたっけ。
しかもaccessとかmodifyとか色々あるけど。
2021/02/25(木) 01:17:21.10ID:/S7F+Ehi
最近はマニュアル読まないで人に聞く豆腐が増えたよな
2021/02/25(木) 02:03:25.10ID:4mFpqJjx
Alpine LinuxだのSUS準拠だの言ってるくせにこのザマとは
2021/02/25(木) 02:26:19.35ID:4mFpqJjx
Unix Version 1 からあるな
逆順は System III にはあるな
興味があって探してみたらあるもんだな
2021/02/25(木) 02:45:06.54ID:4mFpqJjx
逆順は Unix Version 4 からだな
本当に探せばあるもんだなぁ
2021/02/25(木) 08:48:17.15ID:d+c5dEfq
posix ls でググってから質問しろよ
2021/02/25(木) 09:20:54.75ID:ZyJLXTlk
次スレ

シェルスクリプト総合 その36
https://mevius.5ch.net/test/read.cgi/tech/1614212414/
971デフォルトの名無しさん
垢版 |
2021/02/25(木) 12:34:26.08ID:lhusjOX+
ls lt(r)じゃ駄目なのか
2021/02/25(木) 14:28:26.85ID:YHeeVxEb
だれも**なぜか**具体的なこと教えていないので私が。
> -c
> Use time of last modification of the file status information (see XBD <sys/stat.h>) instead of last modification of the file itself for sorting ( -t) or writing (-l).
というわけでPOSIXに従うならls -ct1とかで一覧表示して,
xargs(1)で処理するのはどうかな。

まあ改行を含むファイル名には対処できないが。
2021/02/25(木) 14:29:24.68ID:o6/HxSuB
lいらなくね
2021/02/25(木) 14:31:49.73ID:o6/HxSuB
わざとなのかなんなのか
2021/02/25(木) 14:52:14.25ID:AentelGa
壮大な自作自演
2021/02/25(木) 15:20:30.62ID:o6/HxSuB
ぽいな。マジっぽいしな
2021/02/25(木) 15:39:02.71ID:YHeeVxEb
>>973
え,lなんてどこにある?
2021/02/25(木) 15:46:39.14ID:v3k9zwrF
自作自演でなくても自意識過剰なやつw
2021/02/25(木) 17:28:29.42ID:/S7F+Ehi
Q: 現行ディレクトリ直下にあるファイルを日付順に処理したい。

A: lsでソート出力すればいいじゃん

人にものを教えてもらった時は「ありがとうございました」だろ
2021/02/25(木) 18:29:23.70ID:Le6oxEMx
利奈みんとbotっていい加減停止してほしい
過去の質の悪い情報を、何度も繰り返しツイートすんな
2021/02/26(金) 04:40:12.26ID:pzzMEm8u
Q: 現行ディレクトリ直下にあるファイルを日付順に処理したい。
A: ls -ct1
2021/02/26(金) 04:55:54.66ID:hDnFyj4c
知らなかったくせにプライドだけはいっちょ前だな
謙虚さが無いやつは成長しない
2021/02/26(金) 11:37:38.92ID:pzzMEm8u
えぇ……。
2021/02/26(金) 12:54:01.69ID:X0njcRoR
>>970
こんな殺伐としたスレでもちゃんと立ててくれる人がいる、おつおつ
985デフォルトの名無しさん
垢版 |
2021/02/26(金) 13:35:11.54ID:XgSzjw4v
>>982
謙虚さがないから人の言っていることがわからないのか
単に馬鹿だから色々わからなく人との接し方もわからないのか
どうも後者っぽいな。リアル社会でも人と接するのが難しいレベルな
2021/02/26(金) 18:46:13.32ID:7vDu415h
>>985
いや、俺が教えろっつったら教えろよ
学生時代てめえみたいな陰キャを脅してノート写して貰ってた感じで俺は質問したんだぞ
あ?
2021/02/26(金) 19:53:37.61ID:R5L7j7Jr
それおもしろいとでも思って書いたの?
2021/02/26(金) 20:44:14.99ID:25Vyny5k
>>987
イチビリにかまうな。
かまうのなら、おもしろく。
989デフォルトの名無しさん
垢版 |
2021/02/26(金) 21:39:37.76ID:IMLGfwsq
#!/bin/bash
# >>162
# 日本で生まれたけど国籍は日本ではない外国人が使う「通名」作成スクリプト
JUNG=1
while [ $JUNG -lt 21 ]
do
echo "$JUNG回目"
(( JUNG ++ ))
NAME=$( shuf -e 村 崎 本 田 山 玉 子 -n 1 )
if [ "$NAME" = "玉" ]
then tput setaf 3 && echo "金$NAME"; tput sgr0
else echo "金$NAME"
fi
sleep 3
done
2021/02/26(金) 21:40:37.08ID:9y4w8ED+
この後続きを作ってください
2021/02/28(日) 20:31:34.11ID:pff3D6mj
切実な悩みがあります。
2021/02/28(日) 20:32:26.73ID:pff3D6mj
生理が来ないのですがどうしたら良いでしょうか?
2021/02/28(日) 22:15:05.12ID:BY9ZMr+Z
bash
変数sに文字列を代入したいのですが、文字列が長いので複数行に分けて書く方法を教えてください


s="a"
\ "b"
\ "c"

これはエラーになりますがこんな感じで複数行に分けて、sにはabcと1行分として代入されているようにしたいです
2021/02/28(日) 23:11:46.70ID:sNDsGIAp
bash なら...最後の2行がちょっと残念感あるけど
s=$(cat <<EOF
a
b
c
EOF
)
2021/02/28(日) 23:16:50.23ID:sNDsGIAp
3行じゃなくて1行っていみなら最終行以外の末尾にバックスラッシュで
s=$(cat <<EOF
a\
b\
c
EOF
)
2021/02/28(日) 23:33:09.08ID:uDfQ2boM
>>993
その場合でも単に \ の位置が間違い。1文を行変える場合は \ は行頭じゃなく行末
2021/03/01(月) 00:41:19.60ID:+i2FYD3a
ヒアドキュメント使わなくても行けるんでないかい?
2021/03/01(月) 00:43:41.99ID:+i2FYD3a
s="a\
> b\
> c"

echo $s
abc
2021/03/01(月) 00:48:24.22ID:p97sWF/c
$ l\
> s
ってしても、単に ls っていう
シンプルの極み、いつでもどこでも改行したければどうぞって感じ
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況