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

■ このスレッドは過去ログ倉庫に格納されています
2021/02/25(木) 09:20:14.64ID:ZyJLXTlk
シェルスクリプトに関する総合スレッドです。

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

前スレ: シェルスクリプト総合 その35
https://mevius.5ch.net/test/read.cgi/tech/1606221440/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】9
https://mao.5ch.net/test/read.cgi/linux/1607589861/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
575デフォルトの名無しさん
垢版 |
2021/05/12(水) 02:58:36.12ID:w4TAZAbA
>>573
読んで出直したが何も変わらない。

お前がやってるその行為は
「DebianやUbuntuで書いてることを読んだら俺が正しいことが証明された。はい論破」
と言ってるのと何も変わらない

論破合戦がしたいなら、お前が書いてることを引用して
お前が言いたいことを主張しろ
576デフォルトの名無しさん
垢版 |
2021/05/12(水) 02:59:27.57ID:w4TAZAbA
>>574
DebianやUbuntuには#!/bin/shを#!/bin/dashにしろとは書かれていない
577デフォルトの名無しさん
垢版 |
2021/05/12(水) 03:00:17.09ID:w4TAZAbA
あ、俺に言われてるのと勘違いしたwww

ID:1N3VwigTに言ってるのか
2021/05/12(水) 03:01:24.77ID:QztuhdBY
お前に言ってねーよ
読めないいつものお前だろ?流石だな
わざと絡まないようにしてたのにwほんとお前はただただめんどくせえやつだな
2021/05/12(水) 03:02:31.85ID:QztuhdBY
トンチンカンなことを並べてるしwww俺はそんなこと言ってねえのに
つくづくお前ってやつはただただただただめんどくさいだけのやつだなあ
2021/05/12(水) 03:14:44.73ID:QztuhdBY
アホはほっておいて、まためんどくさいから最初と最後のへ

>>542
>dash を使わざるを得ないような極小環境
イミフ
/bin/sh が dash なLinuxディストリは普通にあるし。なんでそんな環境をと言い出すのかイミフすぎ

>>565
/bin/sh が POSIX shell であることが期待されているのは昔からだろう。どのくらい昔かは知らんがw
fileで #!/bin/sh なファイルがなんて出るか見てみ。fileのデータベースは公衆でメンテされていてのでソレなんだから大多数がそれを期待しているのは間違いないだろう
bashismなのが逸脱してるのとは別の話。bashismな #!/bin/sh は #!/bin/sh とするのは間違いだから #!/bin/bash に正しなさいというのが現在

あとdashにもなんかトンチンカンな難癖付けてるようだが、bashismと問題にしてるDebianがPOSIXから逸脱不足してるものを作るわけがないというのは常識的にわかるだろうにという

まあ、DebianやUbuntuで書いてあることを読んで出直せw
2021/05/12(水) 03:18:24.36ID:rVJ0Zld2
> bashismな #!/bin/sh は #!/bin/sh とするのは間違いだから #!/bin/bash に正しなさいというのが現在

その理屈だと dashism な#!/bin/shは#!/bin/dashにしなさいってことになるだろw
2021/05/12(水) 03:20:25.42ID:QztuhdBY
>>581
アホなレスすんなよwわざとだろ?w
2021/05/12(水) 03:22:04.92ID:rVJ0Zld2
はぁ?localとかPOSIXにないんだからdashismだろwww
2021/05/12(水) 03:38:40.82ID:QztuhdBY
バグじゃなのw ashのが残ってるとか
そういうのはdashismだからもちろん #!/bin/dash にすべきだろうな
そんなの使わないのが多いから見過ごされていても不思議ではないかな
他にもあるんだったらDebianに持って行った方がいいぞ。自ら ism を否定してるとこなんだから
2021/05/12(水) 03:54:18.34ID:QztuhdBY
いや、Debianの明確な仕様だな。どこぞのスクリプトでも使ってるのほぼ見たことないから>>584って言ったけど、すまん

Debianがシェルスクリプト仕様として、POSIXから拡張した数少ない(5つ)うちの一つだな
その5つをあえて使うなら #!/bin/dash の方がいいかもね。Debianではその5つを使うなら #!/bin/sh でもいいとは言ってるけど(他のシェルでも対応してるからとかかな??)
2021/05/12(水) 08:14:16.52ID:rVJ0Zld2
dashismは5つもあるのかよw
じゃあだめだな。#!/bin/dashにしないといかんなwww
2021/05/12(水) 09:46:38.57ID:1N3VwigT
>>580
> イミフ
> /bin/sh が dash なLinuxディストリは普通にあるし。なんでそんな環境をと言い出すのかイミフすぎ

その返しならイミフだろうなぁ
bash さえも入れたくない/Busyboxだけで極力少ないRAM/ROMで動作させる環境であって
PCやサーバではないよ

RAM が限られている環境だと1つでも bash スクリプトがあると dash と bash 両方で RAM を食って
しまうから、それならば /bin/sh を bash にしてしまった方がまだ軽いってなってしまう

