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

■ このスレッドは過去ログ倉庫に格納されています
2020/08/21(金) 15:17:55.64ID:mArnj/tT
シェルスクリプトに関する総合スレッドです。

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

シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
2020/10/14(水) 04:07:29.66ID:6lVggo30
>>578
原理主義者といえばそうかもしれんが、臨機応変なことができないのは確かそうだな
2020/10/14(水) 04:18:21.34ID:rQGDkRcC
>>579
それは、あくまで個々の実際であって、POSIXの証明にはならんやろ。
2020/10/14(水) 09:13:33.96ID:e7axr172
>>581
POSIXの証明って何の話?
bash拡張機能はbashでしか使えない。POSIX shの範囲でならどのPOSIXシェルでも使える
実際にbash拡張機能はDebianの/bin/sh(dash)やAlpine Linuxの/bin/sh(busybox)では使えない
という当たり前の話しかしてないが

俺に何を証明して欲しいん?
動かない命令でも書いてほしいんか?
array=(1 2 3)
↑DebianやAlpine Linuxで動かない。ほらPOSIXの証明になったろw
2020/10/14(水) 09:18:46.30ID:q9X9j9UM
POSIX STRICTチェックみたいなものないの?
もしくはピュアPOSIXの実装とか
2020/10/14(水) 09:25:02.38ID:e7axr172
>>583
shellcheck

こういうエラーが出る

$ shellcheck posix.sh

In posix.sh line 3:
array=(1 2 3)
^---^ SC2034: array appears unused. Verify use (or export if used externally).
^-----^ SC2039: In POSIX sh, arrays are undefined.

For more information:
https://www.shellcheck.net/wiki/SC2034 -- array appears unused. Verify use ...
https://www.shellcheck.net/wiki/SC2039 -- In POSIX sh, arrays are undefined.


> もしくはピュアPOSIXの実装とか
それがdash
2020/10/14(水) 09:43:48.30ID:e7axr172
WSL(Ubuntu)の/bin/shもdash、ピュアPOSIXの実装
2020/10/15(木) 06:07:28.41ID:/dATFcTZ
目的はピュアPOSIXの実装ではないけどな
2020/10/15(木) 07:43:17.35ID:VXXH9SNU
dashの目的は、それまで使われていた/bin/shの代替
高速で軽量でPOSIX互換を目指している

この目的と目標は実現され /bin/shの代替として
Debian系(Ubuntu含む)などで多く使われている
FreeBSDやNetBSDでもashが使われてる
dashはそのashをDebian用に移植したもの

bashはインタラクティブシェルとしては一番使われてるだろうが
shebangのは/bin/shが使われることが多いので
シェルスクリプトを動かす場合はdashが一番使われているシェルだろう
2020/10/15(木) 10:07:06.34ID:r6YkuFXF
https://twitter.com/col_richie/status/1316543524569903111

リッチー大佐の中の人
@col_richie
「シェルスクリプトによる○○」と銘打ちながら、必要なものにPythonやGoが含まれるというなら、
それは「Pythonによる○○」あるいは「Goによる○○」に他ならな
なぜ「シェルスクリプトによる○○」と語ることにこだわるのか?
他言語に頼る時点で既にそんな資格はない。当たり前だろうが!!!



郵便番号から住所欄を満たすアレを、シェルスクリプトで実装
https://github.com/ShellShoccar-jpn/zip2addr
https://github.com/ShellShoccar-jpn/zip2addr/blob/master/commands/parsrj.sh

※ これはシェルスクリプトではなくawk(笑)

