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

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

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

シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
2020/10/02(金) 12:30:02.56ID:Kgg5xh5c
>>553
既存シェルスクリプトの動作検証よりはマシやろ。w
BashとかPerl5とかはすでにインフラみたいなもんだし。

まあ、Python2も消せないやろ、と思ってたら、意外と3のみになったもよう。
2020/10/02(金) 12:40:10.03ID:kBx+3rAk
>>556
何を言っているのかイマイチわからん
現在の bash 3.2 ですら時代遅れだし、Apple自身でメンテしなくてはならない
macOS内でApple製のスクリプトがあるんだったらもちろん代替になるので問題なく書き換えられるだろう
今まで通りならmacOSバンドルとしてはインストールされなくなるのは当然のような帰結
2020/10/02(金) 12:52:27.29ID:sGznlVtc
macOSの/bin/shのbash3.2はもう負債だよねw
これからAppleはどうするつもりなんだろ
zshは互換性ないし、dashにしたら機能低下だしw
2020/10/02(金) 16:49:14.59ID:Kgg5xh5c
>>557
あー、アポーの話だったか。。。
まあ、今までも互換を壊すときには平然とぶち壊してきたし、マジメに考えてもしょうがないのでは。w
2020/10/02(金) 18:28:44.86ID:bqQ3ZGOC
いつ無くなってもいいように今からしとこというマジメに考えたらの話だけど
マジメってどういう意味なのか知らんけど
2020/10/02(金) 21:23:42.67ID:VhuuBVU8
Appleは突然Swift出してきたりMetal出してきたりArm出してきたりであらゆる分野で考慮するだけ無駄というスタンス
2020/10/02(金) 22:46:19.69ID:Kgg5xh5c
>>561
そうそう。w
Bashをなくしたとして、POSIX互換シェルをわざわざ残すのかと。

そんな心配をするよりも、今使えるBashを謳歌したほうが合理的やろ。
2020/10/02(金) 22:58:56.81ID:r3ReT+S4
その今使えるbashっていうのがmacOSでは3.2なのよね・・・

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/migration_planning_guide/sect-migration_guide-package_changes-bash

Bash-4.0 およびそれ以降のバージョンは、 プロセス置換の構成をブレース展開を使って変更せずに渡すことができるようになるため、
内容の展開はすべて別々に指定し、 各プロセス置換を別々に入力しなければならなくなります。

Bash-4.0 およびそれ以降のバージョンでは Posix が指定するのと同様に、 SIGCHLD が wait の組込みに割り込みを許可するため、
全ての子を待機するよう「wait」を使用する場合、 子を終了したら SIGCHLD トラップは常に呼び出されることがなくなります。

Bash-4.0 およびそれ以降のバージョンは、 クローズ用の区切り文字 $() コマンド置換を検索する場合に
Posix のルールに従うようになり、 旧バージョンのような動作はしなくなりますが、
より多くの構文および解析のエラーを先に捕らえてからコマンド置換を評価するためのサブシェルを生成します。

Bash-4.0 およびそれ以降のバージョンでは、 パイプラインのコマンドのひとつがコマンド一覧を実行している間に
SIGINT によって終了させられた場合、 シェルは割り込みを受けたかのような動作をします。

Bash-4.0 およびそれ以降のバージョンでは、 set -e オプションの処理法が変更されるため、
パイプラインが失敗すると (失敗したパイプライン内の最後のコマンドが単純なコマンドでない場合も) シェルは終了します。
これは Posix が指定するものとは異なります。 この部分の基準を更新する作業が進展中です。
Bash-4.0 の動作はリリースの時点での合意を得ようとしている動作です。