そうなってくると「bash で書きたい人はシェバンに #!/bin/bash って書けば良いじゃん」で済まないわけ
で全部 dash 互換で書く必要がでてくる

シェバンに #!/bin/sh って書いてある他人が書いたスクリプトが bash 互換なのか dash 互換なのか
明示されていない以上、#!/bin/sh=dash 環境に移植する場合は書き直すか動作検証する必要がある

動作検証が終わったら #!/bin/dash って書きかえないと、そのファイルを引き継いだ人がまた
同じ作業を繰り返すことになるって考えよ
2021/05/12(水) 11:42:09.27ID:UQubkL4X
>>586
何がもわからんくせに調べもしないくせに
ismの何が問題かもわからんくせに
自分が納得できないだけかよ、能書き小僧煩い
まあお前が納得できなくてそうするんだったら勝手にしてもいいぞ、その程度のことなんだろし
2021/05/12(水) 11:49:29.28ID:UQubkL4X
>>587
ん?
>極論だが古典的なシステムでは /bin/sh は POSIX 準拠でさえないんだから
に対して、
>今時の /bin/sh の最低限度がPOSIXなんだよ
に対して、
>bash じゃなくて dash を使わざるを得ないような極小環境で現役なものはどこにあるの?
だよ?流れからイミフだな
で、今度は
>bash さえも入れたくない/Busyboxだけで極力少ないRAM/ROMで動作させる環境であって
と言い出すの?イミフのイミフだぞ(その後の延々としたのもw)

現在は、/bin/sh は POSIX shell というのが大勢、dash はそれになり得るというのが大勢
違うとお前ら個々が思うのは勝手にどうぞだが、それを理解しろと他人に求めるのは筋違いだな
そんなに自説に自信があるならDebianやfileのメーリングリストで問題提起してみ?w
2021/05/12(水) 12:38:28.94ID:1N3VwigT
>>589
お前は「/bin/sh = dash が正義」って言いたいだけで
碌に文章も読まずに喧嘩さえ売れればOKな返しをしてるだけ

もっとちゃんと読め
話にならん
2021/05/12(水) 13:04:20.69ID:UQubkL4X
>>590
何を言い出してるんだか
現在最も近い=最適なのがdashというだけだぞ。開発元がそういう姿勢なんだからそういう方向になるようにはするだろうという当たり前に読めそうなもんだが

喧嘩とかお前にそのまま返すわ。お前が何言いたいのかわからんぞ?
>>589でなんでそう返すのかさっぱだわ。喧嘩wに負けたくないだけか?w

しっかし、柔軟性が無いな。その「単なる自説」の拘りぶりは。なんとか原理主義者に通じるものがあるな
同類か?
2021/05/12(水) 13:15:48.40ID:1N3VwigT
>>591
そもそも 587 の内容は /bin/sh = ash/dash で頑張ってたけど
途中で /bin/sh = bash で行かざるを得ない/組込でも bash
入れざるを得ないなってなった事を説明しているわけで
589 の指摘を言われる所以は無い

君は同じスレのなかの時系列さえ読み解けない程読解力が低いんだよ
ちゃんと読めぐらいいわせろ
2021/05/12(水) 13:17:56.91ID:UQubkL4X
>>692
そんな急に知識自慢wされても、は?となるだけだよ
そんな自分の頭だけの流れを読めというのは無理があるでしょ
で?何を言いたいの?
2021/05/12(水) 13:18:56.70ID:UQubkL4X
>>593
>>692
>>592
すまん
2021/05/12(水) 13:23:30.78ID:1N3VwigT
>>593
いや、だから君は読解力がない/坊主憎けりゃ袈裟まで憎いで会話にならない、と
2021/05/12(水) 13:26:48.40ID:UQubkL4X
>>593
そのレスから明らかにお前が自分の頭で思ったことが他人にもわかると思ってるな
>坊主憎けりゃ袈裟まで憎い
イミフwまた何を言っているんだか
だからお前は何を言いたいの?そんなイミフなこと言わずに書いてよ

自称読解力があるらしいのになんで俺に言っていること理解できないの?
(自称のそれは多分それは読解力ではなくて妄想力だと思われるけど)
2021/05/12(水) 13:29:39.37ID:UQubkL4X
>>596
なんで間違えるかなあw
>>593
>>595
誤 >なんで俺に言っていること理解できないの
正 >なんで俺の言っていること理解できないの
なんかとてもすまん
2021/05/12(水) 13:43:37.39ID:1N3VwigT
>>597
>なんで俺の言っていること理解できないの
君は相手をディスる単語は使うが、なぜディスってるのかは説明しないんだから
理解してもらえないのは当然でしょ