# #
# === Generate the JSONPath-value with referring the head of the ======= #
# strings and thier order #
awk ' #
BEGIN { #
# Load shell values which have option parameters #
alt_spc_in_key=ENVIRON["sk"]; #
root_symbol =ENVIRON["rt"]; #
key_delimit =ENVIRON["kd"]; #
list_prefix =ENVIRON["lp"]; #
list_suffix =ENVIRON["ls"]; #
# Initialize the data category stack #
datacat_stack[0]=""; #
delete datacat_stack[0] #
# Initialize the key name stack #
https://twitter.com/5chan_nel (5ch newer account)
589デフォルトの名無しさん
垢版 |
2020/10/15(木) 10:08:30.55ID:r6YkuFXF
さらしあげとこうw
590デフォルトの名無しさん
垢版 |
2020/10/15(木) 10:13:25.16ID:r6YkuFXF
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

NAME
awk - pattern scanning and processing language
awk - パターン走査および処理言語

DESCRIPTION
The awk utility shall execute programs written in the awk programming language,
which is specialized for textual data manipulation.
awk ユーティリティは,テキストデータ操作に特化した awk プログラミング言語で書かれたプログラムを実行する.


_人人人人人人人人人人人_
> awk プログラミング言語 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
2020/10/15(木) 10:17:25.72ID:WTnE7/zf
awkもjqも全部シェルスクリプトだよ
592デフォルトの名無しさん
垢版 |
2020/10/15(木) 10:22:25.09ID:r6YkuFXF
>>591
awk ユーティリティは,テキストデータ操作に特化した
awk プログラミング言語で書かれたプログラムを実行する.

_人人人人人人人人人人人_
> awk プログラミング言語 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
593デフォルトの名無しさん
垢版 |
2020/10/15(木) 10:25:32.93ID:r6YkuFXF
たっくん
シェルスクリプトでTwitterBotっていうのを見かけたけど、「コマンドの実装にGoを使う」って書いてあって「うーん?」となってしまった

リッチー大佐の中の人
まったくだ。なめてるのかと。我らの小鳥男こそシェルスクリプトによる最強のTwitterクライアントアプリだ。
もちろん、別途シェルスクリプトを組めばbotも好きなように作れる。 https://github.com/ShellShoccar-jpn/kotoriotoko

594デフォルトの名無しさん
垢版 |
2020/10/15(木) 10:26:22.84ID:r6YkuFXF
https://github.com/ShellShoccar-jpn/kotoriotoko/blob/master/UTL/base64

# Main

(cat ${1+"$@"}; echo '') |
awk ' #
BEGIN { #
# --- prepare #
OFS = ""; #
ORS = ""; #
# --- prepare encoding #
for(i= 0;i<256;i++){c2p[sprintf("%c",i)]=sprintf("%%%02X",i);} #
c2p[" "]="'"$instead_of_spc"'"; #
for(i=48;i< 58;i++){c2p[sprintf("%c",i)]=sprintf("%c",i); } #
for(i=65;i< 91;i++){c2p[sprintf("%c",i)]=sprintf("%c",i); } #
for(i=97;i<123;i++){c2p[sprintf("%c",i)]=sprintf("%c",i); } #
c2p["-"]="-"; c2p["."]="."; c2p["_"]="_"; c2p["~"]="~"; #
595デフォルトの名無しさん
垢版 |
2020/10/15(木) 10:38:59.90ID:r6YkuFXF
POSIX準拠コマンドの中で言語と言えるもの
(セミコロンや改行区切りで "複数の命令" を手続き的に実行できるものを言語としています)

awk - pattern scanning and processing language
bc - arbitrary-precision arithmetic language
ed - edit text
sed - stream editor

他にもあるかな?
bcは複数の命令を実行できるから言語だけど
exprは式を評価するだけだから違う
2020/10/15(木) 20:22:35.08ID:cNnx9G5T
exを忘れちゃいけない
597デフォルトの名無しさん
垢版 |
2020/10/15(木) 22:29:33.58ID:BrsJS6s+
exでもできるん?

sedとか"s/a/b/"みたいに一行のコマンドを実行してるように見えるけど
実際には
s/a/b/
s/c/d/
みたいにsedスクリプトを実行できるわけだよね

sedは置換をベースとしたかなり独特な言語だけど
awkなんてBEGINで全部書いてしまえば
完全に普通のスクリプト言語になる

bcも実際はスクリプトを使って計算する
https://linux.die.net/man/1/bc の中間あたりにある例は
関数定義やif文while文も使っていて実は言語であることがわかると思う

まあ言いたいことは、シェルスクリプトからPythonやGoを呼び出していて
そこがメインで処理してるのがシェルスクリプトでないように
awkやsedでメインの処理を行ってるなら同様にそれもシェルスクリプトではない
2020/10/15(木) 22:51:46.33ID:rxPXHFq5
じゃCで書いてるコマンド呼び出したらシェルスクリプトじゃないね
599デフォルトの名無しさん
垢版 |
2020/10/15(木) 23:01:29.76ID:BrsJS6s+
>>598
そのとおりだよ
シェルスクリプトで階乗を行うコードを実装しましたと言っておきながら
C言語でコードを実装して、シェルスクリプトではそれを呼び出すだけなら
それはシェルスクリプトで実装したとは言えない

シェルスクリプトで実装というのなら、シェルスクリプトで
定義されているものだけを使って使って作らないといけない
例えば変数展開(を利用した文字列処理)や算術式展開を使った四則演算や
case文を使った文字列パターンマッチング処理で作る

外部コマンド呼び出しは(そのコマンドを自分で実装してないなら)
外部コマンドと組み合わせてシェルスクリプトで実装したと言えなくはないが
そもそもその外部コマンドがPythonやawkのような"別の言語"を使うものなら
そこから別の言語に切り替わっている
2020/10/15(木) 23:02:18.89ID:5H3UlTi7
イチャモンつけるならmakeがチューリング完全って話にまで火花が散るので、適当な落しどころは
POSIXに規定されておらず、それ自身が汎用プログラミング言語であることを目的として実装されたインタプリタやランタイムに対して、目的の処理を委譲しているのをシェルスクリプトだと表現されると気に食わない人が居る
くらいでいいでしょ

イチャモンつけるのも程々にしとかなきゃただ相手の意図を汲み取るつもりのない人間でしかなくなるぞ
601デフォルトの名無しさん
垢版 |
2020/10/15(木) 23:03:31.46ID:BrsJS6s+
>>600
厳密な境目を見つけたいんじゃなくて

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html
The awk utility shall execute programs written in the awk programming language,
awkユーティリティは、awkプログラミング言語で記述されたプログラムを実行します。

と書いてあるんだから、awkは「awkプログラミング言語」
602デフォルトの名無しさん
垢版 |
2020/10/15(木) 23:09:18.27ID:BrsJS6s+
make は内部的にシェルを呼び出してるので
GNU拡張は無視するとして、makeの範囲だけでなにか作れるんですかね?

GNU拡張を含むなら沢山の関数があるので
それらを使って作ったものは当然シェルスクリプトで実装したことにはならないですよ
603デフォルトの名無しさん
垢版 |
2020/10/15(木) 23:12:13.35ID:BrsJS6s+
あとイチャモンの内容は、Pythonで作ったものはシェルスクリプトではないのはそのとおりだけど
同じ用にawkで実装したものもシェルスクリプトではないんだから
awkで実装ばかりしてるお前(リッチー大佐)は自分のことを棚に上げてるwwwって言ってるだけ
604デフォルトの名無しさん
垢版 |
2020/10/15(木) 23:22:09.05ID:9L6aMfZP
♪しぇまるー、ショッカー
2020/10/16(金) 00:01:24.96ID:NkS9Y4UZ
>>599
C言語でsystem()関数を使って、Bashを呼び出したら、シェルスクリプトだな!
606デフォルトの名無しさん
垢版 |
2020/10/16(金) 00:18:33.05ID:V+ycHLUt
>>605
そりゃそうよw
そのシェルスクリプトでメインの処理を行ってるんでしょ?
2020/10/16(金) 06:54:13.19ID:AxWc82uj
>>603
だーからそういう揚げ足取りがしょーもないって話してんのが分からんかね
awkがプログラミング言語であるのは否定しない
ただ発端の話者はPOSIX狂いで有名な上awk多用してるんだから、対象のツイート中で言うプログラミング言語がPOSIXを除くものについての言及と考えれば辻褄は合うし、そう考えるのも突飛な発想と言うほどおかしくはないでしょ
確かにその人は語り口が横柄な事があるし好かれる性格キャラ作りはしてないさ
でも個人憎しでしょーもない揚げ足取りしてんのは同等かそれ以上につまんねーことしてんなって感じだよ
608デフォルトの名無しさん
垢版 |
2020/10/16(金) 07:32:49.12ID:8MUyS0MS
>>607
だから結論としては、awkはシェルスクリプトじゃないんだから
お前(しょっかー)もawk使ってるくせにシェルスクリプトって言ってるじゃん
ってことでしょ

それ以外になにか言うべきことあんの?
ないでしょ
それで話は終わりだよね
2020/10/16(金) 07:49:02.57ID:AxWc82uj
>>608
意図的に悪意を持って相手の意図を読もうとしてないんだと思ってたら本当にただ単に日本語読めないだけだったんだね…
なんか…ごめんね?
610デフォルトの名無しさん
垢版 |
2020/10/16(金) 07:50:20.39ID:hscjZ2ao
>>609
なんで相手の意図とか読んであげようとしてんのw
相手をかばう必要なんかないじゃん

awkはシェルスクリプトではない
事実だけを言えばいい
2020/10/16(金) 08:10:20.93ID:AxWc82uj
>>610
意図を読む事を相手をかばうとか言ってる時点でコミュニケーションする気なし、端っから粗探ししてdisる気満々じゃん
そういうスタンスを俺は見てて気に食わないよ
それだけ
612デフォルトの名無しさん
垢版 |
2020/10/16(金) 08:21:19.35ID:hscjZ2ao
>>611
意図じゃなくてお前の願望だろw

awkは明らかにシェルスクリプトじゃないし
POSIX準拠のコマンドだけを使って作ったというのなら、そう言えばいいだけで
そう言わない理由はあるわけがないので、単にそのことを理解してないってだけ
それをお前はかばおうとしてるだけだろ
2020/10/16(金) 08:47:26.97ID:AxWc82uj
>>612
>>607 に対しての時点でその返しが来てたら分からんでもないけど、そこでスルーしてんのに今更言ってんのが議論とか意見出しがしたいんじゃなくて粗探ししてますって自白してるようなもんでしょ

そう言わない理由があるわけないは言い過ぎだよ
人間誰しも無意識の前提を置いてしまうことはある
614デフォルトの名無しさん
垢版 |
2020/10/16(金) 09:11:10.47ID:095UBA8m
恥ずかしいよねw

自分がシェルスクリプトといいながら、awkで書いちゃってるのに
他に人にはPythonはシェルスクリプトじゃないと言っちゃってるわけだw
2020/10/16(金) 10:47:36.16ID:94/KGSru
もう直接言いに行けよ、キモいレスするぐらいなら
616デフォルトの名無しさん
垢版 |
2020/10/16(金) 10:52:10.99ID:rggqlWcj
>>614
awkやsedはシェルスクリプトの一部とみなす慣例は大昔からだから。
2020/10/16(金) 13:05:08.68ID:Sbv90d+P
シェルスクリプトに混ぜて書く場面が多ければほぼシェルスクリプトのようなものと思ったって何の問題もない
618デフォルトの名無しさん
垢版 |
2020/10/16(金) 13:14:33.80ID:s+qbwWMb
それはお前の願望ですよね?

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html
The awk utility shall execute programs written in the awk programming language,
awkユーティリティは、awkプログラミング言語で記述されたプログラムを実行します。
619デフォルトの名無しさん
垢版 |
2020/10/16(金) 14:28:05.49ID:rggqlWcj
>>618
そうだよ。UNIXでもそう説明される。ただし、実態は単独では使われない。
620デフォルトの名無しさん
垢版 |
2020/10/16(金) 15:42:36.85ID:gWa/7c+R
awkをシェルスクリプトと組み合わせて使っても
awk言語がシェルスクリプトに変わるわけがないって話ですよね?
いつから単独で使われるかどうかの話にすり替わったんですか?
621デフォルトの名無しさん
垢版 |
2020/10/16(金) 16:33:59.64ID:rggqlWcj
シェルスクリプトがシェルのスクリプトだとわかってない?
622デフォルトの名無しさん
垢版 |
2020/10/16(金) 16:36:29.14ID:j/dNEpw/
シェルのスクリプトから呼び出す
外部コマンド(awkやpython)が
シェルではないことぐらい知ってるよね
623デフォルトの名無しさん
垢版 |
2020/10/16(金) 16:39:41.36ID:rggqlWcj
スクリプトの意味がわかっていない墓穴掘り書き込みですね。
624デフォルトの名無しさん
垢版 |
2020/10/16(金) 16:40:16.10ID:HABswBQ5
シェルのスクリプトはシェルが実行している
シェルとはdashとかbashとかzshのこと
そのスクリプトをシェルが実行していないなら
それはシェルスクリプトではない
2020/10/16(金) 16:41:33.85ID:JU6AgX+H
>>623
いやぁ、そこは「スクリプトの今は○○だ!」って
お前が宣言するところだよ

宣言しちゃったら、間違ってたときに恥ずかしいから言えないんでしょ?
相手のミスを待つんじゃなくてさ、自分の意見を言ってみなよ
2020/10/16(金) 16:41:50.26ID:JU6AgX+H
いやぁ、そこは「スクリプトの意味は○○だ!」って
2020/10/16(金) 16:43:40.44ID:JU6AgX+H
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

It was pointed out that with the rules contained in early drafts, the following 【script】 would print nothing:

BEGIN {
y[1.5] = 1
OFMT = "%e"
print y[1.5]
}

> the following 【script】 would print nothing:
2020/10/16(金) 16:53:32.17ID:JU6AgX+H
>>623
そのレスは何の目的があってしたの?
俺が本当のスクリプトを教えてやるぞってことなら、早く言って欲しい
ただの負け犬の遠吠えなら、そのまま黙ってくれると助かるね
629デフォルトの名無しさん
垢版 |
2020/10/16(金) 16:57:30.29ID:RKtFr9bS
pythonのコードを描いてそれをログインシェルにしても良いんだぜ
2020/10/16(金) 16:58:10.24ID:JU6AgX+H
シェルスクリプトの話しかしてません
ログインシュルの話なんかしてません
2020/10/16(金) 17:01:13.72ID:RRnEM1bt
ほらね
馬鹿がバレただろ?
2020/10/16(金) 17:02:24.56ID:JU6AgX+H
ほらね
馬鹿がバレただろ?

※理由を言わないテクニック(笑)
633デフォルトの名無しさん
垢版 |
2020/10/16(金) 17:32:16.72ID:Wq4ZK+I/
dashはダッシュ
bashならバッシュ
zshはなんと読む?
634デフォルトの名無しさん
垢版 |
2020/10/16(金) 17:35:04.80ID:rggqlWcj
オツシュ
635デフォルトの名無しさん
垢版 |
2020/10/16(金) 19:12:07.11ID:49KTAZqQ
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash bash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
636デフォルトの名無しさん
垢版 |
2020/10/16(金) 20:45:17.03ID:QdYgfUXk
ゼットシェル
2020/10/16(金) 21:51:16.80ID:YwASt5fw
zsh規制
638デフォルトの名無しさん
垢版 |
2020/10/17(土) 10:31:07.65ID:0qFIP5N2
ch
sch
tsch
2020/10/17(土) 16:56:16.43ID:1zxs+zPu
foo() { echo $A; }
A=1
A=2 foo
echo $A

ってやった時、1行目に2が表示されると思ってる。
そして2行目には1が表示されると思ってたんだけど
dashだと2と表示される。これってバグ?
2020/10/17(土) 16:59:33.10ID:sPQ7iLy+
普通の挙動じゃない?なにがおかしいと思ってる?
2020/10/17(土) 17:00:23.70ID:1zxs+zPu
>>640
bashやzshでは1が表示される
dashでは2が表示される
ということです。
2020/10/17(土) 17:16:48.26ID:oDONqj5W
bashやzshが仕様通りだと思うけど

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01
If the command name is not a special built-in utility or function, the variable assignments shall be exported for the execution environment of the command and shall not affect the current execution environment except as a side-effect of the expansions performed in step 4
2020/10/17(土) 17:17:04.79ID:1zxs+zPu
そもそも変数に代入しつつコマンド実行って
POSIXで規程されてない?
2020/10/17(土) 17:17:34.52ID:1zxs+zPu
>>642を読む前に書き込んだ。今から見てみる。
2020/10/17(土) 17:22:47.37ID:1zxs+zPu
>>642
これは?

If the command name is a function that is not a standard utility implemented as a function, variable assignments shall affect the current execution environment during the execution of the function. It is unspecified:

Whether or not the variable assignments persist after the completion of the function

Whether or not the variables gain the export attribute during the execution of the function

Whether or not export attributes gained as a result of the variable assignments persist after the completion of the function (if variable assignments persist after the completion of the function)
2020/10/17(土) 17:26:44.95ID:oDONqj5W
>>645
あー、関数だからそっちだね
2020/10/17(土) 17:35:03.05ID:1zxs+zPu
なんでこんなに複雑なんだ・・・
2020/10/18(日) 00:40:25.10ID:ngGOxfYz
>>584
>> もしくはピュアPOSIXの実装とか
>それがdash

とりあえずこれはダウトということ?
2020/10/18(日) 01:14:29.68ID:u/6+iFla
なんで?
2020/10/19(月) 05:17:03.52ID:8QFJcUQW
for music in `cat $OUT`; do
のようなループを書いている
1行ごとに仕事をさせたいのだが
1行の中には空白があり、1行の要素が分断されている
どうすれば分断を防げるだろう?
2020/10/19(月) 09:45:54.95ID:4EZdKnY4
while read
2020/10/19(月) 10:00:20.18ID:8QFJcUQW
thanks
2020/10/25(日) 20:39:06.02ID:/pMQZumA
tputってさどこまでがPOSIX準拠なの?
色はPOSIX準拠じゃないでしょ?
2020/10/26(月) 04:13:51.20ID:tssW3pbf
UNIX系で端末管理はどうやってるのか学べ
2020/10/26(月) 16:46:36.36ID:4vMqqkwn
AWKがシェルスクリプトに含まれるかどうかは
(定義不十分だし)勝手に議論しとけと思うけど,

GNU・BSD拡張を使っていないAWKで何か実装した場合それは
「POSIXに準拠している」と言えるわな。

だから「シェルスクリプトで〜」と言わずに
「POSIXに準拠したやりかたで〜」と言っておけば,
くだらない揚げ足取られずに済んだ訳だ。
時すでにお寿司🍣
2020/10/26(月) 23:22:51.04ID:2CuyKjNX
>>655
あの人は何でもシェルスクリプトでできるって思っちゃってる人だから無理でしょ
POSIXと言いながら、C言語メインとかにはならない

1. シェルスクリプトでやるのがいい (基本)
2. できない? POSIXならC言語とか使ってもOKなんだよ!

POSIXは、シェルスクリプトではなできない事の言い訳として利用してるだけ
だからawkで作ってるのにシェルスクリプトだと言いはる
2020/10/27(火) 07:49:33.18ID:rn8NuyuD
C言語使ってって小さなフィルタープログラムをだろ
既存でないフィルターは自分で作るというある意味シェルスクリプトの本道でもあるだろう
2020/10/27(火) 08:25:50.66ID:u8IX9f6Z
>>657
シェルスクリプトってまさにこの
「C言語で書いた早くて小さいプログラム」
を組み合わせる為の言語だと思ってる。

もちろんシェルスクリプトの制御機構は計算完備なので
シェルとしての機能だけでプログラムを書くこともできるけど,
Unix哲学≠ノ従うならそれはちょっと違うんじゃないかと思う。

シェルスクリプトで完結する人ってUnix哲学をやたら推すし,
Unix哲学自体は今でもある程度参考になるとは思うけど,
ほんとうにUnixらしいやりかたは
「主処理はC言語で書いて組み合わせはシェル」っていうことだと思う。
659デフォルトの名無しさん
垢版 |
2020/10/27(火) 09:36:02.25ID:NxyNpTjA
自分の中でのシェルスクリプトって
新たにプログラムを位置から作るんじゃなくて
既存のコマンドを使って繋ぎ合わせて
間に合わせのプログラムを作るものだと思ってる

自分はプログラミングできるから普通にプログラム書けるけど
コンパイルとかの煩雑な手順を考えると
シェルスクリプトをぱっと書いてすぐ使えるってのはすごい手軽
パイプ処理が肝かなと思ってる
2020/10/27(火) 10:23:30.49ID:nSGvpwuJ
>>658
シェルスクリプトをシェルスクリプトで完結する必要はない。
例えば、C言語で作った何かや「awkで作ったなにか」を呼び出すのもあり
それは当然の話だし、否定していない

言いたいことは、それは「awkで作ったなにか」であって
シェルスクリプトではないということだけ

みとめよう。それはawkプログラミングだ
2020/10/27(火) 10:29:52.20ID:nSGvpwuJ
シェルスクリプトで外部コマンドを呼び出すのはありだし
全ての環境で動かすならPOSIX準拠にしろと思うが
POSIX準拠にこだわる必要もない

例えば、dockerやgitはPOSIX準拠ではないコマンドだ
POSIX至上主義かなにかしらんが、シェルスクリプトから
使っていいのはPOSIX準拠コマンドだけだというのなら
dockerやgitすら使えないということになる

んなばかな(笑)

環境が限定される(つまりdockerやgitが入っていること)という前提で
シェルスクリプトでPOSIX準拠ではないコマンドは普通に使う
つまり何が言いたいかと言うと、シェルスクリプトで読みやすさのために長いオプションを使えという話だ
長いオプションはPOSIX準拠ではないからショートオプションを使え?アホか
どちらにしろPOSIX準拠でないコマンドを使うのだ
2020/10/27(火) 11:22:58.65ID:B6tDM1Ic
>>658
あえてわざわざプログラムをCなりでつくるというのは、Unixらしいとは思わんな。
>>659のいう、既存プログラムを組み合わせることのほうがUnixらしい。

速度や特殊な処理のためにプログラムの開発が必要であればできるしするのは、Unixよりは(Windowsでもするしな)、いかにもハッカーらしいという感じ?
2020/10/27(火) 11:36:52.21ID:nSGvpwuJ
"既存プログラム"を組み合わせるのはUnixらしいが
新しいコマンドを作って組み合わせて使うユニケージはUnixらしくない

しかもそのコマンドが完全に特殊用途向けのコマンドであり
Unixでいうシェルスクリプトにはまったくもって応用できない

今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
【PR】2020.09.25
https://type.jp/et/feature/14070/

はは、クソ開発手法だ。ギークのだーれも熱狂してねーよ
せめてマニアとかオタクとかいえ、ギークと言ったら海外用語だ
海外に進出してないユニケージが熱狂とか嘘作んじゃねーよ
664デフォルトの名無しさん
垢版 |
2020/10/27(火) 12:20:04.79ID:IzIv2i9p
Power-Shell は unix らしさの極みか?
漏れはそうは思わんが
2020/10/27(火) 12:30:26.45ID:eXfPuMud
Power-Shell は反Unixだろ
そもそもWindowsにはまともなコマンドがないから
コマンドの連携ということがしづらい
あっても、正常終了時に「処理が完了しました」とかでて連携ができない
あれはコマンドを連携させずに、ただ並べるだけ

そういう世界だからシェルだけ改良しても意味がない
Unixでいうコマンド相当のものが必要
それが.NET framework。しかし.NET frameworkはAPI
APIだから普段CLIから実行するものではないし
コマンドとして使うのは面倒

Power-Shellはシェルスクリプトとしての特徴と
メリットである簡潔さが失われた「普通の言語」に相当する
2020/10/27(火) 18:52:31.21ID:B6tDM1Ic
>>665
PowerShellを使ったことがないだろ?w
ヘンにハイフンを入れたりしてるしな。

コマンドによってはちゃんとオブジェクトを返すし、パイプで処理することもできる。
.NETを直接実行することもできるし、テキストベースでしかないUnixシェルよりも使いやすいこともある。
「反Unix」というよりは、それを越えたところもあるWindowsらしいシェルと言える。

ただ、いつまでどのようにサポートされるのか、最近はちょっと不安。。。
poshとのかねあいとか。
2020/10/27(火) 18:54:44.28ID:a7WAgl/q
フィルターは、Ruby で作る

Linux のPowerShell は、Azure しか使われていないだろ?
2020/10/27(火) 20:43:43.48ID:gFMGawtc
>>666
> ヘンにハイフンを入れたりしてるしな。
俺に言うな。俺はコピペしただけだ
669デフォルトの名無しさん
垢版 |
2020/10/27(火) 22:01:39.01ID:7WqSRFWS
スペースがあると誤解しているのと、スペースをハイフンに置き換える習慣があるジジイの命名
2020/10/27(火) 22:32:46.87ID:B6tDM1Ic
>>668
で、使ったことはないんやろ?w
であればわざわざPowerShellについて述べずともよい。
2020/10/28(水) 02:15:01.01ID:TQndZTJN
>>670
PowerShellで作ったプログラムをオプソで公開してるがなにか?
2020/10/28(水) 06:49:20.54ID:Df2NTJPb
オプソってなに?
2020/10/28(水) 08:15:00.68ID:zcWN9+mU
Open source
2020/10/28(水) 13:27:15.30ID:l3R5yM/w
>>671
であれば、>>665みたいな理解にはならんがなあ。w
ま、オプソにもいろいろあるからな。
2020/10/28(水) 17:48:34.37ID:QWPlcBUD
これだけマルチコアになった今日び、コマンドの方も対応して欲しい気がする。

ファイル圧縮のコマンドとか、マルチスレッドで処理したら速くできるはず。

あるいはどこまでもマルチプロセス主義でいくというなら... 例えば並列パイプ? というか
今のパイプだとデータフローが一本道だがこれを並列に分散して走らせて最後データを
一本にまとめるような処理の仕組みがあってもいいのではないかと。

ちなみに一本道は「いっぽんみち」で「いっぽんどう」ではないからな、って聞いてないか
676デフォルトの名無しさん
垢版 |
2020/10/28(水) 19:10:42.29ID:Aw3ALjki
例えるならxargs
677デフォルトの名無しさん
垢版 |
2020/10/28(水) 19:52:02.68ID:vhMFXsQD
パイプで繋げば自動でマルチになるではないか
2020/10/28(水) 20:17:48.21ID:FddMFcrq
あまりわかってなさそだな>>675
並列パイプとかも簡単に言ってそう
2020/10/28(水) 20:18:18.79ID:NAroBJuS
最期に一本にまとめるというのならGNU parallelやろ?
バックグラウンドプロセスを使って自分でまとめてもいいが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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