Bash-4.0 およびそれ以降のバージョンでは、"." がシステムの PATH に存在しない場合でも、. (source) ビルトインが
ファイル名の引数を現在のディレクトリで検索してしまう原因となっていた Posix モードのバグが修正されています。
Posix では、このような場合シェルによる PWD 変数内の検索は行われるべきではないと述べられています。
2020/10/03(土) 02:30:20.61ID:GCdjvz0l
>Bashをなくしたとして、POSIX互換シェルをわざわざ残すのかと
何もわかってないのに口出す馬鹿
565デフォルトの名無しさん
垢版 |
2020/10/03(土) 11:56:15.65ID:ylT9+9xh
シェル上で別の種類のシェルが動いたり、種類が異なるシェルが別のシェルの動作をエミュレートしていることを知らないんだろうね。
2020/10/03(土) 12:51:18.99ID:Pwjke0L1
>>564
まあ見とけ。w
どうせあと数年でコロッと変わるんやろ。
2020/10/03(土) 13:59:59.45ID:/+lXvOCZ
変わるも何も現状及びその対応の予測の理解が間違ってるってことなんだがw
2020/10/03(土) 14:04:51.63ID:F0et+WHN
POSIXという標準があるから変わるわけないんだよな
多く使われてるdebian/ubuntuがPOSIXに準拠を頑なに守ってる
/bin/shがdashが多いからPOSIX準拠で書くしかない
そうすればmacOSでも動く
2020/10/03(土) 14:12:51.48ID:/+lXvOCZ
1行目と2行目以降が繋がらない

bashのエミュレーションがちゃんとしてたら問題がなかったのにな
GNUはライセンスにうるさいwくせになぜあんなのなのだかな
2020/10/06(火) 07:21:02.23ID:8TYkjhvC
>>554
chown chown smbd
zip xargs smbd
2020/10/10(土) 22:35:58.03ID:33g/v1Rs
シェルスクリプト関連のツイート見てたらGPT-3?か知らんけど
AIで文章を生成して日本語に翻訳してるボットを発見したw

https://twitter.com/5hc7PFFLfvjD88V
https://twitter.com/5chan_nel (5ch newer account)
2020/10/13(火) 23:49:10.96ID:fWSRS6M8
素人ですが世話になります
POSIXってシェルの最低限の共通規約って認識でいいんだろうか
機能を拡張しても所詮は方言だから封印しとけと
2020/10/14(水) 00:14:50.23ID:1GHjlaSZ
grep -Lqだとqの方が勝つんか…
2020/10/14(水) 00:24:26.43ID:1GHjlaSZ
grep -L pat file > /dev/null って捨てると返り血が変わる…?
2020/10/14(水) 01:29:03.98ID:0TgtAVoq
>>572
POSIXに準拠しておけば、Debian、Ubuntuの/bin/sh(dash)や
Alpine Linux(busybox)やmacOS(古いbash 3系)やmacOSのユーザーシェル(zsh)
でもそのまま、もしくはわずかな修正で動くようになるというメリットが有る

世の中全部bashやろーとか言ってるやつは、Debianで実際にシェルが変わったときや
macOSのbashが古いなどで変化に耐えられず、最新のbashしかしらん
どうせbash使うもんって言いはる羽目になってる

bash依存してるやつは、なにか理由があってbash依存してるのではなく
無知ゆえに必要もないのに[[ ]]を使ったりfunctionキーワードを使ったり
独自のforの書き方をしたり配列を使ってたりするだけ

ちゃんと知っていればbashスクリプトの9割は簡単にPOSIX準拠で書ける
もしPOSIX shではなくbashを使いたくなったら、他の言語を使ったほうが良い
POSIX shの機能は本当に必要なものだけを実装している。それがUNIXの思想

素人はまずPOSIXの機能だけ勉強しとけ
最初にbashから入ると、これはPOSIXで使えるんだっけ?って悩む羽目になる
2020/10/14(水) 01:36:55.66ID:LOnQ9LGm
原理主義者のニオイがする
2020/10/14(水) 02:01:39.11ID:0TgtAVoq
そういや日本人が作った口先だけのPOSIXの原理主義みたいな変なのがありましたねw
3人ぐらいのグループでPOSIXにしろーしろーと叫ぶだけで何も生み出さない

それを使って自分たちは商売してるから
本人にとっては生み出してるんでしょうが

あれに洗脳された学生とかは可哀想です。
だってそのグループ界隈以外ではまったく使われてないものだから
2020/10/14(水) 02:14:34.88ID:rQGDkRcC
>>576
いやいや、ニオイどころか、まるだしやろ。w

現実の動作確認もろくにできない机上のPOSIXを夢想してもしかたない。
んなこと、いちいちやってられんからな。
2020/10/14(水) 03:02:47.56ID:0TgtAVoq
現実の動作確認ならDebianやmacOSやAlpine Linuxでできますが?
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に準拠したやりかたで〜」と言っておけば,
くだらない揚げ足取られずに済んだ訳だ。
時すでにお寿司🍣
■ このスレッドは過去ログ倉庫に格納されています