「自分で調べろ」「バカと会話するだけ無駄」というレスのは解の一つではあるが
それを使うのであれば書き込んだ後はとっととスレ/板から去れよ
2021/05/12(水) 13:50:05.62ID:UQubkL4X
/bin/sh が POSIX shell で汎用性があるスクリプトを書きたいというニーズはある
主に/大きなのはディストリかな
Debianは結構前からbashismを問題にしてる、/bin/sh が bash の頃から(でも、bashからdashに代えたのはUbuntuが先っぽいけど)

そういうある意味良き未来へw先導してるのがDebianなんだろし、そこで開発されてるdashにそれに沿った方向性を見るのは普通だと思うんだがな

全体的にwそういう方向性だろうし、俺はそれでいい、別に異論は無い、納得できるってだけなんだがな

ざっと見だけどなんかやたらbashという語が多いようだけど、bash好きなのかな?dashがPOSIXに近い、bashは/bin/shに合わないとか言う俺がbash嫌いだとでも思ってるのか?
>坊主憎けりゃ袈裟まで憎い
って。と妄想するけど?wまたいきなり何を言っているのかでいまだにわからんけど
2021/05/12(水) 13:51:57.48ID:UQubkL4X
>>598
お前が何を言いたいのかわからんのだもの
なんか説明してくれたけど、全然レスになってないんだもん(>>593)

じゃ、元に戻って>>589の流れのイミフ&イミフなところをちゃんと説明して
2021/05/12(水) 14:44:21.97ID:1N3VwigT
>>599
> /bin/sh が POSIX shell で汎用性があるスクリプトを書きたいというニーズはある

だからこそ #!/bin/sh じゃなくて #!/bin/dash って書こうよ

/bin/sh が /bin/bash なディストリが残ってる以上シェバンが #!/bin/sh のままじゃ
いつまでたっても bashism の問題は消えないんだ

コマンドがちょっと打てるだけでOSやシェル、その歴史なんて詳しくも無ければ
興味もない連中でさえシェルスクリプトはかけちゃうからとめられないんだ

>>600
その前段で既に話がかみ合ってないしこれは終わりにしよう
かみ合ってないのに話を終わらせなかった俺が悪かった
すまん
2021/05/12(水) 14:56:03.65ID:LtxTQo1N
>>601
>だからこそ #!/bin/sh じゃなくて #!/bin/dash って書こうよ
イミフ。何もわかってないじゃん。読解力あるんでしょ?w
>汎用性があるスクリプト
汎用性がわからんのか?可搬性と言えばいいのか?
だーかーらー、bashはbashismがあるから /bin/bash にしろって別の話だろうが。誰もそれに合わせたシェルを作らない/作れないんだから

お前のような迂闊さんのための話じゃないよ、#!/bin/sh なら POSIX shell で、それに近いのはdashっていう(何度繰り返したらわかるんだかw)
勉強不足でなんか困ったことがあってもそれは自責だな。お前でさえbashismって知っているのにw

>その前段で既に話がかみ合ってない
噛み合ってないもなんも、上のでさえお前は全然俺の言ってること理解してないじゃん
>>589ぐらいのイミフを噛み合うくらい簡単に説明できるだろうにw
まあ、いいよw(ナゾ)
2021/05/12(水) 15:01:42.47ID:VEm96Egx
理想主義者は、互換シェルとかであきらめてないで、真shをつくればいいのに。
そうでなきゃ、いずれまた「dashism」が問題になるやろ。w
2021/05/12(水) 15:04:52.73ID:LtxTQo1N
理想主義者でもないぞ現実主義だろうに
現実的に拡張可能な範囲での拡張なんだろう

POSIXと出されるとなんか変なこと思ってるのとちゃうか?
毒されすぎだろうここに居た/居るPOSIXなやつとかなんとか原理主義者にw
2021/05/12(水) 15:06:17.30ID:1N3VwigT
>>602
> イミフ。何もわかってないじゃん。読解力あるんでしょ?w
だからディスる(イミフと読解力あるんでしょで煽る)だけで終わらすんじゃなくて
どこが意味不明なのかちゃんと説明してよ

あとシェバンに #!/bin/sh と書いておきながらbash拡張で書く連中に対応する
方法については何度説明しても回答しないね
都合が悪い質問には一切回答しないでディスるだけとかいい加減飽きたぞ
2021/05/12(水) 15:11:48.53ID:LtxTQo1N
>>605
続いて書いてるだろ。読解力あるんでしょ?w

>あとシェバンに #!/bin/sh と書いておきながらbash拡張で書く連中に対応する
お前でさえbashismって知ってるのに何を言ってるの?お前はここでしか見ないのか?
警告的なのはWebにゴロゴロ転がってるだろうに

ディスるディスるって言ってるけど、お前は何を読んでるんだかな。お前が応えられないからと妄想するぞw

なんだマジで>>589だけの話を終わらせるつもりの>>601なのか?w
(>>589の最後を言っておいて自分から「飽きた」とか。まあわからないでもないけどw(ナゾ))
2021/05/12(水) 15:17:35.31ID:LtxTQo1N
しっかし、自分から俺に「読解力」とか言い出しておいて、自分に返されたらディスる「だけ」とか。続いて書いてるのも読めないで

自己中も大概にしろと言いたい。もしくはよほど自分に効く言葉なのかな?そうだから俺に対して言い出したのかな?w
「読解力」なんてこれから相手に使わない方がいいよwイミフはイミフだから仕方がない自分から>>598すら説明できないそうだからw

と、余談も余談wだけど
2021/05/12(水) 15:23:26.30ID:LtxTQo1N
>>607
まあ...なんちゅうか
>>598すら説明できない
>>589すら説明できない
いや...なんちゅうか...いやすまん
2021/05/12(水) 15:27:53.73ID:1N3VwigT
>>607
読解力ないがだいぶ効いていますなぁ
今後も君だと気づいたらガンガン使っていくよ
2021/05/12(水) 15:30:14.88ID:LtxTQo1N
頭悪そうなレス
それだけは言いたかったのね。なんでだろうねえw
2021/05/12(水) 18:55:25.47ID:ZTB501LY
まーたやってんのか
2021/05/12(水) 20:05:28.08ID:zdSe0i8P
俺がいなくても同じことになるんやなw
2021/05/13(木) 22:57:36.49ID:RCwmD/gq
bash --posixが機能しない
614デフォルトの名無しさん
垢版 |
2021/05/16(日) 18:43:25.65ID:ijO7GKET
>>472-473
#!/bin/sh
# POSIX準拠のシェルスクリプトはPythonスクリプトよりも寿命が長そうだからいいね
# Chrome拡張のLanguage Learning with Youtube BETA(提供元: Dioco)をインストール
# 字幕対応の動画ページを開いてキーボードのCキーを押す
# Fキーを押して全画面表示
# 画面下、動画の再生時間の横にOFFと表示されているアイコンをクリック
# 英語の字幕ではなくローマ字が表示される場合は、画面下の歯車アイコンをクリックして字幕設定を「英語>>日本語(自動生成)」から「英語(自動生成)」に変更
# 字幕の読み込み終了後、画面右上にある右矢印アイコン(エクスポート)をクリック
# Excelを選択してエクスポートをクリック
# 字幕ファイルのダウンロードが終わったらシェルスクリプトを実行
# pip install pandas openpyxl
python3 -c 'import glob, os, pandas; \
get_filename = glob.glob(os.getenv("HOME") + "/Downloads/*.xlsx"); \
read_xlsx = pandas.read_excel(get_filename[0], engine="openpyxl"); \
read_xlsx.to_csv(os.getenv("HOME") + "/Downloads/time_en_jp.csv", index=None, header=True)'
# cut: 2列目を抽出 | sed: 改行文字を空白スペースに変換
cat "$HOME/Downloads/time_en_jp.csv" | cut --delimiter="," --fields="2" | sed -z "s/\n/ /g" > "$HOME/Documents/en.txt"
cat "$HOME/Downloads/time_en_jp.csv" | cut -d "," -f 1,2 >> "$HOME/Documents/en.txt"
cat "$HOME/Downloads/time_en_jp.csv" | cut -d "," -f 1,3 >> "$HOME/Documents/en.txt"
mv $HOME/Downloads/*.xlsx ~/.local/share/Trash/files
google-chrome "$HOME/Documents/en.txt" \
$(echo "231c177a35b47c080030/smeti/4444nasam/moc.atiiq//:sptth" | rev) \
$(echo "/1873001261/piv4swen/igc.daer/tset/ten.hc5.ibeh//:sptth" | rev)
2021/05/16(日) 22:22:55.41ID:ZJ9kaJzK
CSV 形式に対して、cut は機能するのか?

データ中に、カンマを含んでいても、正常に抜き出せるのか?
2021/05/16(日) 22:34:03.36ID:vtPLFS21
>>615
含んでないことを前提にできるならええがな。
2021/05/17(月) 00:20:52.65ID:HtlvZdi5
https://twitter.com/col_richie/status/1393925115386101766

> 「POSIX原理主義とはPOSIX文書に従うこと」と思われがちだが、
> 我々の定義は少し違う。「POSIX文書が言わんとすることを読み取り、実践する」だ
>
> 例えば、日本国憲法24条の「婚姻は両性の同意のみに基づいて」を、
> 同性婚時代にどう解釈すべきかのようなもの。元の文章に捕らわれ思考停止してはいけない

ほんと、こいつって適当なことばかり言ってるよな

とうとうPOSIX原理主義はPOSIXとは関係ない。POSIXが書いてないことを
独自解釈して自分の都合のいいように言い換えてるって認めちゃってる。
その「我々の定義」は「POSIX原理主義」のどこにも書いてないと言うね

そしていつものように、全く関係ないものにたとえて
虎の威を借る狐作戦

一貫性がない、思いつきだけで発言してる
https://twitter.com/5chan_nel (5ch newer account)
2021/05/17(月) 03:39:44.44ID:j+9HqG9Y
見落としてた
Language Learning with Youtube BETAが出力する字幕にカンマが表示されることがないから
cutコマンドを使ってCSVファイルのn列目フィールドを抽出できてる

sepオプションで区切り文字に'~'を指定してcomma-separated values (csv)ならぬpython-separated value(psv)ファイル
にすれば英文データ中にカンマを含んでいても正常に抽出できるよ
read_xlsx.to_csv(os.getenv("HOME") + "/Downloads/time_en_jp.csv", index=None, header=True, sep='~')'
2021/05/19(水) 10:30:30.70ID:nuPY3Cay
>>618
python使うくらいなら、CSVの処理にはq(-text-as-data)を使った方がいいかな
まFYIということで。
2021/05/19(水) 11:52:01.66ID:ZyjXFBY0
csvはほんとギルティ、特にクオートしてるやつ…
(["'])[^"']*\1やその,版をベースに個別にチューンしてなんとかならん事もないけど
普通に高級ライブラリ(pwshのパーサとか)呼んで見つけ次第tsvに浄化、常にtsvを扱うのがベストプラクティス
タブが嫌ならascii c0 separator svでも何でもcsvよりはマシ
2021/05/19(水) 12:10:40.76ID:/qVnw8Ux
テキストにタブが含まれてたら同じやろ。
結局、ダメなときはダメ。
しゃあない。
2021/05/19(水) 12:15:24.52ID:nuPY3Cay
>>620
つか、CSVに限らず、シェルスクリプトで扱うなら、とにかくTSVでしょう。
だから、他のデータはとにかくまずTSVにしてしまう。
それさえ出来てしまえば、逆に後はどうにでもなるw

またシェルスクリプトでなくても、タブは単独の区切り文字としてはベスト。
まずよっぽどでない限り、フィールドの内容には出てこないから。
2021/05/19(水) 12:28:25.62ID:ZROa3PFa
>まずよっぽどでない限り、フィールドの内容には出てこないから
一番使われたであろうソースコード記述でもタブを嫌いスペースが主流だったりするしな
2021/05/19(水) 12:40:24.36ID:ZyjXFBY0
sed s/^I/taaab/gとかエスケープしとけばいいんでない?(^Iは本当のタブ文字)
sedはc風のエスケープも認識した気がする、クオートしないとshに食われるが
s/'\t'/taaab/gでも多分大丈夫かな
2021/05/19(水) 12:45:00.65ID:nuPY3Cay
>>624
sedでやるなら普通に\tでいいよ。
ただし、grepでは通らない罠
あと複数文字に変換するなら普通に<TAB>とかにしようよw
2021/05/19(水) 12:45:04.60ID:ZROa3PFa
そんな話してないよ
2021/05/19(水) 12:46:44.79ID:ZROa3PFa
フィールドの内容に出てくるのを想定した場合の話か
ごめんちゃい
2021/05/19(水) 12:51:26.96ID:ZyjXFBY0
値内のタブは代わりの文字に置き換えて、tsvのデリミタにホントのタブ使うってことね
catやらで書き出してもちゃんとテーブルに見える利点は大きい(適宜タブ幅整えれば)

ascii C0のセパレータは認識しないアプリ多いし、vimで開くとかcat -vteしないと正体不明なので筋が悪いか
自分が何使ったか忘れて頭を捻ることになる
taaabでも何でも良いが、タブであることが一目で分かれば便利
その用途に文字列"\t"が標準的な大体記法だからといって、これに置き換えるのは避けたほうがいいかも
どこかで勝手に解釈されかねない

C0のセパレータがまさにdsvの為の文字なんだけれどもなあ…
扱いづらい
2021/05/19(水) 12:55:58.11ID:ZyjXFBY0
>>625
おれ環なんだが、<tab>を解釈してしまうアプリ結構あるので避けたい
vimとか
2021/05/19(水) 12:59:10.19ID:nuPY3Cay
>>628
> その用途に文字列"\t"が標準的な大体記法だからといって、これに置き換えるのは避けたほうがいいかも
うん。それはまずい。
そも普通のコマンドで\t解釈しないのはgrepぐらいのものだと思う。
(これ、ほんと凄い罠なんだよw)
2021/05/19(水) 13:09:34.54ID:nuPY3Cay
>>629
まあ、それなら<-tab->とか、なんなら((tab))とか、[[#tab#]]とかでも、いいけどw
んでもtaaabとかはやめようよ、だって見やすくないし、わかりやすくないし、それこそフィールド値として出てきかねない(まあ、スペースが入ってないとかのタイポだろうけれども)しw
2021/05/19(水) 13:11:35.15ID:EPM7ZqxF
いっそ絵文字にしちゃえば
2021/05/19(水) 13:16:05.73ID:ZyjXFBY0
>>630,631
覚えておく、ありがと
あと標準ツールで\記法を解釈しないのはedだね
edの直系子孫のgrepとsedで異なるのは興味深いね

結局はオレオレ記法に頼るしかないのな…

tsvほどポータブルでないが、bash等配列サポートbshならdeclare(typeset) -pで再読み込み可能なようにダンプしてくれるね
内部的に使うならこれもありかな
634デフォルトの名無しさん
垢版 |
2021/05/19(水) 13:20:50.01ID:isp/WQPk
>>622
> またシェルスクリプトでなくても、タブは単独の区切り文字としてはベスト。

シェルスクリプトにおいてはタブ区切りはベストではない。
なぜなら空白系文字の一つで特殊な処理が行われるから。

foo,bar,baz という CSVは IFS="," read -r f1 f2 f3 で正しく読み込める。
foo,,baz でも正しく、f1="foo"、f2=""、f3="baz" と読み込める。
しかしこれがタブ区切り(タブ文字=<TAB>とする)であった場合、

空白系文字が連続している場合は一つとして扱われるという例外ルールにより、
foo<TAB><TAB>baz という CSV は IFS=<TAB> read -r f1 f2 f3 と読み込むと、
f1="foo"、f2="baz"、f3="" と間違って読み込まれる。
2021/05/19(水) 13:23:02.17ID:ZyjXFBY0
内部的というか、個人的に、だな
個人的にならそれこそモダンなパーサ使えよって話だし、declare等中途半端なハックはやめておこう
ごめん
636デフォルトの名無しさん
垢版 |
2021/05/19(水) 13:24:53.12ID:isp/WQPk
名前は忘れたけど、シェルスクリプトでCSVを扱うためのライブラリかコマンドを見かけたことがある
awk実装のパーサーを使ってたはず。githubでawk csv で検索して見つけたんだったかな?
まあいくつかあったはず。
637デフォルトの名無しさん
垢版 |
2021/05/19(水) 13:27:02.65ID:isp/WQPk
たしかシェルスクリプトで扱いやすいように区切り文字を変換する機能とかエスケープする機能とかとかがあったはず
2021/05/19(水) 13:34:02.00ID:ZyjXFBY0
空白文字としてシェルにパース(単語分割)される、って性質もシェルスクリプティングにおいて便利な場面(forで回したり)は多々あるので一概に悪いとは思わないよ
スペースあるならtsvは避けるとか、IFSをコマンド前置代入で弄るとか、ハッキリ区別したいなら値をクオートしてワンステップ分割を遅延させたりとか

tsvは厳密性と利便性の真ん中の立ち位置だね
シェルスクリプティングにおいて、総合的に見ていい形式だと思うよ、(いざバグるその時までは…)
2021/05/19(水) 13:45:54.49ID:nuPY3Cay
>>632
まあ今時のシェル環境なら絵文字も実際なしじゃないと個人的には思う。
ただ、滅多にないといってもポータビリティ損うのは嫌だから自分はやらないがw

>>633
edかw
ありがとう、覚えておく。

>>634
いや、タブが不適切な場合がありうることは、端から除外してないよ。
標準ツールの実装や文字としての意味合いなどから考えて、ベストだと言ってるので、
そういう特殊な状況がありうることは指摘されるまでもないよw

>>636
awk実装なら欲しい、それw
csvparseなんてコマンドも昔sourceforgeにあって、一時期入れてた。C実装だったので、
でかいファイルを扱うときに重宝したけど、あんまりできがよくなかったんで、今は…
あとC++が書けるなら、boostライブラリ(11標準に入ってるかも)でエスケープ処理できる
パーサを簡単に書けるやつがあったんで、それで挑戦って手もあるかもw
自分は、そんなことを考えているうちに、>>619のq(-text-as-data)を見付けてしまったので、
以後はこれに頼ってるw
2021/05/19(水) 16:24:49.16ID:MofjHbZu
>>623
>一番使われたであろうソースコード記述でもタブを嫌いスペースが主流だったりするしな

カーネルのソースコードは主流じゃないってことですよね、わかります
641デフォルトの名無しさん
垢版 |
2021/05/19(水) 17:37:46.30ID:NrDqbXHa
while IFS=$'¥t' readでTSV読むと空文字が飛ばされるんだけど
どうしたらいいの?
642デフォルトの名無しさん
垢版 |
2021/05/19(水) 18:07:23.61ID:isp/WQPk
絶対入らないであろう制御文字とか別の文字にsedで置換してから処理すればいいんじゃね?
643デフォルトの名無しさん
垢版 |
2021/05/19(水) 18:09:29.66ID:isp/WQPk
その話を>>634でしたんだけど>>639はわかってない気がするねw
2021/05/20(木) 07:49:17.82ID:46+G9eEq
> 日本語では、「分かる(understand)」と「分ける(divide)」とは同じ字を充てます。つまり理解することと分類するということは同義です。

???

英語では、「分かる(understand)」と「分ける(divide)」とは異なる単語を充てます。つまり理解することと分類するということは全く別です。

となるのでは?w
2021/05/20(木) 12:53:36.47ID:ensXejIN
divide も「分類する」という意味に取ることはできる。分類が理解ならば。
2021/05/20(木) 13:17:23.56ID:ALA05zio
綴りが同じでも意味が違う場合がある
意味が同じでも別の綴りで表現することもある

言葉の常識だな
2021/05/22(土) 08:35:59.42ID:eaqGXRkT
>>618だとうまくいかないので訂正する
read_xlsx.to_csv(os.getenv("HOME") + "/Downloads/time_en_jp.csv", index=None, header=True, sep='~')'
ではなくて
read_xlsx.to_csv(os.getenv("HOME") + "/Downloads/time_en_jp.csv", index=None, header=True, sep="~")'
648デフォルトの名無しさん
垢版 |
2021/05/22(土) 08:45:20.64ID:eaqGXRkT
#!/bin/sh
# >>614の拡張機能を使ってダウンロードした英語字幕をDeepLで翻訳するスクリプト
# 翻訳すると短いなと思ったら英文の適当なところに改行を入れる
# . $HOME/venv/english/bin/activate
python3 -c 'import glob, os, pandas; \
get_filename = glob.glob(os.getenv("HOME") + "/Downloads/*.xlsx"); \
read_xlsx = pandas.read_excel(get_filename[0], engine="openpyxl"); \
read_xlsx.to_csv(os.getenv("HOME") + "/Downloads/time_en_jp.csv", index=None, header=True, sep="~"); \
read_xlsx.to_html(os.getenv("HOME") + "/Downloads/time_en_jp.html", index=None, header=True)'
mkdir --parents $HOME/Downloads/Excel; mv $HOME/Downloads/*.xlsx "$HOME/Downloads/Excel"
xdg-open "$HOME/Downloads/time_en_jp.html"
cat "$HOME/Downloads/time_en_jp.csv" | cut --delimiter='~' --fields='2' > "$HOME/Downloads/en.txt"
# pandoc "$HOME/Downloads/en.txt" -o "$HOME/Downloads/en.docx"
# 英語字幕の文字数は30分動画で約2万
en_05k=$( cat "$HOME/Downloads/en.txt" | sed -z "s/\n/ /g" | cut --characters="1-5000" )
en_10k=$( cat "$HOME/Downloads/en.txt" | sed -z "s/\n/ /g" | cut -c "4900-9900" )
for subtitle in "$en_05k" "$en_10k" "$en_15k" "$en_20k"; do
if [ -z "$subtitle" ]; then break
else xdg-open $( echo '/pj/ne#rotalsnart/moc.lpeed.www//:sptth' | rev )"$subtitle"; sleep 21; fi; done
2021/05/22(土) 09:02:39.62ID:QJRx2RSn
クソコード邪魔すぎ何だこりゃ?
2021/05/22(土) 11:03:50.76ID:eaqGXRkT
>>648
#!/bin/sh
# クリップボードにコピーしたurlをファイルに追記
CLIPB=$(xclip -o)
mkdir --parents $HOME/Pictures/ss
echo $CLIPB >> $HOME/Pictures/ss/urls.txt

#!/bin/sh
# 追記したページのスクリーンショットを取得後にログを残してurls.txtを初期化、閲覧編集用のアプリを起動
mkdir -p $HOME/Pictures/ss
while read url
# 書き込む余白を多く取りたければ1280以上の横幅を指定
do google-chrome --headless --disable-gpu --hide-scrollbars --window-size=1280,15210 \
--screenshot="$HOME/Pictures/ss/ss$(date +"%H%M%S").png" "$url"
done < "$HOME/Pictures/ss/urls.txt"
date >> "$HOME/Pictures/ss/food.log"
cat "$HOME/Pictures/ss/urls.txt" >> "$HOME/Pictures/ss/food.log"
: > "$HOME/Pictures/ss/urls.txt"
wine "$HOME/irfanview/i_view64.exe" &
xdg-open $( echo '=q?/moc.ogkcudkcud//:sptth' | rev )"!hatebu あとで読む"
2021/05/22(土) 11:11:15.99ID:/00w7bM8
よくわからんけどrevは5chの規制避けかな
2021/05/23(日) 18:35:11.52ID:TMBaqh21
>>650
#!/bin/sh
# 区切り文字が^のcsvファイルから3列目を抽出
while IFS='^' f1 f2 f3
do
echo "$f3"
done < $HOME/Documents/file.csv
echo -n "$IFS"
xdg-open $( echo '/pj.oc.ihcinuhc.www//:sptth' | rev )"article/215479"
653デフォルトの名無しさん
垢版 |
2021/06/02(水) 23:41:48.90ID:CFdyIdLe
スクリプトのシバンで#!/bin/bashを使うのに抵抗があっていつも#!/bin/shと書くんだけど
#!/bin/shは実際何が呼ばれてるか確認する方法ある?
2021/06/03(木) 02:30:25.50ID:Xmy19u29
file /bin/sh
2021/06/03(木) 02:36:09.69ID:Ers5yK+g
Ubuntu 18.04 では、

file /bin/sh
/bin/sh: symbolic link to dash

readlink -f /bin/sh
/bin/dash

ls@ -l /bin/sh
lrwxrwxrwx 1 root root 4 5月 21 2019 /bin/sh -> dash

ただし、ls の特定のオプションは書き込めないので、@を入れました

ll /bin/sh
lrwxrwxrwx 1 root root 4 5月 21 2019 /bin/sh -> dash*

ただし、ll は、~/.bashrc 内で定義されているエイリアス。
alias ll='ls -alF'
2021/06/03(木) 03:13:59.17ID:Xmy19u29
dashいいよね
time /bin/sh looooop.sh
という手も…
制御構文と算術並べて回すとbashの6倍〜くらい速い

もしbashのshモードなら、あえてshとして呼ぶ意味は多分ない
shにリネームしても--posixで呼んでも速くなったりはしないので
単に機能制限するだけ
2021/06/03(木) 04:24:00.37ID:R+Tga64P
bashの--posixなら多分機能制限しない
posix準拠の動きに変えるだけ
2021/06/03(木) 14:26:02.44ID:jx+ISKqI
>>656
なくはない。
何らかのbシェルベースのシェルが起動するコトを期待する、と言う意味がある。
そこがつまり#!/bin/dashと書くな、という理由だよ。
ポータビリティというのは結局スクリプトを書く側が担保してやるしかないものさ。
659653
垢版 |
2021/06/03(木) 19:13:59.15ID:smLJNlVA
こんなん出ました
dashだそうです
root@rock64:~# file /bin/sh
-bash: file: command not found
root@rock64:~# readlink -f /bin/sh
/bin/dash
2021/06/03(木) 23:17:43.27ID:jx+ISKqI
>>659
なに?ubuntuってfileコマンドないの?w
うへ。何のパッケージインストールすりゃいいんだ?w
打てば教えてくれるのか?w
まあ、滅多に使わないけどさ…w
2021/06/04(金) 00:17:07.85ID:3WbYfw6G
$ apt-file search -x '(/usr)?/bin/file$'
file: /usr/bin/file
2021/06/04(金) 18:08:41.76ID:gVy5NQ7F
>>660
最近はクロス環境とか多いからfileは結構出番ないすか? これどれのバイナリー? みたいな
2021/06/04(金) 19:10:54.58ID:3cSNOYzv
クロス開発で異なるプラットフォームのバイナリが
バラバラにばらまかれて調べないといけなくなる状況がわからん
ちゃんとディレクトリとかファイル名とかでわけて
混ざらないように作れよ
適当にやってるからわからなくなるんだよ
664653
垢版 |
2021/06/04(金) 22:37:23.88ID:jwl5S2DP
>>660
debianベースらしいけど見ての通りrock64というシングルボードコンピュータ用だから
色々省かれてるんでしょうね
まあaptで標準的なものは入るので
2021/06/04(金) 22:55:40.20ID:n50ApA7d
なるほどw
いろいろありがとう >>661 >>664
RedHat系でずっと来てるもんで、ubuntuは新参でして…w
結構、細かいところでググぅっとなるw
2021/06/05(土) 00:08:43.42ID:wpsN2NXu
これを機にPOSIX準拠を目指すといいでござる
ただしPOSIX原理主義だけは見てはいけないでござる
あれはエセPOSX宗教でござる
667デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:16:29.89ID:JMlL8BLG
プログラムの勉強のためにshellのコマンド(ex cd・cp・find ...etc)が
どう書かれているか中身を見たいのですが、バイナリのため文字化けしてて見れません。

これを人が読めるように戻すにはどうしたらよいでしょうか?
またshellのコマンドはプログラム言語は何で書かれているのでしょうか?
2021/06/06(日) 19:25:46.16ID:a60f9MS4
$ objdump -d -j .text /usr/bin/cp
2021/06/06(日) 19:47:31.05ID:czQb8XNZ
>>667
> shellのコマンドはプログラム言語は何で書かれているのでしょうか
だいたい全部と言っていいほど、Cだな
ほぼ全部OSSなんだから、全てのコマンドのソースがネットに普通に置いてある
670デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:48:12.73ID:P8Y1M++D
>>669
それはLinuxだろ
2021/06/06(日) 19:50:10.61ID:czQb8XNZ
>>670
BSDもだけど。macOSもな
672デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:53:49.73ID:P8Y1M++D
なんかずれてるな
673デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:55:06.72ID:P8Y1M++D
オープンソースとそうでないものがあって、そもそもはオープンソースでない方が元。
2021/06/06(日) 19:55:15.47ID:czQb8XNZ
お前が何を噛みついてるのかわからん
お前がズレてるんだろうがぁ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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