X



シェルスクリプト総合 その31
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/08/10(土) 23:17:50.64ID:L+B8OP2P
シェルスクリプトに関する総合スレッドです。

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

シェルスクリプト総合 その30
https://mevius.5ch.net/test/read.cgi/tech/1561989867/
0002デフォルトの名無しさん
垢版 |
2019/08/10(土) 23:19:50.86ID:L+B8OP2P
お約束
・特記なき場合、POSIX 準拠の sh 可換シェルが既定です。(Bourne Shellは既にレガシーです)
 つまりシバンは #!/bin/sh です。
 特定のシェル(bash, zsh, (m|pd)ksh, (d)ash, yash, posh, fish, (t)csh など)の専用機能に依存する場合は明示しましょう。
  macOS (10.14以前), GNU/Linux ユーザー(Debian, Ubuntu 系以外) は /bin/sh の実体が bash なので*特に*注意
   自覚なき bashism---シバンが #!/bin/sh なのに bash に依存する構文を使っていませんか?
   ただし Debian, Ubuntu などでは /bin/sh の実体は POSIX sh 互換の dash ですのであまり気にしないでも大丈夫です。
  FreeBSD ユーザーは /bin/sh の実体が ash なので注意。
  Solaris, OpenBSD ユーザーは /bin/sh の実体が ksh なので注意。
  macOS 10.15以降のユーザーは/bin/sh の実体が zsh なので注意。
  android ユーザーは /bin/sh の実体が mksh なので注意。
 csh/tcshでのシェルスクリプトは*まったく推奨しません*。
  (参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIX に準拠しましょう
 有用なリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています。
 最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
  (左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIX の sh(1) に一番近いのは OpenSolaris 由来の Heirloom sh、次点で Debian などに搭載されている Dash shell
  Heirloom sh: http://heirloom.sourceforge.net/sh.html
  Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIX にはシェルスクリプトに便利な小さなコマンドがいろいろあります
 Man ページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
 apropos(1) ないしは man(1) の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
0003デフォルトの名無しさん
垢版 |
2019/08/10(土) 23:21:14.80ID:L+B8OP2P
初心者へのアドバイス
・適した道具を判断するのも頭の重要な使い方。
 シェルスクリプトよりも Per lまたは Python の方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたら man(1) を引きましょう。
・思い通りに動かないときは、まずは sh(1) の -x オプションでトレースしましょう。

回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに「そういうのはPerl, Python使え」と回答するのはやめましょう。
 安易に Perl や Python に逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
・例に対して、その例だけ動くコードを書くのはやめましょう。例は例です。本当に実現したいことを文章から読み取りましょう。
0005デフォルトの名無しさん
垢版 |
2019/08/10(土) 23:57:47.48ID:L+B8OP2P
関連スレ

【Bash】Windows Subsystem for Linux【WSL】6
https://mao.5ch.net/test/read.cgi/linux/1560665525/

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/

【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
0007デフォルトの名無しさん
垢版 |
2019/08/11(日) 02:27:44.34ID:d6NgfAAh
テンプレの「Version 7 UNIX の sh(1) に一番近い」ってそんな根拠ある?
むしろ「POSIX shを最もよく実装してる」ほうが適切な表現じゃね?
0008デフォルトの名無しさん
垢版 |
2019/08/11(日) 02:56:20.42ID:GFStkW/c
>>7
Heirloom shのことだとして(意図的だろうけど)POSIX shではなく
レガシーなBourne shellに近いから「Version 7 UNIX の sh(1) に一番近い」なんだよ

つまり、Version 7 UNIX の sh(1) は Bourne shell。
具体的には ArithmeticExpression $((1+2)) や
Parameter substitution のうち ${p#foo} や ${p%bar} みたいな
POSIXの仕様を実装してない。
0010デフォルトの名無しさん
垢版 |
2019/08/11(日) 06:42:57.65ID:d6NgfAAh
>>8
いや根拠ある?(公式文書内の発表とかで。無い気がする。)
しつこくてごめんね。小さいことが気になる性格なの。

Most scripts that run in the Heirloom Bourne Shell will run with any Unix shell that is still in use in the twenty-first century.
http://heirloom.sourceforge.net/sh.html
0012デフォルトの名無しさん
垢版 |
2019/08/11(日) 09:08:41.84ID:++HFlOfG
Version 7 UNIX の sh(1)やHeirloom Bourne Shellが
「POSIX shを最もよく実装してる」という根拠はないよね
(公式文書内の発表とかでw)
0014デフォルトの名無しさん
垢版 |
2019/08/11(日) 09:14:38.09ID:++HFlOfG
(あ、これ、いつもの人かな?推論能力が圧倒的に低くて、書いてある内容から
「ゆえにThe Heirloom Bourne Shellは POSIXと互換性がない」を導き出せない)
0018デフォルトの名無しさん
垢版 |
2019/08/11(日) 09:47:59.57ID:++HFlOfG
かわいそうだから、せめて日本語訳にしてあげるね。

家宝ボーンシェル
家宝のBourneシェルは、伝統的なUnixシェルのポータブル変種です。
OpenSolarisコードから派生している ため、SVR4 / SVID3レベルのシェルを実装しています。

Bourneシェルは

・スクリプトの移植性テスト。
POSIX.2標準は既存のBourneシェルの動作と互換性のないシェルの要件を導入したため、
BourneシェルはPOSIX準拠ではありませんが、すべてのUnixシェルスクリプト言語の父のままです。
Heirloom Bourne Shellで実行されるほとんどのスクリプト は、21世紀にまだ使用されているUnixシェルで実行されます。
POSIX準拠でBourneシェルで使用可能なシェルスクリプトを記述するのは比較的簡単です。

・レガシースクリプトの処理。
いくつかの歴史的なスクリプトは、Bourneシェル独自の言語機能を使用していました。
それらをポータブルシェル言語に変換するのは難しい場合があるため、
Bourneシェルを使用して実行するのが便利な代替手段です。

・一般的なスクリプト処理。
Bourneシェルは、新しいUnixシェルほど多くの機能を提供しませんが、それでも非常に使いやすいスクリプト言語です。
また、Bourneシェルの言語は20年近く安定しており、この実装でも引き続き安定しています。
これにより、プログラマーが慣れ親しんだBourneシェルは驚くことのないスクリプト言語になります。
これは、新しいシェルの多くとは言えません。

・インタラクティブな使用。
Bourneシェルは、jshとして呼び出され 、端末で実行される場合、ジョブ制御を提供します。
もちろん、コマンド履歴、コマンドライン補完などの派手な機能はありません。しかし、これらの機能を使用すると、
ユーザーの注意をそらす傾向があります。慣れの段階の後、Bourneシェルを使用すると、
より均一で集中的な作業スタイルになります。試してみる。真剣に。
0024デフォルトの名無しさん
垢版 |
2019/08/11(日) 11:19:28.31ID:OeRZAsFl
>>7,10
derived from OpenSolaris code and thus implements the SVR4/SVID3 level
だから、Version 7 UNIX というのはいきなりっぽい
Version 7 UNIX の sh の重要性がまったくわからんが、SVR4 よりは重要、Version 7 UNIX の正当な流れを汲んだうちでの(ソースレベルで?)一番近いから、Version 7 UNIX としたんじゃないかな、そもそもソコを書いた人は

SVID3 は POSIX以前の時期での標準を作ろうとした規格のようなので、「POSIX shを最もよく実装してる」は無いんじゃないかな。SVID3とPOSIXの差異近似がわからんけど

あんま興味ない(使うことはないから)けどチラっと調べた範囲では。調べてもあんま興味わかないなw
0025デフォルトの名無しさん
垢版 |
2019/08/11(日) 12:03:55.85ID:d6NgfAAh
いや〜他人を怒らせないようにしてるんだけど
その当の他人がチガイだとどうしようもないなw
0028デフォルトの名無しさん
垢版 |
2019/08/11(日) 14:43:52.88ID:++HFlOfG
>>24
> Version 7 UNIX の sh の重要性がまったくわからんが
それな。

「Version 7 UNIX の sh(1) に一番近いのは〜」を最初に書いた当時は
まだレガシーなシェルスクリプトが存在したのかもね
このスレ元々UNIX板にあったわけだし

Heirloom shも(世間がPOSIX準拠になりつつある中)
レガシーなスクリプトを処理するために作った書かれてるし
日付を見ると2010年の話?

一般に商用UNIXと呼ばれるもの(macOSは含めない)が
閉鎖的で情報が共有されなくて、質問されても誰も確認できないでしょ?
Linuxばかり使われるようになった。だからその文章も時代に合わない。
次からは修正しておくよ。
0029デフォルトの名無しさん
垢版 |
2019/08/11(日) 15:06:11.53ID:++HFlOfG
テンプレで質問

> ・ワイルドカードは正規表現ではありません。
みんなワイルドカードって呼ぶ? MS-DOSではワイルドカードって言ってたけど
なんとなく最近聞かない気がする。かと言ってグロブと呼ぶか?というとそれも詳しい人ぐらいしか

> ・思い通りに動かないときは、まずは sh(1) の -x オプションでトレースしましょう。
-xオプションと似たやつに-vってのがあるんだね。
みんな使ってる? 俺は使ってみるも、たくさん実行がでてきて面倒くさくて結局見なかったことにしちゃうw
0030デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:20:03.32ID:++HFlOfG
/bin/shの実体が/bin/bashになってる環境がなかったから時間がかかった。
今作ってやってみたけど、やっぱり、bashだとecho -n helloは
(POSIXにはない)-nを認識するね。

# which sh
/bin/sh
# /bin/sh
sh-3.2# ls -l /bin/sh
lrwxrwxrwx 1 root root 19 Aug 11 09:14 /bin/sh -> /usr/local/bin/bash
sh-3.2# sh --version
GNU bash, version 3.2.57(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
sh-3.2# sh
sh-3.2# echo -n hello
hellosh-3.2# exit
exit
sh-3.2# bash --posix
bash-3.2# echo -n hello
hellobash-3.2#

前スレ>>996はMacかな? (x86_64-apple-darwin18)って書いてるからそうだろうね。
Macの環境はビルドがおかしいのか時折変な動きをする。
0031デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:24:50.03ID:k+c7cOcw
ええぇ、自分でMacもって言ってなかったかな?
元レスの人のがが何かはわからないが、その可能性はなくもない、だったらの話だが
エアプで見栄であれもこれもと羅列しただけ?w
0032デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:24:58.94ID:++HFlOfG
へー、たしかに、macOS Mojaveのデフォルト(homebrewではない)のbash 3.2.57だと
echo -n hello が -n hello になるねw

これはひどいwww
なんでだろ。ちょっと調べてみるか。

その前に一言。だからPOSIX準拠で作れと言っただろー!
0035デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:27:23.91ID:++HFlOfG
>>31
デフォルトはHomebrewのbashに切り替えてるのでね。

まさかbashで同じバージョンなのに、Linuxで-nを改行なしオプションと認識して
macOSだと-nを解釈しないとは思わなかった。

まだぐぐってないけど、これ話題になってるんじゃね?
0037デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:28:26.21ID:dSI5JGW8
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
0038デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:28:44.04ID:k+c7cOcw
ああ、
>/bin/shの実体が/bin/bashになってる環境がなかったから時間がかかった
って。ああ、ツッコミどころ満載。わくわくしてきだぞw
そんなグダグダのヤツの傲慢な偉そうなご高説、誰が聞くかっw
0039デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:31:38.54ID:k+c7cOcw
>>31
デフォルトと/bin/shは違うんですけど。/bin/shも書き換えてんのか。OSのアップデートで書き換えられるのに。まあ、ご自由にだから、いちおう信じてあげようw
でも、オマ環を理由にするのは情けないw

結局Appleが悪いにして自分のアホな妄想を否定するのはないんだな。さすがだよ
0041デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:36:37.47ID:++HFlOfG
(macから書き込んでるからID変わってるかも)

まずmacの/bin/shはシンボリックリンクではなく、
またファイルサイズが違っているので /bin/bash と完全に同じものでは無いのがわかる
(おそらくビルドオプションの違いだろう)

$ ls -al /bin/sh /bin/bash
-r-xr-xr-x 1 root wheel 618416 5 4 16:04 /bin/bash
-r-xr-xr-x 1 root wheel 618480 5 4 16:05 /bin/sh

にもかからわず、同じバージョン番号を名乗っている
(ビルドオプションが違うだけだから当然ともいえるが)

$ /bin/sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

そして想像つく通り、echo -n の挙動が違う

$ /bin/sh -c 'echo -n hello'
-n hello

$ /bin/bash -c 'echo -n hello'
hello%
0042デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:37:50.08ID:k+c7cOcw
だろ?そう言ってたんだけど。なに追試してんの?確認できてどうすんの?

Appleが悪いでうやむやに?
0043デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:38:56.40ID:++HFlOfG
>>39
デフォルトっていうのは、OSのデフォルトシェルの話じゃなくて
デフォルトで使ってるシェルって意味だよ。
bash だけで起動するシェル。ログインシェル。
0044デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:40:47.34ID:k+c7cOcw
ユーザ作った時のシェルもデフォルトシェルです。てか、そこはいいよ。信じてあげるって言っているんだから

そんなのじゃなくてな、もっと前にお前がレスしたのを始末つけろよ。なんで逃げる?w
0045デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:45:07.11ID:++HFlOfG
>>42
お前の理屈は、

1. 前スレ>>975は、Macを使ってるに違いない!
2. だけど実行したら動かないから、実行してないに違いない!
3. だから、うっかり #/bin/sh にしてしまったに違いない!
4. コピペもしてない!

という根拠ない想像に基づくものだろ?


俺の理屈は「普段から Macでecho -n を使ってる人なら
Macでecho -nが動かないのを知らないはずがない」から
普段、echo -n が動く環境を使ってる。というお前とは正反対の前提なんだよ。

だからecho -nの部分に書き間違いはなく
[[ ]] がbash依存であることを知らなかったという結論
0047デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:47:21.37ID:2JPwQqrg
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
0048デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:48:15.91ID:++HFlOfG
まあおかげでPOSIX準拠にするべき理由が一つ増えたじゃないかw

同じbashを使っていても、挙動が違う場合がある
POSIX準拠で書きましょう
0051デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:49:00.05ID:k+c7cOcw
>>ID:++HFlOfG
なんで逃げる、やらかしたのは明らかだろう。カスなのか?
まあ、想像できるよ、常時偉そうにしたいんだもんな。普通のレス、単純なミスに対してもたかーいところからのいきなりなダメだしとか普通だもんな。そんなお前が自分の過ちを認めたらプライドがズタズタにでもなるんだろう

...カスだなw
0052デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:49:53.93ID:++HFlOfG
宣言

今度から、echo -n を見かけたら、それはPOSIX準拠してないので
printfを使いましょうと書き込むことにする。
0053デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:50:32.73ID:++HFlOfG
>>51
お前、文句言ってるだけじゃんw
やらかしてる部分はどこかを書けば、
やらかしてないという説明をしてあげるよ?
0054デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:50:49.35ID:k+c7cOcw
>>49
異常だな。自分に強く言われたらすぐ反発するくせに。自分で何をどう言っているのかわかってないのか

てかそういうフリなんだろうな。>>51のままだな
0055デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:52:32.37ID:k+c7cOcw
>>53
自分のレスを見直しなさい
自分の過ちがわからないのによく高慢に他人の過ちをあげつらえられるなあ

まあ、もうわかった。この繰り返ししかないだろうから、カスだと確定します
0056デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:54:05.02ID:++HFlOfG
http://hints.macworld.com/article.php?story=20071106192548833
> This is not a bug. As OS X 10.5 is now certified to follow the Single Unix Specification, its /bin/sh and echo builtin now follow the specification

なるほど。OSX 10.5から仕様変更されたっぽい。

これAppleがオレオレパッチ当ててるのでは?
bash標準ではなさそうな気がする。

流石にAppleのオレオレパッチまではしらんてw
0057デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:54:43.01ID:++HFlOfG
な?さっきから俺はシェルスクリプトの話題をしてる。

ID:k+c7cOcw は、俺の話題しかしてない(笑)
0059デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:56:17.71ID:++HFlOfG
10.4まではmacOSのbashは-nを改行なしと認識していたそうだ

> In fact, I tried echo -n from bash and sh on my 10.4 system and my Linux system and in all cases,
> the -n was recognised as a switch. On both of those machines, /bin/sh and /bin/bash were identical (in fact, on the Linux box, /bin/sh was a symlink).
0062デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:58:37.20ID:++HFlOfG
>>58
古いbashはLinuxで検証してるからね。
macでHomebrew使わないってありえんでしょ?
macではbashも古い3.2.57じゃなくて5.0.7を使ってるよ。
0063デフォルトの名無しさん
垢版 |
2019/08/11(日) 18:59:22.71ID:++HFlOfG
>>60
> お前もその俺のレスにレスしてんですけど?さすがだな

誰にレスしてるかではなくてレスの内容な。
お前は俺の話しかしてないけど、
俺は皆に役立つようにシェルの話をしてる。
0064デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:03:26.79ID:k+c7cOcw
>>57と言っておいて我慢できなくて>>62なのか?>>58もお前だけの話題だけど?そのレスもオマ環の説明って、お前だけの話題だろうw

オマ環でそういうことをしていても、macOS使ってるなら/bin/shがbashだとわかっているだろうに。なぜ/bin/shをbashにする環境作るのがとかのたまうのかわからん。たいした使ってない=Macももただ並べただけだなという「俺の印象」w
てか、そのオマ環を理由にするのは辞めなさい、いつもの高慢なお前には情けないw
0067デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:06:30.10ID:++HFlOfG
確認取れた。やっぱり-nを改行なしと認識しないのは、bashの動きではなく
Appleによるパッチみたいだ

http://hints.macworld.com/article.php?story=20071106192548833 の下の方に書いてあるけど
COMMAND_MODE=legacy /bin/sh -c 'echo -n hello'
と書いたら-nを改行なしオプションと認識した(legacy 笑)

この COMMAND_MODE は bashの機能ではなくAppleが用意したもの
https://developer.apple.com/library/archive/releasenotes/Darwin/RN-Unix03Conformance/

macOS特有の動きだから、それを「bashでは」いうのはおかしいね。
0068デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:09:29.22ID:++HFlOfG
>>64
お前が俺にグダグダ言ってる間に答えを見つけたよ。

オマ環じゃなくて、macOS環境

お前は、bashは-nを認識しない(そのまま-nと出力される)と言っていたが、
それが間違いだとわかったよ。

bashは-nを改行なしオプションとして認識するのは正しい。(俺が今までLinuxで検証していたとおり)
ただしAppleがビルドした改変版bashでは、 Single Unix Specificationに準拠するために
POSIXでは規定されてない-nをそのまま出力されるようになってる。

まあこういう違いがあるから、やっぱりPOSIX準拠は大切だね。
0069デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:10:38.51ID:k+c7cOcw
>>67
俺のレスをよく読もうな。書いてからお前がイチャモンwつけたんだからな

Macを持ってないとかならまだ許すが、自分で自らそのためにもPOSIXというひとつに挙げておいて、確認もせず、オマ環を自分で作ってそれも忘れ、
いろいろ忘れ、トンチキな妄想を吐いていたにもかかわらず、なかったことに&なにか知らんがwごまかしとしか思えないまったく真摯な態度が皆無なヤツです、いつもの高慢ちきは
と(改めてw)証明wできたので、満足しとくわw
0070デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:12:20.49ID:k+c7cOcw
>>68
何を言いたいのかわからんが、現象は変わらない。そしてお前の間違いは変わらない

な?こういうやつだな、やっぱり
0071デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:14:12.80ID:++HFlOfG
>>64
> macOS使ってるなら/bin/shがbashだとわかっているだろうに。なぜ/bin/shをbashにする環境作るのがとかのたまうのかわからん。

お前、macOSしかbash動く環境知らんのか?

bashはGNUプロジェクトで作られたもので、GNU環境(例 Linux)が一番に確認すべき環境だろ
bashでの動きの話をしてるんだから、Linuxで検証するのが一番手っ取り早い。macOSの話を持ち出したのは「お前が」「あとからだ」
Debinaでは/bin/shの実体はdashなんだから、/bin/shの実体がbashの場合の挙動を確認するには環境を作らなければいけない

もっとも、macOSでは、/bin/shは/bin/bashへのシンボリックリンクではなく
本物のbashでもなく、Appleによる改変版bashだったわけだけど
0072デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:16:41.36ID:k+c7cOcw
>>71
トンチンカンすぎるな。めちゃくちゃ。最後だぞw安心しろww

/bin/shの実体が/bin/bashになってる環境がなかったから時間がかかった
Macあるやん、macOS使ってお前ほどの自称知っている人なら知ってるハズだろ

だよ。なにをトンチンカンなことを。まあ、わかるよ、ごまかすのに必死なのは。アホらしい
0073デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:18:47.82ID:dSI5JGW8
相手は神様なんだから敬ってやれよ

> From: [36] デフォルトの名無しさん <sage>
> Date: 2019/08/11(日) 16:10:55.15 ID:++HFlOfG
>
> 現実世界では私は神なのだ
0074デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:19:19.67ID:++HFlOfG
>>69
> 確認もせず、オマ環を自分で作ってそれも忘れ、

前スレ>>975でコードが書かれてから
お前は「macOS環境のbash」とは一言も言わず、
bashの場合としか言っておらず、

>>996で書いた実行ログの中にapple-darwinという文字が含まれていたのを
俺が見つけたっていう事実を忘れてないか?w
0076デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:20:19.99ID:++HFlOfG
>>72
> /bin/shの実体が/bin/bashになってる環境がなかったから時間がかかった
> Macあるやん、

Macでは/bin/shの実体は/bin/bashではない。バイナリが違ってる。
ってさっき書かなかったか?
0077デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:21:29.72ID:++HFlOfG
>>75
それはその数個上のレスを見ればわかるよ。

「現実世界では俺は優れたプログラマ」(といわれても証拠ないしなーw)
とか言ってるやつがいたから、そいつに対するレス。
0079デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:24:54.08ID:++HFlOfG
この話スレ建てる前に知りたかったなー。

 macOS (10.14以前), は /bin/sh の実体が (Apple改変版)bash なので*特に*注意

って書き直したい
0080デフォルトの名無しさん
垢版 |
2019/08/11(日) 19:35:35.33ID:++HFlOfG
これはひどいwww

http://moriyoshi.はてなぶろぐ.com/entry/20090208/1234108045

> Leopard の「ターミナル」で、/bin/sh の echo -n がおかしい挙動を示します。
>
> sh-3.2$ echo -n foo
> -n foo
> sh-3.2$
> 分ったこと:
>
> /bin/sh は bash だが、/bin/bash とは違うもの
> which echo すると /bin/echo と言われるが、built-in のようだ
> iTerm から起動すると echo -n はちゃんと動く
> ターミナルで /bin/sh の echo は、iBCS2 コンパチとして動くのでしょうか?
> google しても解決方法は分りませんでした。ご存知の方は教えて下さい。(_ _)
> ...
>
> kzysk: なぜか iTerm は環境変数 COMMAND_MODE=legacy, ターミナルは unix2003 になっていて、
> その違いで sh 上の echo の動きがかわるらしいです。
0081デフォルトの名無しさん
垢版 |
2019/08/11(日) 22:27:57.25ID:tjpar2Yg
やっぱりどこでも動くシェルスクリプトなんて妄想なんだねw
0083デフォルトの名無しさん
垢版 |
2019/08/11(日) 22:39:31.82ID:owKtPG/2
POSIX準拠を意識している者にとっては、-nが使えないとか
想定の範囲内だからね。yashとか使えないわけだし。
だから最初から-nを使うぐらいならprintfを使ってる。
POSIX準拠でコードを書いてる人にとっては何ら問題ないわけ
0086デフォルトの名無しさん
垢版 |
2019/08/11(日) 23:05:15.27ID:tux8oNSc
>POSIX準拠を意識してない未熟もの
不特定多数が含まれるというのがわからないのね
さすがあれだけアホ晒しても僕偉い人ww
0090デフォルトの名無しさん
垢版 |
2019/08/12(月) 00:50:54.61ID:kdU0FwTT
神様なんだろ。許してやれ
(しかしネットは怖いな。やらかしたことがほぼ一生残る。)
0093デフォルトの名無しさん
垢版 |
2019/08/12(月) 01:48:53.53ID:kdU0FwTT
揚げ足というか、単に普通の失敗(理解不足)なんだけどな。
謝らないのが問題だった。
素直に謝罪しておけばよかったものを…。
0095デフォルトの名無しさん
垢版 |
2019/08/12(月) 02:05:47.65ID:U5E/4roV
Mac特有の挙動(UNIXの要求に合わせるためにAppleが独自で変更してる)なのに
それに気づかないで、bashでは-nに対応してないって騒いでたんだっけ?
0096デフォルトの名無しさん
垢版 |
2019/08/12(月) 03:01:38.96ID:vrbZPf3l
そう。挙句の果てに、Macでテストしてなかった
お前が悪いとか言って荒らし始めた。
0097デフォルトの名無しさん
垢版 |
2019/08/12(月) 05:08:02.14ID:kdU0FwTT
自分に都合が悪くなるとすぐ韓国とかよく分からんこと持ちだして話を逸らすあたり,
これは重症っすね……。
0098デフォルトの名無しさん
垢版 |
2019/08/12(月) 08:13:29.23ID:TQ9KMPr7
これは人が離れて行くのも無理はないな

・自分の誤りを絶対に認めない
・人間関係は上下の主従関係のみで平等の概念がない

どこかで見たことあるような...おや、誰か来たようだ
0099デフォルトの名無しさん
垢版 |
2019/08/12(月) 08:14:46.28ID:d52ffprB
たしか前スレでも、質問してる側が下なんだから
回答する側に対してへりくだれ的なことを言ってたよな
0100デフォルトの名無しさん
垢版 |
2019/08/12(月) 08:16:14.37ID:d52ffprB
これだな。平等の概念がない

609 自分:デフォルトの名無しさん[sage] 投稿日:2019/08/07(水) 12:45:25.69 ID:WK8NJ3/V [18/28]
>>608
回答者のほうが偉いみたいな考え方。
質問者と回答者は対等です。

610 返信:デフォルトの名無しさん[] 投稿日:2019/08/07(水) 13:00:34.72 ID:9POPBXN5 [8/13]
>>609
対等じゃないよ。金を出す側と受け取る側と同じだもの。同じわけがないじゃん。
君はなんでそんな現実と食い違う思想を持ってるんだ?それでは人とのトラブルになるだけで世の中渡っていけんだろう。
0103デフォルトの名無しさん
垢版 |
2019/08/12(月) 11:05:57.03ID:kdU0FwTT
そうせざるえないほど酷い人がいるからね。
このスレの住人は結構優しいんじゃないかな。
人格欠陥者を罵しったり無視することは簡単だけど,
その欠点を皆で指摘してくれるなんてかなり貴重だと思う。
まあどうせ当の本人は自分に対する攻撃としか捉えず,
都合の悪いことには目を塞ぐ能力をフル活用して目を翥すんだろうが。
0104デフォルトの名無しさん
垢版 |
2019/08/12(月) 11:48:18.69ID:7x51tVmW
bash 依存だけどこんな関数を作って使ってた事もあった

function _join {
local IFS="$1"; shift; echo "$*"
}

bash$ _join , {1..10}
1,2,3,4,5,6,7,8,9,10
0105デフォルトの名無しさん
垢版 |
2019/08/12(月) 11:51:12.48ID:OLWOasI9
いくらID変えても同じ言動なのがいよね
欲を言えばコテを付けてくれれば処分しやすいんだけど
0106デフォルトの名無しさん
垢版 |
2019/08/12(月) 12:15:08.81ID:kdU0FwTT
ていうか3スレくらい前からワッチョイ導入しようという話がチョイチョイ出てはいる。
0107デフォルトの名無しさん
垢版 |
2019/08/12(月) 15:40:50.17ID:FEiQT6YL
>>104
それをbash依存にしないのは簡単だよ
localの代わりにサブシェルを使えばいい

_join {
(IFS=$1; shift; echo "$*")
}

ちなみにlocalはPOSIX準拠じゃないけど、
local もしくは localと同等のことができるtypeset のどちらかが
POSIX準拠シェルのすべてに(おそらく)搭載されてるから
2パターン作ることになるが、サブシェルを使わずに作ることも可能

面倒だからOLDIFSに対比させるのが楽だけどねw
0110デフォルトの名無しさん
垢版 |
2019/08/12(月) 16:18:53.19ID:7x51tVmW
IFSを使う場合はデリミタに1文字しか使えないので
その後はこんな↓ふうに書き直した(けど最近は全く使うことがない)

function _join {
local d="$1"; shift; printf '%s' "$1"; shift;
printf '%s' "${@/#/$d}"; echo;
}

$ _join '->' {{1..4},5,{4..1..-1}}
1->2->3->4->5->4->3->2->1
0112デフォルトの名無しさん
垢版 |
2019/08/12(月) 16:20:31.00ID:VzSWusfF
shellcheck のような書き方を指導する奴で
POSIX準拠の書き方でないところをチェックするツールでもあるのか?

滅茶苦茶詳しすぎる
0113デフォルトの名無しさん
垢版 |
2019/08/12(月) 16:37:37.51ID:FEiQT6YL
>>110
それをbash依存なくするにはループだろうな
たぶん誰でもわかると思うのでコードは省略w
local変数使わなくても行けるかも

>>112
shellcheck 以外だと使ったことがないけど shfmt
・・・でチェックできるのか知らない。使い方がよくわからないw

shfmtという名前を忘れたのでぐぐったら bash依存チェックするツールがあったよw
https://sourceforge.net/projects/checkbaskisms/
https://github.com/openstack/bashate

俺はもうだいたい覚えたね。POSIX準拠の書き方を調べたと言うよりも
とあるシェルで動かない。なんでや?POSIX準拠じゃないんかい。の繰り返しで。
だからPOSIX準拠だけど、シェルのバグで動かないっていうのも頭に入ってる。
0114デフォルトの名無しさん
垢版 |
2019/08/12(月) 16:53:21.75ID:FEiQT6YL
あ、たぶん>>112の疑問に答えてないw

なんで古いbashで動かないのかがわかったかと言うと
古いバージョンのシェルをビルドしたテスト環境を用意していて
単に実行して確認しただけの話。
0115デフォルトの名無しさん
垢版 |
2019/08/13(火) 12:23:48.45ID:PvshuRsa
$ ksh -c 'echo $KSH_VERSION'
Version AJM 93u+ 2012-08-01

これのAJMはなんだろう?と思ってググったけど、
コンパイル時のオプションってことでいいのかな?
https://www.in-ulm.de/~mascheck/various/shells/ksh_versions.html

After "Version" now there is a concatenation of letters indicating compile time options:

A SHOPT_AUDIT /* keyboard logging */
B SHOPT_BASH /* bash compatibility code */
L SHOPT_ACCT /* accounting */
M SHOPT_MULTIBYTE /* multibyte character handling */

Jはこれ?
J SHOPT_COSHELL /* job pools */
0116デフォルトの名無しさん
垢版 |
2019/08/15(木) 23:08:43.05ID:xN8IaB/K
前スレでboshのビルドができないと言っていた人へ
2019-08-13版でビルドできるようになってます。

2019-06-13 OK
2019-07-15 NG
2019-07-22 NG
2019-08-13 OK
0117デフォルトの名無しさん
垢版 |
2019/08/17(土) 20:53:09.43ID:R5VCpMP+
POSIXで定義されてるbatchとかatとかって使ってる?
俺は可搬性を失なう覚悟でcron使ってるけど
0119デフォルトの名無しさん
垢版 |
2019/08/17(土) 21:23:22.11ID:g4f/iCif
>>117
atは昔使ったことがあるけど、覚えてないレベル
batchは使ったこと無いな。

POSIXなんだよな。なんでかPOSIXの範囲にこんなものを
含めちゃっていいのか?って気がしてるw
0120デフォルトの名無しさん
垢版 |
2019/08/17(土) 21:26:52.13ID:g4f/iCif
ん?cronはPOSIXじゃないけど、crontabはPOSIXなのか?
これはコマンドは決まってるけど、それを実現しているものは決まってないってことなのかな?
0121デフォルトの名無しさん
垢版 |
2019/08/17(土) 21:30:38.30ID:R5VCpMP+
>>120
多分manと同じ感覚なんじゃないかな?
manというコマンドは決まってるけどroffの仕様は決まっていない。
0122デフォルトの名無しさん
垢版 |
2019/08/18(日) 13:02:29.86ID:zqR8kD3Y
>>119
SCCSまで含めようという動きがあるんだから
ジョブ管理くらいあってもおかしくないw

それがPOSIXにほんとうに定めるべきコマンドなのか
っていう疑念は拭えないけど。
0123デフォルトの名無しさん
垢版 |
2019/08/18(日) 13:29:09.33ID:KK6bG3/n
いつまでも完成しそうもない開発系?のツールなんかより
dateとかsortとか基本形のコマンドのオプションを拡張すればいいのに
だからいつまで経ってもMacのコマンドは貧弱でhomebrewでcoreutilsを入れなければいけなくなる
LinuxをバンドルしたWSLは便利になった。
0124デフォルトの名無しさん
垢版 |
2019/08/18(日) 19:00:47.29ID:zqR8kD3Y
単に拡張すりゃいいってもんじゃない。
どのシステムでも使えることを優先すべき。
0125デフォルトの名無しさん
垢版 |
2019/08/19(月) 03:40:41.24ID:ZZoimR+D
>>123
> dateとかsortとか基本形のコマンドのオプションを拡張すればいいのに
それな。 date +%s がPOSIX準拠じゃないとかびっくりやわw
unix timeどうすりゃいいねん。
0126デフォルトの名無しさん
垢版 |
2019/08/19(月) 04:03:23.22ID:M9mgefHn
>>124
拡張っていうか仕様の標準化だな
POSIXScript2020 とかいう仕様を作って
各社に対応を促す。

新POSIXScript2020に準拠していれば
どこでも同じように動く
0129デフォルトの名無しさん
垢版 |
2019/08/19(月) 08:35:48.66ID:xlQPwL5+
ていうか言語仕様の素早い更新・機能追加が好きならPython使えば?
過去互換性も同じくらい重視したいならC#-shell
0132デフォルトの名無しさん
垢版 |
2019/08/19(月) 09:51:47.61ID:W/U4wDij
現在ってまだPOSIX改定されてるでしょ?
歩みが遅いことを批判するのは正しいが、
そこにPOSIXはもういらないっていうのは、
POSIXの存在を否定してるよ。
0134デフォルトの名無しさん
垢版 |
2019/08/19(月) 09:59:46.47ID:W/U4wDij
>>127と戦ってるんだけど?

結論としては、POSIXは必要で、POSIXは改定されてる。
新しいPOSIXに対応する各社のメリットがわからないなんてなw
0135デフォルトの名無しさん
垢版 |
2019/08/19(月) 10:13:25.39ID:U/sDEGN5
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
0136デフォルトの名無しさん
垢版 |
2019/08/19(月) 11:28:24.99ID:xlQPwL5+
文体がちょっと違うから危うく荒しに構うところだった。
いつものチガイか。
0137デフォルトの名無しさん
垢版 |
2019/08/19(月) 11:36:19.43ID:JcVwKxxm
>>134
POSIX要らないとか一言も書いてないのだが
なんか変な妄想にとらわれてる人なの?いつもの
0139デフォルトの名無しさん
垢版 |
2019/08/19(月) 12:46:41.76ID:IzREAmBO
シェル単体の交換可能性を担保したところで出来ることはたかが知れてる。
システムとして実用的なレベルまで規格拡張しないと使いものにならない。
現状のPOSIXは最低限のI/F仕様を規格化するだけの中途半端な規格だ。
将来的にネットワーク、ハードウェア管理、セキュリティなどシステムとしての仕様が標準化され、全てのシステムがそれに準拠するまでは、POSIXに固執する必要性は無いと言っていい。
もちろん、可能な範囲で可搬性を追求することは間違いではないと思うぞ。現状では限界があるということだ。
0140デフォルトの名無しさん
垢版 |
2019/08/19(月) 12:51:57.60ID:4iryI+Qn
現実として問題になってるのは、半ば当たり前のように書かれる
Linuxで動くコマンドが、macOSで動かないことだよな
ググって、なるほどこれでできるのか、って思ってもmacOSで動かないのは問題
0142デフォルトの名無しさん
垢版 |
2019/08/19(月) 12:58:21.94ID:IzREAmBO
>>141
シェル「だけ」とは言っていない。
ここはシェルスクリプトのスレだから、シェルについて言っている。
POSIXについては>>2を読めば分かる。
0143デフォルトの名無しさん
垢版 |
2019/08/19(月) 13:02:42.41ID:4iryI+Qn
>>142
主張がよくわからないんだけど
「シェル単体の交換可能性を担保したところで出来ることはたかが知れてる。」から、
現状のPOSIXは中途半端で、もっといいものにするために新しいPOSIXを
規格化するべきだって言ってるってことあってる?
0144デフォルトの名無しさん
垢版 |
2019/08/19(月) 13:23:29.26ID:oONnFCD4
POSIXのような標準はそう簡単には変更できないだろ。バージョンによるになるから
そして、ツールを作るのは大なり小なり思想があってやっているんで、言うようなできる最大のものに合わせるなんてなりっこない
文句なり言うなら、POSIXにではなくBSDに言う方が現実的だし、文句言うくらいな自分で実装してBSDに上げればいいだろう。上げても却下されるとかあるかもだがw
言っているのは単にWebで探した事例がLinuxでBSDだと動かないってのだけだもん
0145デフォルトの名無しさん
垢版 |
2019/08/19(月) 13:40:48.28ID:4iryI+Qn
>>144
難しく考えすぎでしょ。すでにある実装を採用すればいいだけ
思想なんかは、既に実装されてる時点で問題ないということだし。

POSIXにではなくBSDに言う方が現実的というけどBSDの現状知ってる?
すでにgreadlinkとかgtarとか結局GNU版を実装しちゃってるの。(その逆は聞かない)
そういう二重開発をなくすためにも、今の実装(の一部)をPOSIXにしてしまうべきだと思うね
0146デフォルトの名無しさん
垢版 |
2019/08/19(月) 13:51:36.11ID:oONnFCD4
>>145
その採用がだよ。やりとり見てみ。はいそうですねでは進んでないから
それはいらないとかふつうにあるぞ。POSIXに限らず

何言ってるの?単にBSDにGNU coreutilsのパッケージがあって、それが入ることもあるってだけだよ。gって自分で付けて気づかないの?GNU coreutilsが入っているのが嫌という人も居るようだけど
0147デフォルトの名無しさん
垢版 |
2019/08/19(月) 13:53:39.09ID:4iryI+Qn
>>146
> はいそうですねでは進んでないから

? 思想とかなんとか困難な道を乗り越えて見事、採用されたものを
POSIXにも入れればいいだけって言ってるんだけど
0148デフォルトの名無しさん
垢版 |
2019/08/19(月) 14:01:04.44ID:oONnFCD4
何を言いたいのかさっぱり

BSDも標準では入ってないぞ GNU coreutils は。何かそれを必要としたパッケージがあってそれにともないだろう
パッケージは誰かが作ってそれなりに利用されるのならわりと簡単にだぞ?パッケージだからな。必要な人は入れるというだけの
0149デフォルトの名無しさん
垢版 |
2019/08/19(月) 17:39:47.54ID:xlQPwL5+
・POSIXに準拠することにはメリットがある
↑これは俺もそう思うけど(正しいかどうかは別にして)
・今のPOSIXでは不十分なので,規格を拡張して,各社にそれを追従するよう促すべきだ
↑これは違うと思う。POSIXの「不便さ」は「どこでも動く」ことの引き換えであることを忘れてはいけいない(ルポ風)
0151デフォルトの名無しさん
垢版 |
2019/08/19(月) 18:49:04.48ID:0HwI7cO5
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね。
0152デフォルトの名無しさん
垢版 |
2019/08/19(月) 19:12:44.68ID:peefgVfy
Write once, Bug anywhere.
0153デフォルトの名無しさん
垢版 |
2019/08/19(月) 19:43:03.92ID:6nSAEgtv
>>149
でも「今のPOSIXでは不十分なので,規格を拡張して」は
遅いながらも今のPOSIX団体がやってることですよ?
POSIX団体がやってることを批判するんですか?
0154デフォルトの名無しさん
垢版 |
2019/08/19(月) 20:19:55.37ID:WiF5XT2w
bashで長いシェル書いてるといつもたくさんファイルを生成してしまうんだが上手い具合に生成しなくて済む方法ってある?
0157デフォルトの名無しさん
垢版 |
2019/08/19(月) 20:28:19.59ID:WiF5XT2w
>>155
どっかからデータをとってくる

raw_file(最初)
user_file
user_and_id_file
format_file(完成形)

めっちゃテキトーに書いたけどこんな感じで4つぐらい作られてしまう
rmで消すのって有りなのかな
0158デフォルトの名無しさん
垢版 |
2019/08/19(月) 20:29:18.05ID:oWmB5KZ/
はぁ? と言われましても、
無駄なら無駄なところをなくせ、必要ならそうするしかないで終わるんだが?
それじゃ全く何もわからないよ
0160デフォルトの名無しさん
垢版 |
2019/08/19(月) 20:50:25.65ID:JcVwKxxm
>>149
おれは、促すまではいいと思うが、こんな所での妄想レベルの機能なんか
促されたからってそうホイホイ実装しないだろうと思うんだな
0161デフォルトの名無しさん
垢版 |
2019/08/19(月) 20:53:38.13ID:PiISpjsD
>>160
人の話ちゃんと聞こうぜ?
誰も妄想レベルの機能を言っちゃいない。
既に実装済みの機能をPOSIXで標準化しようって話をしてる。
0162デフォルトの名無しさん
垢版 |
2019/08/19(月) 20:58:54.83ID:QrnBNgWe
pasteで処理の結果をくっつける方法ってありますか?

処理A、処理B、処理Cの計3つでファイルを作成せずにくっつけたいです。
0164デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:03:35.55ID:PiISpjsD
>>162
pasteは複数のファイルを受け付ける
pasterは標準入力からも受け付ける

この二つのどちらかまたは両方を使えばでできるでしょ?
0165デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:03:42.78ID:peefgVfy
プロセス置換でできるかな?
0168デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:08:14.71ID:PiISpjsD
pasteは複数の標準入力を受け付けるみたいね

printf '%s\n' a b c d e f g | paste - - -
a b c
d e f
g

だから処理A、処理B、処理Cをそれぞれ1行ずつ
出力できるならくっつけられるね。
0169デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:12:53.53ID:PiISpjsD
あとは処理A、処理B、処理Cの順でデータを出力するなら、
それぞれ変数に入れといて、1行ずつとりだすとか。
まあできなくはない。
0172デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:38:04.83ID:PiISpjsD
>>162
あ、nlとsort使えばいけるじゃん。

(
処理Aを出力 | nl -i3 # 1, 4, 7 と行番号をつける
処理Bを出力 | nl -i3 -v2 # 2, 5, 8, と行番号をつける
処理Cを出力 | nl -i3 -v3 # 3, 6, 9, と行番号をつける
) | sort -n | paste - - - | 行番号を削除

これでできないかな?
行番号を消すのは、nlの-sで区切り記号をつけられるから、
cutかsedでやればいいかな? 1行目が1ってわかってるから、
行番号の文字数もわかるので、あとはどうにかw
0173デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:52:44.53ID:PiISpjsD
こんな感じかな?

a() { printf '%s\n' a b c d e; }
b() { printf '%s\n' A B C D E; }
c() { printf '%s\n' 1 2 3 4 5; }

{
a | nl -i3 -v1 -s:
b | nl -i3 -v2 -s:
c | nl -i3 -v3 -s:
} | sort -n | cut -d: -f2- | paste - - -

出力
a A 1
b B 2
c C 3
d D 4
e E 5
0174デフォルトの名無しさん
垢版 |
2019/08/20(火) 07:40:59.29ID:Gkd3xMH4
そのsortって安定だっけ。
じゃなかったら処理結果が入れ替わるおそれない?
0176デフォルトの名無しさん
垢版 |
2019/08/20(火) 08:24:06.78ID:Gkd3xMH4
POSIX sortだと-s(=stable sortのs)オプションが提供されてないので
どう足掻いても安定にはならんな。

「たまたま」順番が変化しない場合もあるやもしれんが。
0179デフォルトの名無しさん
垢版 |
2019/08/20(火) 13:41:04.53ID:tzbk8R3g
安定の書き込みクオリティ
0180デフォルトの名無しさん
垢版 |
2019/08/20(火) 13:47:15.01ID:/V4ccaND
シェルスクリプトってテキストファイルこねくり回すくらいしかできないんだよな
0183デフォルトの名無しさん
垢版 |
2019/08/20(火) 17:15:25.76ID:OyLrpvkx
使えないの挙げたほうが速いのでは?
0185デフォルトの名無しさん
垢版 |
2019/08/20(火) 17:47:53.72ID:CuOLtXP9
シェルスクリプトでバイナリを扱いたければ
odを使うしか無いだろう。

zshはNULLを扱えたはずだが、
bashやそれ以外はNULLを扱えない。

例のawkおじさんは、awkスクリプトで頑張ってるようだが
もちろんあれはシェルスクリプトではない
0187デフォルトの名無しさん
垢版 |
2019/08/20(火) 17:57:11.37ID:Gkd3xMH4
無知ですまんがAWKおじさんってだれ?
なんか否定的な書き方だけど悪名高いコテハン?
0188デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:00:14.90ID:CuOLtXP9
>>187
自称シェルスクリプトで色々頑張ってる人。ググればわかる。
悪名高いコテハンではないが、俺的にはあのセンスが受け入れられない。

色々頑張ってるが、コードを見るとawkスクリプトを
シェルスクリプトで生成して、メインの処理はawkで
実行してるのでダサい
0190デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:05:24.00ID:CuOLtXP9
odの他にhexdumpとかでもできるがhexdumpはPOSIXじゃない。
あとbase64もPOSIXじゃない。

あとは出来る可能性があるとすれば uuencode だけど
あれを処理するのは難しいだろうな。
0191デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:07:02.56ID:CuOLtXP9
>>187
> なんか否定的な書き方だけど
別に否定はしてない。awkもPOSIX準拠だから物自体はいいけど
シェルスクリプトじゃないよねって話
0194デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:19:45.77ID:5hgm7I5A
>>193
base64をしたいんじゃなくて、base64コマンドはPOSIXじゃないって意味なんだけど
その文章の読めなさ、相変わらずやなw
0195デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:23:52.47ID:PFkWfbQh
POSIX、POSIXとか言ってるやつも、AWKおじさん並みのKitty。
0196デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:25:32.24ID:Gkd3xMH4
Base64を実現したくはないのにbase64コマンドが必要な状況ってどんなのだろう…?
0199デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:49:07.29ID:5hgm7I5A
ふぅ。アスペに説明しても理解できないかもしれんが(他の人は理解できるだろうから書くけど)

1. シェルスクリプトはテキストを扱えない。という話が発端 (>>180
2. バイナリを扱うにはどうするか?→バイナリをテキストに変換するコマンドを使えば良い
3. POSIXの範囲ではodが最適。hexdumpやbase64コマンドはPOSIXではない

ここまではまともな流れ。

なぜかBase64を実現したいことだと勘違いする>>193

(バイナリ→テキストを実現するための)base64 "コマンド" の話だというと

なぜかBase64を実現したくないのにとか、斜め上のことを言い出す>>196
0202デフォルトの名無しさん
垢版 |
2019/08/20(火) 20:02:58.01ID:ar+OimNr
こいつ素でやってるのか?w

会話の流れがまともだって言ったら、
今度は主張がまともと言ってるんだと読み間違えやがったw

まあ確かにそのとおりではあるが、
文章はそう読めるはずがないよな
0205デフォルトの名無しさん
垢版 |
2019/08/20(火) 21:27:12.41ID:ar+OimNr
>>204
あんた最後になにもレスしてないよね?
お前が間違っていましたってことで終わったの?w
0206デフォルトの名無しさん
垢版 |
2019/08/20(火) 21:28:59.99ID:ar+OimNr
176 名前:デフォルトの名無しさん[sage] 投稿日:2019/08/20(火) 08:24:06.78 ID:Gkd3xMH4 [2/10]
POSIX sortだと-s(=stable sortのs)オプションが提供されてないので
どう足掻いても安定にはならんな。

「たまたま」順番が変化しない場合もあるやもしれんが。

177 自分:デフォルトの名無しさん[sage] 投稿日:2019/08/20(火) 08:37:08.94 ID:JOMXhFk+ [2/2]
なんで重複しない行番号の順にソートして並びが入れ替わるんだよw

178 名前:デフォルトの名無しさん[sage] 投稿日:2019/08/20(火) 12:54:26.88 ID:/fB0Ptq3 [1/2]
>>176
「安定」の意味分かって書いてる?

179 名前:デフォルトの名無しさん[] 投稿日:2019/08/20(火) 13:41:04.53 ID:tzbk8R3g
安定の書き込みクオリティ
0207デフォルトの名無しさん
垢版 |
2019/08/20(火) 21:30:41.86ID:ar+OimNr
ここで、終わったって自分で言ってるから、
ここで\(^o^)/オワタなんだろうなw
0208デフォルトの名無しさん
垢版 |
2019/08/20(火) 22:46:08.19ID:Gkd3xMH4
お爺ちゃん怒りの3連レス。そんなに熱くならなくてもいいのに。冷房がもったいないw
0213デフォルトの名無しさん
垢版 |
2019/08/21(水) 11:27:36.55ID:eilohrgH
思ったんだけどbash依存するのってなんの機能を使いたくてbash使うの?
bashだけにある機能の事なら知ってる
0215デフォルトの名無しさん
垢版 |
2019/08/21(水) 11:42:23.31ID:CWF24/8E
別に使いたいわけじゃなくて、ぐぐったらそれがbashスクリプトだったってこと?
じゃあそのbashスクリプトを書いた人はなんでって話になるけど
0216デフォルトの名無しさん
垢版 |
2019/08/21(水) 11:43:24.61ID:CWF24/8E
訂正

× そのbashスクリプトを書いた人はなんでって話になるけど
○ そのbashスクリプトを書いた人はなんの機能を使いたくてbashを使っているの?
0217デフォルトの名無しさん
垢版 |
2019/08/21(水) 12:37:03.95ID:+hDHTeft
bashしか使わない人がbash依存して何か問題あるのかね

シェルに限らずLinuxしか使わない人が「Windowsでも動く」プログラムを書く必要はないし

(シェアの低い変なコンピュータ使ってる人はその人だけ苦労すればいい)
0218デフォルトの名無しさん
垢版 |
2019/08/21(水) 12:38:05.34ID:tOxptV2F
> bashしか使わない人がbash依存して何か問題あるのかね

問題ないよ。なにを目的にbash依存してるのか聞いてるだけ
0219デフォルトの名無しさん
垢版 |
2019/08/21(水) 12:58:08.94ID:23vMmTO3
>>218
>>217って言ってるだろう
bashを使い他を使うこともないから、わざわざ他を意識する調べることがないってことだろ
0220デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:00:19.86ID:tOxptV2F
>>219
bashのなにかの機能を使いたくてbashにしているわけじゃないってこと?
配列とかbashにしかないなにかの機能を使いたいからbashを使ってるんじゃないの?
0221デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:02:07.60ID:23vMmTO3
大多数はそんなこと気にしてないだろう
配列使うにしてもシェルスクリプトで配列使えるか調べ、現在使ってるシェル(大多数がbashだろう)で使えればそう使ってるだけだろう
0222デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:05:16.74ID:tOxptV2F
なんかそれだとbashにする理由はないのに
bash依存してるって言ってるように見えるなw
0223デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:07:38.33ID:23vMmTO3
逆でもあるだろうに。それで問題ないなら問題ないだろに
てか、>>217って言ってるのをを未だに理解できないの?理解したくないの?
0224デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:09:19.14ID:ttxmDenw
結果的にbash依存になっているが当人はそんな事を意識していない、って感じ
0225デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:09:33.13ID:tOxptV2F
>>223
君が質問に答えないからだよ

質問
> 思ったんだけどbash依存するのってなんの機能を使いたくてbash使うの?

結論
特になにかの機能が使いたいわけではないが、動いてしまったからbash依存になっただけ
0226デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:11:10.44ID:23vMmTO3
そう>>217が言っているんだがな。なにか文を変えたいだけか?それもいやらしく
いつのもやつか、やっぱり
0227デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:11:19.76ID:tOxptV2F
>>224
そうそう。そういう感じの答えが欲しかった。

(便利だから)特定の○○の機能が使いたい
or 理由はない

そういう答えを期待していた。
0228デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:12:38.86ID:tOxptV2F
bashの機能のうち、これは絶対欲しいっていう機能は
あまりないってことなのかな?
0229デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:18:24.42ID:8muhIeVb
最初から「bashの便利な機能」を聞いてるのに、
思いつかないなら無いって言わないから話がこじれるんだろう。
0230デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:26:22.43ID:23vMmTO3
bashの便利な機能ってのが何を聞いてるのか曖昧だからな
kash,zshなどでも同じくあるのではないあくまもでbash独自の機能なのかなんななの曖昧
シェルスクリプトに限らずスクリプトに限らずマルチプラットフォームを意識するかどうかの話にならざるを得ないだろう
0231デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:28:58.51ID:rB/3mk9e
という話をして欲しいんじゃなくて
(あんたが思う)bashの便利な機能を聞いてるんだよ
0233デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:30:58.28ID:23vMmTO3
ksh,zshなどでも同じくあるのではないあくまもでbash独自の機能なのかなんなのか曖昧

bashの便利な機能もどっちにしろそれが使えないとわかった時に気がつくものだろう。もちろんそんなに便利でもないのもあるだろうけど
0235デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:32:58.59ID:oH2mxJhX
>>233
POSIXにはなくて、bashにしかない機能。
kshやzshの話は聞いてないので無視して良い

これで質問に答えられるよね?
0236デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:35:01.88ID:23vMmTO3
配列w
readのオプション
他にもあるけど、すぐに思いつかない、便利と意識して使ってるわけではないからな。空気と同じだよ
0238デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:39:22.38ID:dVKYqL0H
ほんと質問に答えさせるのに何レス消費させるのかw

配列、連想配列、readのオプション、"&>"
これぐらいか?
0239デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:40:56.88ID:ttxmDenw
自称「神様」のきまぐれなお遊びに付き合ってやってるんだ
ありがたく思いやがって下さい
0241デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:41:30.49ID:23vMmTO3
>>235といい質問に「答えさせる」といい、なんか見えすぎなんだけどな
どしたの?
あんたの意図がわからんからだよ。何をしたいの?いつもの負けん気だけか?

bashの便利な機能もどっちにしろそれが使えないとわかった時に気がつくものだろう
って言ってるんだけど。だから空気と同じと言っているんだがなあ
0245デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:46:22.58ID:dVKYqL0H
>>244
やっぱりsortのおじちゃんじゃんw
安定の意味わかったの?

どうして行番号順にsortしてるのに、
並び順が変わると思ったの?

まだその答え聞いてないよ
0250デフォルトの名無しさん
垢版 |
2019/08/21(水) 13:50:29.02ID:23vMmTO3
>>247
そこに噛み付いている意味がわからない
会話として楽しんでいるんだからいいんじゃないの?みなさん(?)は
とか言ってみるw
0254デフォルトの名無しさん
垢版 |
2019/08/21(水) 14:21:13.28ID:+thc3RuF
可搬性を求めるならPOSIXで書く。
テキストこねくり回す程度のものなら書ける。

可搬性要らないor自分の環境で動けば良いなら好きに書けば良い。
bash,zsh依存でOK。ちゃんとシバン書いてな
0255デフォルトの名無しさん
垢版 |
2019/08/21(水) 15:27:51.40ID:zqKd/4GT
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね。
0256デフォルトの名無しさん
垢版 |
2019/08/21(水) 16:35:44.19ID:MMv7CGOe
初めて触れたRH8も、Cygwinもbashだったから、
今でもふつうにbash使ってるな。

それにしても、bashはなんでこんなに嫌われてるんだ?w
0258デフォルトの名無しさん
垢版 |
2019/08/21(水) 17:14:23.54ID:M+fZiddG
いつかカーソルキーのないキーボードを使うかも知れないから常にHJKL使えってvimスレの仙人が言ってた
0261デフォルトの名無しさん
垢版 |
2019/08/21(水) 19:32:04.69ID:CEaWdSia
>>256
bashがデファクトスタンダード的なもんだからな。採用の多さから
ksh,zshなどと置き換えても同じことだったりしてるからな、単なる象徴的な名称としてだけだろう
あとは/bin/shがbashな場合にイマイチな仕様だったりするとこか
0262デフォルトの名無しさん
垢版 |
2019/08/21(水) 19:33:05.60ID:/hAWXHxO
あとmacがbashをやめてzshになるらしいので、それなりどころか
過半数以上がbashを使わなくなりそう。

まあmac版のzshはbashと互換性があるように
デフォルトオプションを変更してそうな気がするけど
shwordsplitとか

>>258
bash以外を使うことがないって言いたいんだろうけど、その例えは的外れかな
現に多くの人がbash以外を使ってるわけだから
0263デフォルトの名無しさん
垢版 |
2019/08/21(水) 19:34:57.26ID:/hAWXHxO
あ、そういやWSLもUbuntuだっけか。他のディストリも使えるけど
そう考えるとdash使ってる人、かなりいるな。
0265デフォルトの名無しさん
垢版 |
2019/08/21(水) 19:45:33.15ID:/hAWXHxO
>>264
bashコードなのに#!/bin/shを名乗るなってことでしょ?

Ubuntu/Debianでdashが採用されたのは
パフォーマンスがいいかららしい。

https://wiki.archlinux.jp/index.php/Dash
> 実行速度が速い。Bash などのシェルに比べて 4倍高速 に動作します。

その際にbash依存しているのに#!/bin/shを使われていたから
変更するのに手間がかかったって言われてるね。

あとセキュリティもbashよりもdashのほうが高そうだし。bashは今も機能加えてるから新たに脆弱性が生まれてくる可能性も高い。

https://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B7%E3%83%A7%E3%83%83%E3%82%AF%E8%84%86%E5%BC%B1%E6%80%A7
> 2014年9月に公表されたBashについての一群の脆弱性(CVE-2014-6271 [1] 等)の発見は、
> 俗にシェルショック(Shellshock)、バッシュドア(bashdoor)と呼ばれている。
> 関連して6つの脆弱性が登録された。
0266デフォルトの名無しさん
垢版 |
2019/08/21(水) 19:51:13.28ID:CEaWdSia
なんかいきなりdash推ししているのがいるが>>257のいうデフォルトシェルがソレを指しているのって疑問
>>256なんぞからはデフォルトシェルはログインシェルのことを言っているのかと思ったけど

ちなみに大好きなPOSIXでググってみたが、デフォルトシェル=ログインシェルだなあ。引っかからなかったなにかがあるかもだが、引っかかったのがpasswd関連んとこだけというのもあり
0269デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:02:35.45ID:MMv7CGOe
>>263
Ubuntu on WSL だと、デフォルトシェルはbashになる。
chshしない限り、WSLではbashのままの人が多いだろうな。
0270デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:02:40.75ID:/hAWXHxO
>>268
ここでデフォルトシェルの定義がどうこう言っても無意味だっていう話

https://wiki.ubuntu.com/DashAsBinSh
> Why was this change made?
> The major reason to switch the default shell was efficiency.

デフォルトシステムシェルのことを
デフォルトシェルと呼んでる例なんていくらでもあるんだから
0271デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:04:25.00ID:/hAWXHxO
>>269
> Ubuntu on WSL だと、デフォルトシェルはbashになる。
話通じてないなw

その人が書くシェルスクリプトの一行目には、どうせ #!/bin/sh って書くでしょ?
デフォルトログインシェルがなんであろうが、
デフォルトシステムシェルは dash になるんだよ。
0273デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:09:40.60ID:CEaWdSia
誰かがデフォルトシェルと言えばそのデフォルトシステムシェルのことだと言っていたからなあ
流れ的に同じこと言っているなと。そんな話はしてないんじゃねえのってとことだな
0274デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:12:54.47ID:/hAWXHxO
>>266
> ちなみに大好きなPOSIXでググってみたが、デフォルトシェル=ログインシェルだなあ。

POSIXが/bin/shについて語ることはあっても、
/bin/bashについて語ることはないと思う

POSIXの世界のシェルには/bin/shしかないのでは?
0275デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:17:07.13ID:CEaWdSia
"default shell" というのはあるんだよ。そしてそれを指しているのはログインシェルっていう
なにか問題でも?ログインシェルをデフォルトシェルと言っても何も差し支えがなく間違いでもないってことだな、POSIXでの文章でそうなんだから
そして、ログインシェルの話をしていたって>>269で明らかになりましたってとこで俺は満足してますがw
0276デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:19:20.00ID:MMv7CGOe
>>274
> POSIXの世界のシェルには/bin/shしかないのでは?
そうなの?
20年くらい前のbashの解説書 "bash Manual & Reference" には、
Bourn Shell(sh/bsh)をPOSIXに準拠させるために書き直したのが
Bourn Again Shell(bash)というふうに書かれていて、
そういうもんだと思ってたわ。
0277デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:20:46.30ID:/hAWXHxO
>>275
うん、だからそこでデフォルトログインシェルの話をしたって意味がないでしょう?と言ってるわけ。

重要なのは /bin/sh の話だよ。
#!/bin/bash と書いてbashスクリプトを書くのはいいけど
#!/bin/shと書いていながらbashスクリプトになってるから嫌われているわけで
0278デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:25:13.92ID:CEaWdSia
ふーん
食いつき&その後レスからそうとは思えないけど、まあそういうことでいいよw
0279デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:26:05.08ID:/hAWXHxO
>>276
POSIXの世界にbashが出てくることはない。の反証として
bashの世界にPOSIXが登場したと言っても、それは反証になってないよw
0281デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:29:21.72ID:/hAWXHxO
>>278
なんでそう、本当は納得してないけど
納得してあげました風の言い方をするかな?w


最初から書いてるんだけど↓

265 自分:デフォルトの名無しさん[sage] 投稿日:2019/08/21(水) 19:45:33.15 ID:/hAWXHxO [4/10]
>>264
bashコードなのに#!/bin/shを名乗るなってことでしょ?
0282デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:33:57.11ID:CEaWdSia
>>281
ああ、いつものだなってとこだなw
ログインシェルをデフォルトシェルと言っても何も差し支えがなく間違いでもない
というのがわかった|わかっているようなので、まあいいよってとこだよ
まさしく、その最初からも読み違いとしか思えないけど、まあそれもw
0283デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:35:07.03ID:/hAWXHxO
>>282
ふーん、まあそういうことでいいよw










↑このレスにムカついた?
それがあんたがやってることだよ。
0285デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:40:12.26ID:/hAWXHxO
あーあ、とうとう反論はできないから、
ムカつかせるためだけにレスをしたって認めちゃったw
そういうとこやで
0286デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:42:42.39ID:CEaWdSia
なんの反論????いきなりすぎて意味わかりません、なんの反論すればいいの?????

ちなみに、>>276は「そういうもんだと思ってた」と言っているように反証でもなんでもなく、困惑しているんじゃないかなあと思ってみたり
0290デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:45:06.34ID:/hAWXHxO
bashコードなのに#!/bin/shを名乗るなってことでしょ?

ということが最後の話となった
0292デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:45:37.37ID:ttxmDenw
         ,. '"´ ̄ ̄ ̄ ̄``ヽ、
        /::::::::::::::::::::::::::::::::::::::::::::::\
    /::::::::::::;.: --─---─-、:::::::::::::ヽ
    ./::::::::::::/ィC¨ヽ      \:::::::::::l
   /:::::::::/  └¬'´,   ィC¨ヽ';:::::::::!
  ./::::::::イ        / ,.  ヽ `¬┘';:::::::!
  l::::::::::::l       /ハ ハ }     ヾ::::j
  {::::{⌒l:!      / `   ' ヽ   V}
.  ';:::l ゝリ     l ,/ ̄¨ヽ  ',    }l
  ヾヽ__j     { {,. -−‐‐ヘ    {,l
    ヾ::::|   i  ヽ ヽェェェェェノ     {
    }:::l   ヽ    ` ̄¨´   ノ   }
     ヾ;k    \_  __  ,/   }
     "|       ̄ ̄ ̄    ノ
  _,. -‐"\              フー-、_
'"´      `ヽ、          /                  ┼ヽ  -|r‐、. レ |  
                                         d⌒) ./| _ノ  __ノ  
                                        ---------------  
                                        制作・著作 NHK
0294デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:47:09.06ID:/hAWXHxO
これって言うのは、これね

> bashコードなのに#!/bin/shを名乗るなってことでしょ?
0295デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:49:21.93ID:/hAWXHxO
>>257
> ま、bashがデフォルトシェルじゃないOSもそれなりにあるもんな

bashがデフォルトシェルじゃないOSってなに?
流石にWindowsのことではないと思うけどw
0296デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:50:16.25ID:/hAWXHxO
いや、OSもそれなりにあるもんなっていうから
そのOSはそれなりに使われてるんだろうなと思ってね。
0297デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:51:38.32ID:CEaWdSia
誰もそんな話はしてないと思うし、俺は最初ので触れているんだけどな
誰かみたいに「名乗るな」とか言わなけどw

てか、続けんのかよw自分の言ったことを忘れすぎだろう
あら、あら、まあ。いつものだな。終わりますww
0298デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:52:22.52ID:/hAWXHxO
あぁ、デフォルトシェルっていうのは、
デフォルトシステムシェルってことか

https://wiki.ubuntu.com/DashAsBinSh
> Why was this change made?
> The major reason to switch the default shell was efficiency.
↑この文脈の「the default shell」

それならたしかにたくさんあるわ
0300デフォルトの名無しさん
垢版 |
2019/08/21(水) 20:54:13.14ID:/hAWXHxO
デフォルトシステムシェルっていうか
システムが使うデフォルトのシェルっていうべきかな?
0302デフォルトの名無しさん
垢版 |
2019/08/21(水) 21:33:59.34ID:l+BF9a7q
やっぱりどこでも動くシェルスクリプトなんて幻影なんだね
0306デフォルトの名無しさん
垢版 |
2019/08/21(水) 21:54:13.22ID:vg8ZIjZS
>>305
行番号が付いてるから、安定以前に並ぶ順番が入れ替わることはない。

> POSIX sortだと-s(=stable sortのs)オプションが提供されてないので

とか言ってるやつが間抜けでした。
(いつもの誤読ばっかりしてるやつだろう)

で終わりじゃない?
0312デフォルトの名無しさん
垢版 |
2019/08/22(木) 01:25:13.11ID:Oq4Y6cV4
bashrc zshrc みたいなところに alias 書くと
シェルスクリプトで bash,zsh依存の書くとaliasまで読まれてしまう
\Xxx のようなバックスラッシュを全部に付けるのは読みにくい
alias 全部切る宣言ないか?
0315デフォルトの名無しさん
垢版 |
2019/08/22(木) 02:09:53.19ID:jM8tCXZ0
>>312
なんかおかしいぞ

aliasはシェルスクリプトには伝搬しない。
現在のシェルにのみ反映する。

例えば、zshでログインして#!/bin/shのシェルスクリプトを起動することを
想像すればなんとなくわかると思うが、別のプロセスになるんだから
zshと(zshではないかもしれない)別のプロセスとaliasが共通になるわけがない。

. (source)でカレントプロセスに読み込むならaliasが働くけど
それはシェルで使うaliasまで全部初期化するってことになるぞ(それでいいんだろうけど)
なんか勘違いか変なことをしてる気がする。
0316デフォルトの名無しさん
垢版 |
2019/08/22(木) 02:23:33.98ID:jM8tCXZ0
たまたま関連することをやっていたので気づいたが
zshって設定なしでも以下のaliasを作ってるな

run-help=man
which-command=whence

これを何に使ってるのか知らないけどunalias -aをするとそれが消えてしまう
0317デフォルトの名無しさん
垢版 |
2019/08/22(木) 16:38:31.14ID:maUgHi90
あんまりbashと関係ないけど
直前のmacのターミナルのログってどっかに自動保存されてたりするもんなのかね
0320デフォルトの名無しさん
垢版 |
2019/08/22(木) 17:04:13.34ID:hwVLULCR
あ、そうなの?
使ったことないから知らなかったよ。
0323デフォルトの名無しさん
垢版 |
2019/08/22(木) 22:15:12.37ID:mlpPC2JR
VSCodeは「沢山の機能から自分の欲しいものを選びたい人」向けで
Vim含めUnixツールは「少数の機能から自分の欲しいものを作りたい人」向け。
どっちも利点欠点があるけど,俺は後者かなぁ。
0324デフォルトの名無しさん
垢版 |
2019/08/22(木) 22:28:59.84ID:UjFyi9ja
> Vim含めUnixツールは「少数の機能から自分の欲しいものを作りたい人」向け。

vimを使う人は、vimの機能を作るのが目的の人ってこと?
本末転倒って言葉知ってる?
0326デフォルトの名無しさん
垢版 |
2019/08/22(木) 23:18:19.55ID:NaJTUw7c
Vimは基本的にファイラーとかないから、シェルに移ってコマンド操作しつつ開発するのが普通
なんで、TmuxとかScreenとか併用する
ソースコードのフォーマッターだとかリントみたいなのも直接、間接で外部コマンド叩いて使う
0328デフォルトの名無しさん
垢版 |
2019/08/22(木) 23:19:14.46ID:UjFyi9ja
聞いたことないで?

「unix 本末転倒 誉め言葉 」
検索結果 約 5 件 (0.35 秒)
0329デフォルトの名無しさん
垢版 |
2019/08/22(木) 23:20:40.75ID:UjFyi9ja
>>327
atomはMSの息がかかってないから使っていた人が多い。
githubをMSが買収してしまったので、あえてatomを使う理由もなくなった。
vscodeの方が洗練されてるよ。
0331デフォルトの名無しさん
垢版 |
2019/08/22(木) 23:36:33.00ID:hEbQ4qBk
あー俺はvimmerだからw
vscode悪くないけどviキーバインドがイマイチ
exコマンド使えんのがストレスで里帰りしたわ
0334デフォルトの名無しさん
垢版 |
2019/08/23(金) 08:47:14.32ID:Wcc23IuY
UNIX哲学こそ正義(GNUのlsやsystemdから目を背けながら)
0337デフォルトの名無しさん
垢版 |
2019/08/23(金) 11:59:37.65ID:UifFOlyJ
ていうかGNU lsもsystemdも「Unix環境で使える」というだけで「Unix哲学に基づいてる」とは標榜してないしねぇ。
ま,俺は別にUnix哲学が絶対的正義とは思ってないけど。
ただ自分で作るツールはUnix哲学とユーザビリティを両立させるべく努力してるけど。
0338デフォルトの名無しさん
垢版 |
2019/08/23(金) 19:53:15.50ID:ge92wy5O
単機能のコマンド
標準入出力という共通インターフェース
それらを組み合わせて処理する

この思想を最初に知った時は感動したな
Small is beautiful.
0339デフォルトの名無しさん
垢版 |
2019/08/23(金) 20:11:00.47ID:Kka1jIND
ls
0340デフォルトの名無しさん
垢版 |
2019/08/23(金) 20:24:40.67ID:GCcQKmFF
パイプが強烈なので他の言語のときもできるだけフィルターで機能するように書いている
Xxx の言語で書くと import use require ... ができるのは Xxx の言語でかかれたコード
しかし、パイプを開いて | ./Yyy arg1 arg2 ... とすれば
Yyyは任意の言語で大丈夫

シェルスクリプトが背景にあるのは間違いない
0341デフォルトの名無しさん
垢版 |
2019/08/24(土) 00:25:49.01ID:AZIGFNIF
何にせよ「ベンダ形式に依存しない」というのが遥か昔に実現できていただけでも評価できる。
今だとテキスト形式より表現能力の高いJSON,更に高いXML with NS & XSDがあるのものの
それらが無い時代によくも思い付いたなと。
0342デフォルトの名無しさん
垢版 |
2019/08/24(土) 01:34:35.98ID:dr4oD/Ll
パイプとJSON, XMLを比較するとはね。
ヘリコプターと日本語を比べて云々するようなものだ。
0344デフォルトの名無しさん
垢版 |
2019/08/24(土) 02:52:37.93ID:T//47Bbt
パイプとJSON, XMLを比較するとはね。
チンコとペニシリンを比べて云々するようなものだ。
0345デフォルトの名無しさん
垢版 |
2019/08/24(土) 03:13:32.51ID:ctAc+SuL
単にデータフォーマットの話でしょ?

昔は行指向が普通だったからCSVが良く使われたな。
今でも使うけど。Cはcharacterね。
それからXML,JSON,YAML,TOMLと規格が増えていった。

PowerShellはオブジェクトをパイプに流せるんだよな。
0346デフォルトの名無しさん
垢版 |
2019/08/24(土) 03:48:51.30ID:GJDIT1Pg
行指向はデータ処理がすぐに行えるって利点があるんだよな

XMLは全体を<xml>でくくるという仕様だからデータが全部揃って
タグが終了するまで処理できない。大きなデータをストリーミングで
受け取りながら処理していくということに向いていない。
ドキュメント専用と考えたほうがいい。

同じ問題はJSONにもある。ただしJSONLならJSONを使いつつも
行指向になってるからJSONを使いながらも行指向的なデータ処理が行える。
0348デフォルトの名無しさん
垢版 |
2019/08/24(土) 06:54:04.43ID:AZIGFNIF
>>345
そうそう。
PowerShellは「パイプ」という概念はそのままに,
流すアイテムをテキスト形式からオブジェクト形式に変更したんだよね。

もっとも,PowerShellはインターネットでググってるだけじゃあまり情報は出てこないし,
>>342 みたいに「パイプ」と(パイプに流す)「テキスト形式」を混用してしまうのも無理はないけどね。
0349デフォルトの名無しさん
垢版 |
2019/08/24(土) 13:27:01.13ID:dr4oD/Ll
混用してるのは>>341

>>340-341を再掲。

340 デフォルトの名無しさん sage 2019/08/23(金) 20:24:40.67 ID:GCcQKmFF
パイプが強烈なので他の言語のときもできるだけフィルターで機能するように書いている
Xxx の言語で書くと import use require ... ができるのは Xxx の言語でかかれたコード
しかし、パイプを開いて | ./Yyy arg1 arg2 ... とすれば
Yyyは任意の言語で大丈夫

シェルスクリプトが背景にあるのは間違いない

341 デフォルトの名無しさん sage 2019/08/24(土) 00:25:49.01 ID:AZIGFNIF
何にせよ「ベンダ形式に依存しない」というのが遥か昔に実現できていただけでも評価できる。
今だとテキスト形式より表現能力の高いJSON,更に高いXML with NS & XSDがあるのものの
それらが無い時代によくも思い付いたなと。
0350デフォルトの名無しさん
垢版 |
2019/08/24(土) 13:37:16.85ID:ctAc+SuL
>>346
そうだね。
XMLとかマークアップ系はタグ閉じるまで処理できないからストリーミングには向かない。
パーサーに食わせて必要な要素取り出すのが常道だね。
0351デフォルトの名無しさん
垢版 |
2019/08/24(土) 13:37:41.91ID:GJDIT1Pg
ベンダ形式に依存しない?

psコマンドのオプションと出力フォーマットを見てから言え
0352デフォルトの名無しさん
垢版 |
2019/08/24(土) 13:49:16.53ID:ctAc+SuL
nodejs使いならawkwardというシェルが面白い
コマンド出力をオブジェクト配列に変換してforEachで回せる
0355デフォルトの名無しさん
垢版 |
2019/08/24(土) 23:30:16.23ID:AZIGFNIF
そりゃおめーを笑わす目的じゃなくて俺が笑う目的で書き込んだんだからなw
つまらないのは当然
0356デフォルトの名無しさん
垢版 |
2019/08/24(土) 23:33:11.08ID:GJDIT1Pg
https://www.weblio.jp/content/%E3%81%A4%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84

B とりあげるだけの価値がない。取るに足りない。下らない。 「 − ・ないものを買ってしまった」 「 − ・ないうわさ」 〔「つまらないものですが」などの形で,相手に贈る品物を謙遜していう場合にも用いられる。「−・ないものですが,召し上がって下さい」〕
0361デフォルトの名無しさん
垢版 |
2019/08/25(日) 02:30:04.13ID:RhAWwavs
再掲してやろうw

> From: [36] デフォルトの名無しさん <sage>
> Date: 2019/08/11(日) 16:10:55.15 ID:++HFlOfG
>
> 現実世界では私は神なのだ

さっさとsortコマンドの話に答えろよw
0366デフォルトの名無しさん
垢版 |
2019/08/25(日) 05:11:51.88ID:X8LrMnru
>>361
なんで、>>75のレスって書かないの?
そしてほんとうの意味を書かないの?

>>75
それはその数個上のレスを見ればわかるよ。

「現実世界では俺は優れたプログラマ」(といわれても証拠ないしなーw)
とか言ってるやつがいたから、そいつに対するレス。
0368デフォルトの名無しさん
垢版 |
2019/08/25(日) 11:32:58.43ID:coCCl2cg
簡単なシェルスクリプトならコピペせず書けるようになったけど他にも言語覚えた方がいいのかしら
sedにgrepにawkならかなり世話になってるけどpythonやrubyとは無縁なんだわ
シェルはbashに篭ってても困らんしな
0374デフォルトの名無しさん
垢版 |
2019/08/25(日) 15:01:36.04ID:1wFl7XLL
仕事で使ったことがある言語縛りで言えば、
Ruby、JavaScript、Java、C、C++、Python、C#、Perl、PHP、VB6
これぐらいかなぁ?
0379デフォルトの名無しさん
垢版 |
2019/08/26(月) 02:33:05.90ID:zrSc8z1e
sedは使うが、awkまでは使いこなせない。
代わりにperlのワンライナーで賄っちゃう。
0381デフォルトの名無しさん
垢版 |
2019/08/26(月) 04:09:12.67ID:NWn2YSWg
やっぱりシェルスクリプトの利点は
Linux/Unix系ならどんな環境でも最初から入ってるという点と
普段プロンプトから入力しているものと同じコマンドで動くという点だと思う
そのメリットが、メリットにならないような場面では他の言語がいい
0383デフォルトの名無しさん
垢版 |
2019/08/26(月) 08:29:42.50ID:9u1tekMW
短かく書けるプログラミング言語なんて
ジョークではなく実用的なのでさえごまんとあるんだから
あんまりシェルスクリプトの特筆すべき魅力とは言えんだろう
0386デフォルトの名無しさん
垢版 |
2019/08/26(月) 10:12:59.25ID:easMKtRj
ソルバー系はやっていた方がいいと思う。
0387デフォルトの名無しさん
垢版 |
2019/08/26(月) 11:41:59.66ID:2xzzFsoU
ソルバー系って?Prologとかのことですか?
0390デフォルトの名無しさん
垢版 |
2019/08/26(月) 16:47:04.44ID:4xLfK+jj
審議中(AA略)
0391デフォルトの名無しさん
垢版 |
2019/08/26(月) 19:43:05.91ID:lDnuBORI
perlは便利っていうが専ら正規表現専用機になってる
ほぼsedとして使えるんでつい
0392デフォルトの名無しさん
垢版 |
2019/08/26(月) 22:19:06.53ID:bOZvrPaH
perlで使える正規表現文字クラスは、
POSIXの正規表現文字クラスより簡単に書けるから、
sedより楽といえば楽だよね。
0393デフォルトの名無しさん
垢版 |
2019/08/26(月) 22:35:23.01ID:pJei9Vjv
GNU sed だとコンパイルオプションを追加すれば PCRE が
使える(-R オプション)らしいな
0394デフォルトの名無しさん
垢版 |
2019/08/27(火) 09:47:28.46ID:jAZb3mMb
perlの存在を知る前から\dや\wは使ってたからこれが使えねぇって言われた時は焦ったわ
正規表現入門では当然のようにperl版を使うけど正規表現の種類までは解説しないからな
基本だの拡張だの方言があるって知ったのはvimやgrepで悩んだ時だし
0395デフォルトの名無しさん
垢版 |
2019/08/27(火) 12:20:19.16ID:WoMQ7lMm
sed は n で次の行に簡単に飛ばせるのが使いやすかった
もっとも多くの行送りは読みにくいので過信できないが
0397デフォルトの名無しさん
垢版 |
2019/08/28(水) 05:11:25.57ID:mFl1zXF1
C言語とシェルスクリプトの対比・協調について
「シェルスクリプトは文字列処理がある程度得意で
キャラクタによるユーザーインターフェースを作るのに向いている。
一方C言語は↑このような操作は不得手であるが
素早い数値計算やシステムAPI呼出しは向いている。
だからインターフェースはシェルスクリプトで書いて
シェルスクリプトで適切に処理した引数(例えばヌル文字を削除したり数値だけにしたり)
をC言語をコンパイルしたプログラムに渡すようにすれば
「早くて堅牢、かつ使いやすい」システムができる」

こういうのってどの程度正しい?
0402デフォルトの名無しさん
垢版 |
2019/08/28(水) 10:41:08.33ID:gV1iThk/
昭和何年からタイムスリップしてきたのか?
0403デフォルトの名無しさん
垢版 |
2019/08/28(水) 11:20:21.46ID:ddpchJVU
可読性が高く、CUI が作りやすい言語は、Ruby。
テキスト処理・コマンド作り・1-liner も得意

ただし、Rubyは遅いから、
ベクトル演算などを速く処理したいなら、C言語で作った、NArray ライブラリを呼び出す

その速さは、数値計算専門言語のOctave にも匹敵する!
0404デフォルトの名無しさん
垢版 |
2019/08/28(水) 11:31:26.07ID:Dqewl7QB
スクリプトの中で起動速度が一番速いのがシェルスクリプト。次がPerl。
その次はPythonとPHPが同着ぐらい。
Rubyはひときわ遅くて、シェルスクリプトの50倍。Python、PHPの3倍遅い
0405デフォルトの名無しさん
垢版 |
2019/08/28(水) 11:52:55.32ID:Z/4RZqPN
TwitterはRuby on Railsで書かれていたがScalaで書き直した
それは大量のトラフィックを捌き切れなくなったからだ
パフォーマンスの問題を解決しない限りは
死んだと言われても仕方がないな
0407デフォルトの名無しさん
垢版 |
2019/08/28(水) 14:38:52.61ID:odAj9D7Z
もう10年以上前だけど、Twitterの開発者が何かのインタビューでScala移行した理由としてRubyは自前で型チェックを大量に記述しないといけないから、JavaやScalaみたいに型を指定するほうがいいって気づいたみたいなこと言ってた
海外のプログラミングサイトみたいなやつで、当時少し話題になったけど、探せばまだ見つかるかも
0408デフォルトの名無しさん
垢版 |
2019/08/28(水) 17:24:45.64ID:ZwB1MHJ/
すごいわかる
動的型付け言語使ってユニットテストで型チェック書くのギャグかよってぐらい馬鹿げてる
0409デフォルトの名無しさん
垢版 |
2019/08/28(水) 20:00:01.16ID:Z/4RZqPN
静的型付け言語の時代になったな
Scala,Rust,Swift,TypeScript...
パフォーマンスチューニングに労力使いたくないよな
0410デフォルトの名無しさん
垢版 |
2019/08/28(水) 23:53:16.25ID:7Kt8r9pr
ちょっとperlを覚える気になったけどなんで書きやすいやすくて読みにくいのか分かったわ
記号で変数の使い分ける時点でダメだった
正規表現さえ出来ればいいんだけどPerl6の展望ってどうなんですかね
0411デフォルトの名無しさん
垢版 |
2019/08/28(水) 23:54:49.23ID:ddpchJVU
Rails 6 では、DHH のいるBasecamp 社から、GitHub へ移籍した、Eileen Uchitelle が、
複数データベース接続(read replica)と、ブラウザによるE2E の並列テストを実装した

最近のRailsは、大規模用

Basecamp, GitHub, Shopify 社などが中心。
日本では、Cookpad, マネーフォワード、Ruby開発とか

初めてのJavaScript 第3版 ――ES2015以降の最新ウェブ開発、オライリー、2017

この本は、10年以上やってないと、難しすぎて読めない。
だから、サーバー側をNode.js に変えることは難しい

同様に、Go も難しいから、現時点では、Ruby になる!
0412デフォルトの名無しさん
垢版 |
2019/08/29(木) 00:22:15.02ID:VY7wxkJm
シェルスクリプトと同じぐらいの速度とブログで読んで
perl6の処理系が高速化するまでは導入延期予定
速度さえなんとかなれば併用するつもり 新型の正規表現クール
---
perl5 の正規表現は
(?{perl-code})
(??{perl-code})
などがあるから使えると便利
0413デフォルトの名無しさん
垢版 |
2019/08/29(木) 00:40:07.63ID:mztHiQ0L
まあ考え方次第なんだけどね
$や@を使うことでスカラー変数と配列変数と連想配列変数を厳密に区別できて、違う型の変数に代入できなくするっていう
Perl6は更に進んで、静的な型指定をできるようにしようって、2000年代前半の時点で今のPHPとかJSがやろうとして方向に進んでたんだけど
0416デフォルトの名無しさん
垢版 |
2019/08/29(木) 20:01:19.83ID:jZJUsq6Z
定期的にruby布教しては信者を得られず帰っていく
逆効果だと思うんだけどなw
0417デフォルトの名無しさん
垢版 |
2019/08/29(木) 20:57:49.50ID:VG5IecJ5
>>416
末期の日本軍みたいよな。
日本生まれのRubyがその生みの親と同じ末路を辿るとはあまりに悲しい皮肉よ
0418デフォルトの名無しさん
垢版 |
2019/08/30(金) 00:19:45.85ID:LpXSw35l
日本軍は現場を知らない奴が出世して参謀とかになってるからおかしいことになった
自分は死ぬ気が無いのに他人に市ねと命令するクズ

rubyの人は現場で手を動かしてる分、かなりマシ
0421デフォルトの名無しさん
垢版 |
2019/08/30(金) 05:01:24.34ID:+D5+4uT9
貴様ら!大日本帝国陸海軍を愚弄するか!
Ruby如きの比喩に使うな馬鹿者が!
0422デフォルトの名無しさん
垢版 |
2019/08/30(金) 05:19:46.60ID:Nlc2IKSs
ここ以外にプログラミングについて活発に議論してるとこってある?
QiitaとかTwitterみたいなとこじゃなくて匿名でかしこまってないのがええ
0425デフォルトの名無しさん
垢版 |
2019/08/30(金) 08:10:38.43ID:jhLEZvWx
大失敗の象徴としてだろけど、Rubyと絡めるのは意味不明
なんであれどういうものであれ批判するヤツ、アンチはことさら大げさに言うのが定番のだろう
0427デフォルトの名無しさん
垢版 |
2019/08/30(金) 08:53:17.88ID:1L0XShC3
じゃあいつもとは趣向を変える

Bourne ShellとPOSIXシェルの違いを教えて下さい。
0432デフォルトの名無しさん
垢版 |
2019/08/30(金) 10:04:47.60ID:BnHn7wdj
日英両対応のクリップボードへのコピーとペーストの部分どうしてる?
cygwin Linux mac などを
uname | grep "CYGWIN" > /dev/null && do-something
のようなかんじの分岐を copy_to_clipboard paste_from_clipboard で考えている
そして コピーのときに
cygwin だと > /dev/clipboard
linux や mac だと別の何かになる

本当は perlモジュールの Clipboard が OS の差異を吸収してくれる予定だったが
日本語だけはうまく処理してくれないから半分車輪の最発明ののようなことになった
0433デフォルトの名無しさん
垢版 |
2019/08/30(金) 10:50:41.75ID:1L0XShC3
そんなことやろうと思ったこともないんだが、
どうやってSSH越しにクリップボードに入れられるんだ?
それシェルの機能なのか?端末の機能では?
0434デフォルトの名無しさん
垢版 |
2019/08/30(金) 10:57:15.04ID:BnHn7wdj
SSH 超しじゃなく、ポータブルなコードが欲しかった
環境によってクリップボードのアクセス違うから
Xxx | copy_to_clipboad
paste_from_clipboard | Yyy
のように書けたら楽じゃないか?
0437デフォルトの名無しさん
垢版 |
2019/08/30(金) 11:34:05.64ID:1L0XShC3
コピペしたいとか思わないからなぁ。
コピーはともかくペーストしたいわけでバイナリのペーストもなくはないけど
通常は出力したテキストのペーストでしょ?
ファイルに書き出せばいいじゃんって思っちゃう。
まあ別にコピペを否定したいわけじゃなくて、やろうと思わないなって話。
0441デフォルトの名無しさん
垢版 |
2019/08/31(土) 02:48:40.05ID:0iGUnrw4
クリップボードみたいなGUIに強く依存した(例えば画像や装飾のある文章を切り貼りできる)機能は
なかなかOS間・ベンダー間で協調したり標準化したりするのが難しそう。
素人考えだが。
0442デフォルトの名無しさん
垢版 |
2019/08/31(土) 03:00:42.96ID:4qIvp+ND
httpみたいにMIMEを流用すればいいんじゃないの?
扱えないタイプはぺっすればいいんだし
0444デフォルトの名無しさん
垢版 |
2019/08/31(土) 08:49:53.41ID:0iGUnrw4
一個人がアレコレ妄想するぶんには訳ないけど、各々のベンダーが顧客の体験を変えることなく(つまりインターフェース面での過去互換性を最小限にして)
「ぼくのかんがえたさいきょう」のクリップボード仕様を採用してくれるとは到底思えんがね。
0448デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:13:42.31ID:MkewyPY7
IPCというならだよ。プロセス間通信という感じではない、言うような共有メモリだな
どのプロセスが書いたのか知らん知ってるフォーマットのデータを読むだけだし
0450デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:22:09.06ID:MkewyPY7
共有メモリは広義にはIPCに含まれるだろうが、通信ではないし、クリップボードはプロセス間通信ではないな
共有メモリを使ったプロセス間通信はあるだろうけど、クリップボードがプロセス間通信かと言えば違うだろう。パイプはもろにプロセス間通信という

クリップボードってそのままのデータをやり取りする共有メモリだろ
でまさしくだし、それでいいんじゃね
0451デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:26:20.90ID:LtUqD47M
共有メモリは広義にも狭義にもプロセス間通信なんだが
プロセス間でデータをやり取りするための機構だ
0452デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:36:21.83ID:MkewyPY7
プロセス間でデータのやりとりさえできれば、通信するプロセス間の関係性即時性一時性なんて全く関係ないのもプロセス間通信と思えるならそうだろな
そもそもプロセス間通信をするために用意したのが共有メモリだと思うよ。共有メモリを使うから=プロセス間通信ではないだろうとは俺は思うけど。ファイルシステムもIPCになる感じになるな、そのままのデータをやり取りするなら
0454デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:40:17.30ID:iNpyZmkw
コピペは重要な機能なのに、標準化されなかったから
vimからemacsへのコピペすら出来ない
0457デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:48:52.24ID:MkewyPY7
自分でも共有メモリと言っているのに、IPCに拘る方がわからんわ
クリップボードがIPCと言われると違和感しかないな。ファイルシステムもになるからw言っている意味がわからんのならIPCとはなんのためになんぞやを調べた方がいいよ
0459デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:56:35.05ID:ndYyEVRN
調べてきたぞ。そのうえで意見は何も変わらん。
なにか言いたいなら、自分の口で言いたまえ
つーか俺が不利になることを俺が調べると思ってんの?w
0461デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:57:22.41ID:MkewyPY7
言われるまでもなく知ってるよというのを匂わせていたんだけどww

プロセスがどのプロセスが(読むか読まれるか知らんけど)書く、どこぞのプロセスが誰が書いたのか知らんのを読む
対象が共有メモリだからIPCとでも言っているようだけど?だからIPCとはなんのためになんぞやを調べた方がいいと言っているのだが
0462デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:58:45.11ID:wH7D17fo
共有メモリに関数(プロシージャー)をおいて
呼び出すのがI(インターネット)P(プロシージャ)C(コール)なわけだが?
0463デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:59:35.20ID:MkewyPY7
ちょっと訂正
プロセスが(どのプロセスが読むか読まれんか知らんけど)書く、どこぞのプロセスが誰が書いたのか知らんのを読む

クリップボードってそのままのデータをやり取りする共有メモリだろ
でいいだろうに、なんでIPCのこだわっているのかさっぱりわからんな
0464デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:59:51.95ID:gu7Dz/47
馬鹿二匹

馬鹿1「俺のほうが知ってる。お前調べてこい。そして俺に教えろ。」
馬鹿2「俺のほうが知ってる。お前調べてこい。そして俺に教えろ。」
0469デフォルトの名無しさん
垢版 |
2019/08/31(土) 15:11:29.97ID:0iGUnrw4
>>466
知らんけど
いわゆるBourneシェルはUnix V7あたりの「古き良き」シェルを指す?
でPOSIXはそのBシェルと前後して登場していた種々のシェルの微妙な非互換性を埋めるべく
Unix V7が全盛だった頃よりもっと後になって登場した「実装のない」シェル?
だからPOSIXシェルというのは正確にはPOSIX準拠シェルで
POSIX準拠シェルにはBシェルで使えない機能もある。具体的には set -o <機能の長い名称> とかかな?。
Bシェルが動いてる環境にPOSIXに準じた書き方をした筈の(つまり「現時点での」最大限の互換性がある筈の)
シェルを持っていっても,動かない場合がある。
POSIXはBシェルを大いに参考にはしたかも知れないが,Bシェルでも動くようにとか,
ましてBシェルと過去互換であるようになんてことは念頭に置いてない。

どうっすか先生。
0477デフォルトの名無しさん
垢版 |
2019/08/31(土) 18:16:09.72ID:0iGUnrw4
だって「いつの」「どのOSに搭載された」「どんなベンダーが配布していた」Bシェルか一切指定されてないからね。
候補は幾つかあるものの出しようがない。
0478デフォルトの名無しさん
垢版 |
2019/08/31(土) 18:19:00.41ID:0iGUnrw4
まさかと思うがBourne Shellが絶対不可侵,永久不滅の存在だなんて思ってないよな。
円周率じゃないんだから,単に「Bourne Shellの仕様」と言っただけで特定できる訳がない。
「Windows XPの仕様」←これがどれだけ曖昧な言明か,ちょっとでも真面目に
プログラミングとその文書化に取り組んだなら分かる筈。
0479デフォルトの名無しさん
垢版 |
2019/08/31(土) 18:20:26.43ID:0iGUnrw4
「Solaris 10の仕様」「Unix V7の仕様」←「Windowsのことなんてシラネーシ」みたいな反論を先に封じておくために
Windowsでない例を挙げておこう。
0480デフォルトの名無しさん
垢版 |
2019/09/01(日) 00:08:11.60ID:1i1y7fC5
POSIXって右と左で中身がガバガバだから作られた最低限の共通仕様じゃないのか
無人島じゃ家電は役立たずでもアーミーナイフならどこでも使える的な
0481デフォルトの名無しさん
垢版 |
2019/09/01(日) 00:12:22.70ID:7+2OKNJu
>>478
言い訳してるようにしか見えんが、
特定できないというのなら、一例としてお前のよく知る
○○と仮定して答えりゃいいやん
0482デフォルトの名無しさん
垢版 |
2019/09/01(日) 00:15:35.40ID:7+2OKNJu
>>480
POSIX準拠シェルの説明としては間違ってないが、
Bourne Shellとの比較であれば、POSIX準拠シェルの方が機能が多い

POSIX準拠シェルを「最低限の共通仕様」というのなら
Bourne Shellは最低限の仕様すら満たしてない使えない実装
0484デフォルトの名無しさん
垢版 |
2019/09/01(日) 00:37:19.00ID:5y1tL0M+
>>478
複数の機能の複合体のWindowsXPと、もう誰もいじってないBourne Shellを
同列に並べるあたり、必死に言い訳をしてるようにしか見えんなあ
0486デフォルトの名無しさん
垢版 |
2019/09/01(日) 02:19:47.47ID:tx4fDw07
Bourne ShellをベースにBourne Shellの機能を満たすように作るだろ、最低限でも
Bourne Shellの機能に飽き足らず拡張した部分の最低限の共通仕様だろ
最低限の仕様といえばBourne Shellの仕様だろ
0487デフォルトの名無しさん
垢版 |
2019/09/01(日) 02:27:49.82ID:V0W1RnmC
Bourne ShellはPOSIX準拠じゃないから「最低限の共通仕様」を満たしてないんだってば
0488デフォルトの名無しさん
垢版 |
2019/09/01(日) 02:31:19.82ID:tx4fDw07
POSIXが出る前POSIXを作るときの話だよ。Bourne ShellはPOSIX準拠じゃないってズレすぎ
Bourne Shellに機能拡張した部分の最低限の共通仕様だろって言ってるだろに

そもそもだな、つっこみどころが違う、「(右と左で中身がガバガバだから作られた)共通仕様」なのか?と思うけどw
0490デフォルトの名無しさん
垢版 |
2019/09/01(日) 03:07:24.67ID:tx4fDw07
Bourne Shellに機能拡張した部分の最低限の共通仕様=POSIX
「Bourne Shellに」「機能拡張した部分の」「最低限の共通仕様」だって言ってるだろに

Bourne Shellありき
どこのぞのバージョンが、それに a b c etc... な機能を追加
どこのぞのバージョンが、それに b c d etc... な機能を追加
Bourne Shell + b + c = POSIX
という意味だろう>>480のいう最低限の共通仕様は
0494デフォルトの名無しさん
垢版 |
2019/09/01(日) 03:31:36.55ID:tx4fDw07
なにをそんなに食い下がっているのか意味わからん。なんの意味があるのそれに?
(そんなこと言い出すのはアホか?としか思えんぞw、常識的にPOSIXなんて存在する前のにPOSIX準拠もなにもないだろう)
0496デフォルトの名無しさん
垢版 |
2019/09/01(日) 03:35:57.77ID:tx4fDw07
「POSIXって」「右と左で中身がガバガバ」「だから」「[作られた]」
って書いてあるだろう

わざとなのかわざとじゃないのかわからんが、人のレスを読む努力はした方がいいぞ
そうしたら変なこと言い出さずに変なこと言ったことを誤魔化すような醜態はさらさないだろうw
0500デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:34:43.52ID:YaEsaVCE
>>488
> Bourne Shellに機能拡張した部分の最低限の共通仕様

それ日本語になってないだろ?w

自分が言った言葉を無理やり辻褄が合う(?)ように改変したから
そういう意味不明な言葉になってるんだぞ
0502デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:40:50.68ID:tx4fDw07
ん?

Bourne Shellに機能拡張した部分の最低限の共通仕様

Bourne Shellありき
どこのぞのバージョンが、それに a b c etc... な機能を追加
どこのぞのバージョンが、それに b c d etc... な機能を追加
Bourne Shell + b + c = POSIX
という意味だろう>>480のいう最低限の共通仕様は

どう、日本語になってないの?
0503デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:41:03.98ID:YaEsaVCE
>>477
> 候補は幾つかあるものの出しようがない。

候補が有るなら出せるのでは?w
後方がいくつか有るというのなら、その候補を言ってみなよ。
その中で最後に作られたもの(or 一番機能が多いと思われるもの)に
すればいいだけだからさ
0504デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:42:29.94ID:YaEsaVCE
>>502
Bourne Shellに機能拡張した「部分」
の部分とはどこの部分?

その「部分」の「最低限の」「共通仕様」がPOSIXなんでしょ?
0511デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:50:02.57ID:tx4fDw07
ああ、違う、違う読み方してんのか??
どこのぞのバージョンが、それに a b c etc... な機能を追加
どこのぞのバージョンが、それに b c d etc... な機能を追加
なんぞの共通の最低限の共通仕様だからね
0513デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:51:10.99ID:YaEsaVCE
> なんぞの共通の最低限の共通仕様だからね

お前「部分」って言ったよね?

Bourne Shellに機能拡張した部分(b+c)の最低限の共通仕様
0515デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:52:27.35ID:YaEsaVCE
> b と c だよ

言質とりましたーw


Bourne Shellに機能拡張した部分(b+c)


(b+c)の最低限の共通仕様がPOSIXだって言いましたー
0520デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:57:06.97ID:YaEsaVCE
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
0521デフォルトの名無しさん
垢版 |
2019/09/01(日) 04:59:06.93ID:tx4fDw07
まさか、POSIXとは (b+c)のことだって言ったと言っているわけじゃないだろうね?
Bourne Shell + b + c = POSIX
って書いてあるだろう。POSIXとはこれのことだと言っているのだろうとは俺は言っているけど。それも俺の主張ではなくて>>840の言いたいことはだがなw
0525デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:03:43.36ID:JXg8T9pY
>>523
長くてもいいよ。
見てて面白いからもっとやれ。
どうせこんな場末のスレなんてチガイ同士の喧嘩かスクリプトくらいでしか活気付かないんだから。
0530デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:11:25.25ID:YaEsaVCE
>>529
Bourne Shellに機能拡張した部分(b+c)の最低限の共通仕様 がPOSIX
↑日本語になっていない

↓正しい日本語
Bourne Shellを機能拡張したシェルの共通仕様がPOSIX


まあ↑は日本語としては正しいが、言ってることは間違いだけどな

正解
Bourne Shellを機能拡張したkshのサブセットがPOSIX
0531デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:17:42.82ID:tx4fDw07
その俺のからはその添削後の意味は取れないのね?ふーん
まあ、それならすまんかった。(なんかそうとは思えんけどw)
0532デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:18:51.37ID:YaEsaVCE
まさにこれw

499 名前:デフォルトの名無しさん[sage] 投稿日:2019/09/01(日) 04:22:29.76 ID:5y1tL0M+ [2/2]
ごめんなさいって言えば良いのになんで突っ張るかねぇ
0533デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:19:56.80ID:tx4fDw07
いや、言ってるけど
そこまで読めないのか?というのは拭えないというだけで
0534デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:26:24.29ID:YaEsaVCE
で、話を戻そうか?

>>477
> 候補は幾つかあるものの出しようがない。

候補が有るなら出せるのでは?w
後方がいくつか有るというのなら、その候補を言ってみなよ。
その中で最後に作られたもの(or 一番機能が多いと思われるもの)に
すればいいだけだからさ
0535デフォルトの名無しさん
垢版 |
2019/09/01(日) 05:31:12.93ID:YaEsaVCE
忘れているかもしれないけど、

Bourne ShellとPOSIXシェルの機能の違いはなにか?
という話です。
0536デフォルトの名無しさん
垢版 |
2019/09/01(日) 13:23:16.11ID:fPTBNnye
やっぱりどこでも動くシェルスクリプトなんて幻想なんだねw
0538デフォルトの名無しさん
垢版 |
2019/09/01(日) 13:38:39.47ID:sO2LPoJE
昨日神保町の本屋でこんな本みつけた。ペラペラの薄い本で妙に安い(300円+税)。内容は初心者向け。

シェルスクリプト入門の入門
http://ankokudan.org/d/d.htm?detail230-detailread-m.html
0551デフォルトの名無しさん
垢版 |
2019/09/02(月) 10:24:24.46ID:PyPzRv4a
Bourne ShellとPOSIXシェルの機能の違いはなにか?
という話はどうなりましたか?
0554デフォルトの名無しさん
垢版 |
2019/09/02(月) 19:04:17.99ID:PyPzRv4a
Bourne ShellとkshだったらBourne Shellの方が有名だろ?
何を持って適切と言ってるのか知らんけど
0556デフォルトの名無しさん
垢版 |
2019/09/02(月) 23:36:30.01ID:PyPzRv4a
有名だから聞きたいんだよw
UbuntuとDebianの違いはよく書きれても
UbuntuとLinuxfxの違いなんて気にしないでしょ?

言われて初めて、へー、そんなのあったんだーレベルだから
0558デフォルトの名無しさん
垢版 |
2019/09/02(月) 23:45:33.27ID:KSSQVEnP
>>553
$ bash -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
10
$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$

どっちがPOSIX的に正しいの?
0562デフォルトの名無しさん
垢版 |
2019/09/03(火) 00:31:57.81ID:KovswbEV
パイプの右側がサブシェルになるのかどうかはPOSIXで規定されてない
どちらも間違いじゃないが、bashの動きのほうが多い
0566デフォルトの名無しさん
垢版 |
2019/09/03(火) 02:44:16.76ID:KovswbEV
>>564
POSIXシェルという実装は存在しない
だからkshの動きはPOSIXシェルの仕様通りと言える
bashはPOSIXシェルそのものではない。
0567デフォルトの名無しさん
垢版 |
2019/09/03(火) 02:56:06.66ID:1Annr1ic
>>566
「kshの動きはPOSIXシェルの仕様通り」
正確には
「kshの動きをPOSIXがシェルの仕様として採用した」
だな。
0570デフォルトの名無しさん
垢版 |
2019/09/11(水) 12:29:34.80ID:0GNwCqDq
POSIXは他の環境でも動く共通規約
GNUのソフトは高機能だがそれ自体が方言ということ
組み込みは機能を削ぎ落とすため色々知恵が必要
一般人はbashだけ使ってればおk
こんな認識で問題ない?
0571デフォルトの名無しさん
垢版 |
2019/09/11(水) 12:40:30.30ID:3HQIKx2V
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
0572デフォルトの名無しさん
垢版 |
2019/09/11(水) 12:52:40.14ID:IEmfVi5w
>>570
Linuxユーザーという前提?

POSIXに準拠していれば、多くの環境で動かすことが出来る
GNUはPOSIX準拠+高機能な拡張(標準語+方言)
GNU以外でも多かれ少なかれ拡張されてる
組み込みも完璧ではないが、多くの場合POSIX準拠に近い
一般人はWindowsだけ使ってればおk
dashで動かす必要があるなら、bashの拡張は使えない
0573デフォルトの名無しさん
垢版 |
2019/09/11(水) 12:53:13.99ID:IEmfVi5w
>>571
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
0577デフォルトの名無しさん
垢版 |
2019/09/11(水) 14:18:05.48ID:0GNwCqDq
>>572
Mint使ってるけどdashってどんな時に必要なの
軽さが求められるってラズパイやドローン辺り?
MacはBSDだからLinuxのコマンドオプションが使えないってのは面倒そうね
だからってそっちにcoreutils入れるのもアレだが
0578デフォルトの名無しさん
垢版 |
2019/09/11(水) 14:38:42.01ID:ujkZonF+
>>577
そんなもん、こんなの重いbash使うまでもないですよねってときに使うに決まってるじゃん

/bin/bzdiff:#!/bin/sh
/bin/bzexe:#!/bin/sh
/bin/bzgrep:#!/bin/sh
/bin/bzmore:#!/bin/sh
/bin/egrep:#!/bin/sh
/bin/fgrep:#!/bin/sh
/bin/fsck.btrfs:#!/bin/sh -f
/bin/gunzip:#!/bin/sh
/bin/gzexe:#!/bin/sh
/bin/gzexe:#!/bin/sh
/bin/lesspipe:#!/bin/sh
/bin/setupcon:#!/bin/sh
/bin/uncompress:#!/bin/sh
/bin/unicode_start:#!/bin/sh
/bin/zcat:#!/bin/sh
/bin/zcmp:#!/bin/sh
/bin/zdiff:#!/bin/sh
/bin/zegrep:#!/bin/sh
/bin/zfgrep:#!/bin/sh
/bin/zforce:#!/bin/sh
/bin/zgrep:#!/bin/sh
/bin/zless:#!/bin/sh
/bin/zmore:#!/bin/sh
/bin/znew:#!/bin/sh
0579デフォルトの名無しさん
垢版 |
2019/09/11(水) 15:20:07.21ID:wb8QVF41
bashが使えない環境のほうが特殊だよなぁ
素直に #!/bin/bash で書いときゃいいんじゃね

ところで、#!/usr/bin/env bash って使えるのか?
0583デフォルトの名無しさん
垢版 |
2019/09/12(木) 00:11:11.54ID:GvsY5hZk
普通にPCでLinux(とWindows)使ってるだけならbashだけでなんにも困らないよなあ
これはLinuxに限らずちゃんとしたUnixを使う場合もそうだけど、客先で使ったり客に何かを提供する場合は気を遣うべきだが
自分で自由にできるAIXやHP-UXならbashインストールすりゃいいんだし
0584デフォルトの名無しさん
垢版 |
2019/09/12(木) 01:59:12.99ID:Uy9QyXie
つまりPOSIXなんてピエロだとwww
0585デフォルトの名無しさん
垢版 |
2019/09/12(木) 02:11:14.84ID:iqiqB/tU
オープンソース開発者「そら、お前がお前のためだけのツール作るなら、それでいいだろな。責任もなんにもないし」
0586デフォルトの名無しさん
垢版 |
2019/09/12(木) 02:18:54.66ID:xw2iu/gH
MITとかの主要なOSSライセンス読んでみろ。
ソフトの使用でどんな損害被っても作者は責任持ちません。
それに同意しないと使えませんて書いてあるだろ。
オープンソース開発者こそ責任もなんもない。そのためのライセンスだから当たり前だが。
何を勘違いしてんのかねこいつはw
0588デフォルトの名無しさん
垢版 |
2019/09/12(木) 07:54:28.26ID:YLSbOzHc
JavaだとJREまるごとついてくるソフトも珍しくなかったし、
今だとコンテナでlibcからなにまで添付。
ストレージの容量に気を使わなくてよくなってるんだから時代に合わせて
開発するのが良いんじゃないかね。
0590デフォルトの名無しさん
垢版 |
2019/09/12(木) 09:05:58.55ID:iqiqB/tU
>>587
問題はシバンをどうするかだよ。
zshを使うには#!/usr/bin/zshとしないといけない
bashなら#!/bin/bashだ
だがzshとbashをうまく使い分けてくれるわけじゃない
シバンは#!/bin/shとするしかない
そうするとUbuntuではdashになる
0591デフォルトの名無しさん
垢版 |
2019/09/12(木) 10:57:28.70ID:d/tSjguy
#!/usr/bin/zsh にすればいいだろう、そういう話でもあるのに特定のヤツだけがなぜか拘っているだけだろに
そいつもたいしたもん作ってないくせに
0593デフォルトの名無しさん
垢版 |
2019/09/12(木) 11:12:45.55ID:d/tSjguy
>>587はzshがbashの代替になるという話じゃないの
bashとの違いはあるだろうけど、些細なちょっと直せばいいというのを含んでの
そもそも一般人は=特定の環境で動けばいいだけの人はの話でしょう
0594デフォルトの名無しさん
垢版 |
2019/09/12(木) 11:23:02.84ID:6grXRSs+
「一般人」をオレオレ定義して語るのはやめましょう

複数の環境を使う一般人もいるわけです
0595デフォルトの名無しさん
垢版 |
2019/09/12(木) 11:52:17.18ID:7qK8Dq0y
zshスクリプト書くならzsh必須
bashスクリプト書くならbash必須
当たり前の話だ
0598デフォルトの名無しさん
垢版 |
2019/09/12(木) 12:40:22.35ID:6grXRSs+
一般人を勝手に定義すんなって言ってるのに、
そういう意味だろとか、わかってなさすぎw

一般人にそういう意味はありません
0601デフォルトの名無しさん
垢版 |
2019/09/12(木) 12:45:43.48ID:6grXRSs+
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
0607デフォルトの名無しさん
垢版 |
2019/09/12(木) 17:43:49.36ID:umd/llTn
ここまで言われてなおシェルスクリプトと無関係な煽りを書き込めるって相当だぞ
0610デフォルトの名無しさん
垢版 |
2019/09/12(木) 19:42:51.04ID:WUiTiHRA
>>608
stderrのをだから(サブシェル内の)stderrに出力、それが無ければstdoutに出力
あんまそれほど意味はなさげのような気がするけど
0611デフォルトの名無しさん
垢版 |
2019/09/12(木) 20:41:45.14ID:WUiTiHRA
インタラクティブ、もしくは、それ以下のスクリプトでサブシェルのstderrの先を変えようにも変えようがないし、やるならその前でしかなと、意味はなさげと思ったが、
それが入っているスクリプト起動時にリダイレクトする場合には意味があるか。(コンソールへの)stderrいらないから捨てるとか

hoge.sh
#!/bin/bash
exec 2> >(tee -a stderr.log >&2)
...

./hoge.sh 2> /dev/null
>&2があるので、(コンソールへの)stderrはうまく捨てれる
0612デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:57:13.42ID:DBJTu1IU
bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する
https://sechiro.haten blog.com/entry/2013/08/15/bash%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%BD%AE%E6%8F%9B%E6%A9%9F%E8%83%BD%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E4%BD%9C%E6%A5%AD%E3%82%84%E3%82%B9
そのスクリプトの出処はここだな

出力のプロレス置換ってこう使うのか
入力のプロセス置換はよく使ってるけどそっちはどうもな
0616デフォルトの名無しさん
垢版 |
2019/09/15(日) 16:58:31.20ID:BxQhi0/5
grepは自身で上書きすると中身空になるけど回避方法ある?要はspongeなんだけども
0618デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:10:14.49ID:riyG3w3b
>>612
こんなのが出たので見るのを止めた。


この接続ではプライバシーが保護されません
sechiro.hatenblog.com では、悪意のあるユーザーによって、パスワード、メッセージ、クレジット カードなどの情報が盗まれる可能性があります。詳細
NET::ERR_CERT_COMMON_NAME_INVALID
0622デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:28:57.92ID:4TgO8+RX
5ch では、はてなブログのURL を貼ってはいけない!

書き込み禁止画面が出ずに、いきなり吸い込まれて、
アクセス禁止になるようにしてあるから、超危険!

同様に、twitter の長いURL にも、吸い込まれるものがあるらしい

そこだけ、全角などに変換した方がよい。
hatenblog
0624デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:37:11.76ID:4TgO8+RX
>>612
hatenblog

そもそも、上ははてなブログじゃない!w
a が無い

はてなブログは、
hatenablog
0626デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:40:54.01ID:h836vV7+
https://sechiro.hatenablog.com/entry/2013/08/15/bash%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%BD%AE%E6%8F%9B%E6%A9%9F%E8%83%BD%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E4%BD%9C%E6%A5%AD%E3%82%84%E3%82%B9
0628デフォルトの名無しさん
垢版 |
2019/09/15(日) 20:14:01.28ID:riyG3w3b
>>619
スマホのChromeなんだけどね。おかしいのかね?よくわからんが。
0629デフォルトの名無しさん
垢版 |
2019/09/15(日) 20:17:20.74ID:riyG3w3b
>>621
あ、そういうことか。
たしかに無事開いてしまったら何か違う世界を見てしまいそうで怖いアドレスだなw
0630デフォルトの名無しさん
垢版 |
2019/09/16(月) 19:53:43.50ID:vTAkg/qq
16進数(最大二桁 0xFF)から8進数に変換したいんですが
bcを使う以外にsedなどを使った方法とかありますかね…?
$ printf 'obase=8;ibase=16;%s\n' 'FA' | bc
もしあれば,bcは16進数のアルファベットが大文字じゃないといけないし,
POSIX標準とはいえUbuntuとかには既定で導入されてないしで,
あまり使いたいくないんです(わがままですいません)
0633デフォルトの名無しさん
垢版 |
2019/09/16(月) 23:39:17.58ID:LCUbae2V
>>630
hex=fa
oct=$(( ($hex >> 6) * 100 + ($hex >> 3 & 0x7) * 10 + ($hex & 0x7) ))
# oct=$((0x$hex >> 6))$((0x$hex >> 3 & 0x7))$((0x$hex & 0x7)) 3桁固定版
echo "$oct"

出力が必須でない場合(変数に入れて処理する場合)は
oct=$(printf '%o\n' 0xfa) よりも速いはず
0634デフォルトの名無しさん
垢版 |
2019/09/16(月) 23:43:56.37ID:LCUbae2V
他にも case を使って書けるはず
最大0xFFなら

case $value in
01) 〜
02) 〜

[fF][eE])
[fF][fF])
esac

とかねw

たかだか256+α行。頑張ればFF の一桁ずつ処理すれば行は減らせるだろう。
0635デフォルトの名無しさん
垢版 |
2019/09/16(月) 23:46:42.80ID:LCUbae2V
>>633訂正

× oct=$(( ($hex >> 6) * 100 + ($hex >> 3 & 0x7) * 10 + ($hex & 0x7) ))
○ oct=$(( (0x$hex >> 6) * 100 + (0x$hex >> 3 & 0x7) * 10 + (0x$hex & 0x7) ))
0636デフォルトの名無しさん
垢版 |
2019/09/17(火) 00:06:22.06ID:IA1rgq5F
>>632
posixの範囲ではprintfで16進数から文字に変換することが出来ない

printf '\101' # => A
printf '\x41' # bashは変換できるが、dashでは変換できない

バイナリデータの処理など、文字コードを使って処理する必要がある場合は
8進数を使うほうが良い
0637デフォルトの名無しさん
垢版 |
2019/09/17(火) 00:09:45.15ID:IA1rgq5F
8進数よりも16進数の方が使い勝手が良いのにパーミッションが8進数なのは、
当時はまだ16進数が発明されてなかったからだったりするのかな?
シェルスクリプトもそうだけど、なんか古い時代は8進数しかなかった感じがする
それとも単なるビット数を節約しただけなんだろうか?
0642デフォルトの名無しさん
垢版 |
2019/09/17(火) 12:39:27.59ID:e1bW+EWq
>>637
>当時はまだ16進数が発明されてなかったからだったりするのかな?
どこでなにが「発明」を指して居るのかわからんが、コンピュータ業界コンピュータサイエンス(?)としては当時でも普通に16進数があっただろう。スイッチをパチパチしてマシン語を打ち込む当時のコンピュータでは打ち込むプログラムは16進数で書いてたようだから
Unix version 1 は 18ビットマシンの PDP-7 でから始まり、すぐに PDP-11 に移行したがその名残だろう、K&R C の文字リテラルでは8進数表現しかできないのとかは、また、K&R C の影響じゃね
PDP-7 は 18ビット= 3 3 3 3 3 3 で表した方書いた方がきりがいいからそれが普通のような感じだったんじゃね、今でもパーミッションは3ビットに収まっているので3ビット区切りで表した方が書いた方がわかりやすいのと同じように
0644デフォルトの名無しさん
垢版 |
2019/09/17(火) 13:26:02.16ID:e1bW+EWq
そうなの。見物したスイッチをパチパチしてマシン語を打ち込む当時のコンピュータは16bitだったから、PDP-7(というかPDP-11の前までのDEC)が異端かと思ったw
0645デフォルトの名無しさん
垢版 |
2019/09/20(金) 09:32:25.18ID:pw3H64dJ
16進数から8進数への変換って↓
$ hex=fa; printf '%o' $((0x$hex))
↑こういうのだとPOSIX違反?
0646デフォルトの名無しさん
垢版 |
2019/09/20(金) 13:37:02.90ID:fQRmEVoK
POSIXは知らんが、 古いzsh? は $((0x$hex)) が使えなくて $((16#$hex)) だった気がする
もしくは $((011)) が zshでは8進数にならなくて $((8#11)) と書かないといけない
という問題だったかもしれない。まあ忘れたw
0648デフォルトの名無しさん
垢版 |
2019/09/20(金) 18:40:57.99ID:YblgUZDU
>>644
基本的にメインフレームってカテゴリのコンピュータはCPUも自社設計だったので
8bit単位じゃなく自分たちの使いやすいbit数だった
ザイログとかモトローラのCPUを使っていると基本的に8bitの整数倍になる
0649デフォルトの名無しさん
垢版 |
2019/09/22(日) 22:42:51.90ID:UP8ZY9Jm
symlnkのフォルダからファイルをmvすると実体パスの方で移動するけどmvの仕様?
0651デフォルトの名無しさん
垢版 |
2019/09/22(日) 23:05:40.23ID:QKufl6gy
例えば/a/b/cがあって、/x/yが/a/bを指すとする。
cd /x/y; mv c ..したときにcが/x/cじゃなくて/a/cになるという話なら仕様。
実際はcd /x/yの時点でカーネル的には既に/a/bに移っている。
pwdして/x/yと表示されたり、プロンプトに/x/yと出たりすることがあるのは、シェルがそう見せているだけ。
外部コマンドを呼んだ時点で/x/yにいるという情報は伝わらない。
0652デフォルトの名無しさん
垢版 |
2019/09/22(日) 23:22:54.08ID:dHMqf7rP
シェルによっては今いるディレクトリをシンボリックリンクのままPWD環境変数に出力するから、外部コマンドでも>>651の場合に/a/bではなく/x/yにいると分かることもある
だからmvでもやろうと思えば環境変数によって動作をかえて/x/cに移すこともー応可能ではある
ただ普通はそういう危なっかしい動きはしない
0653デフォルトの名無しさん
垢版 |
2019/09/23(月) 00:58:42.07ID:XnqhgXWR
なるほど
~/dir/foo.txtがあって、dirのリンクを~/Desktop/dir_linkに作ったんだ
んでdir_linkからmv foo.txt ../したらDesktopになくてあれってね
シンボリックリンクはあくまで別名だって念頭に置かないといつかやらかしそうだなぁ
0654デフォルトの名無しさん
垢版 |
2019/09/23(月) 13:44:18.78ID:uT43KuRv
シンボリックリンク自体はカーネルっていうかファイルシステムの機能であって
シェルの機能じゃないよね?

シンボリックリンクされたディレクトリへの移動やその表示が、シェルの機能?
0655デフォルトの名無しさん
垢版 |
2019/09/23(月) 14:55:36.41ID:16gV8N0U
シンボリックリンクはただのファイルで、APIが機能を提供してるだけだろう
ハードリンクはファイルシステムの機能だろうが
0656デフォルトの名無しさん
垢版 |
2019/09/23(月) 15:20:14.51ID:0wgm+uqt
シンボリックリンクはPOSIXで決まっているが、
シェルスクリプトとは関係ない。
シェルとも関係ない。すれ違いだ。
シェルスクリプトの話をしろ。
0659デフォルトの名無しさん
垢版 |
2019/09/23(月) 16:01:07.98ID:16gV8N0U
>>657
どこまでをファイルシステムかと言うのかだが、論理矛盾とかリンク切れとかあってもなんも関係ないのだから低レベル=どのファイルシステムでフォーマットする?というファイルシステムのファイルシステムではないな
そのレベルではファイルとフラグを提供しているにすぎない

APIも含めたOSがアプリケーションに対しての提供するファイルシステムといえばファイルシステムだろうが
0661デフォルトの名無しさん
垢版 |
2019/09/23(月) 16:58:42.91ID:COQ8/G13
シンボリックリンクやハードリンクはOSの機能
ファイルシステムはそれを実装するだけ
(FATのように実装してないものもある)
0668デフォルトの名無しさん
垢版 |
2019/09/29(日) 15:56:27.36ID:kt1IDkk5
誠意って何かね
0669デフォルトの名無しさん
垢版 |
2019/09/29(日) 17:07:22.81ID:G1Omq4Sq
0672デフォルトの名無しさん
垢版 |
2019/09/29(日) 19:31:49.84ID:cn7qdGIP
Oh, I like Japan.
Japanese are crazy. Ha ha ha.
Japanese are pigs, pigs, you know.
Moneys and they have small cocks you know short legs yellow monkeys.
Do you understand?
0675デフォルトの名無しさん
垢版 |
2019/09/29(日) 20:34:15.29ID:1ct4yMlj
POSIX準拠で固定小数点ライブラリほしいな
小数使うことは稀だけど、たまに無いとめんどくさい
exprは外部コマンドで遅いので却下w
0676デフォルトの名無しさん
垢版 |
2019/09/29(日) 20:53:22.53ID:UgGWrkoZ
bashって便利だけど計算部分だけマジでダサいな

1+1が
$((1+1))ってなんなんだよ
0677デフォルトの名無しさん
垢版 |
2019/09/29(日) 21:19:57.63ID:1ct4yMlj
どの言語にも言えることだけど、
ダサい部分ってのは互換性のためだよ

シェルスクリプトは外部コマンドを関数として呼び出せて、
そして外部コマンドに使える文字は、ファイルに使える文字と同じ
だから例えば@とか%とかいう文字でさえ、コマンド名として使える

だから、安易に記号を追加するわけにもいかないし予約語も増やせない。
$に関してはシェルスクリプト当初から特殊記号だったから
新たに特殊記号や予約語を増やすのではなく$を拡張するという方法を採用したのだろう

互換性は一番大事だからね
0678デフォルトの名無しさん
垢版 |
2019/09/29(日) 21:21:56.71ID:1ct4yMlj
補足

例えば「1 + 1」は、"1"コマンドを、+と1という引数で呼び出すという意味になるし
「1+1」だと"1+1"コマンドになる。

選択肢が限られるんだよね
0680デフォルトの名無しさん
垢版 |
2019/09/30(月) 13:47:50.63ID:bgqbOy9v
POSIXの仕様書,
算術展開での(浮動)小数点演算は今度の2020年度改訂で一部解禁されるらしい。
ちなみに時を同じくして$'\n'←みたいな書式も解禁。
やったぜ。
0682デフォルトの名無しさん
垢版 |
2019/09/30(月) 14:57:01.11ID:seE3nGDx
石器時代かよワロタw
0686デフォルトの名無しさん
垢版 |
2019/09/30(月) 17:46:55.62ID:zGRcNdYK
もしもし、先生!もしもし!
だけどもねー、実はあのー、子供つくらないようにしてるんですよね、わたくしも本当に辛くてですね、子供には遺伝しないでしょうか?
0689デフォルトの名無しさん
垢版 |
2019/09/30(月) 21:58:43.29ID:M1BD3UNk
しょうっすか…
0690デフォルトの名無しさん
垢版 |
2019/09/30(月) 23:03:44.06ID:qRuhgEzP
無理にシェルスクリプトだけで小数対応しなくても、
perl -e "print 0.2*0.3"
とか、いろいろやりようはあるからあまり必要性を感じない。
0691デフォルトの名無しさん
垢版 |
2019/09/30(月) 23:20:20.33ID:nI7iDoAi
>>690
大量に計算をするとプロセス呼び出しになるから遅いんだよ

$ time ksh -c 'for i in $(seq 1000); do n=$(echo "0.2*0.3" | bc -l); done'
real 0m1.921s
user 0m1.762s
sys 0m0.715s

$ time ksh -c 'for i in $(seq 1000); do n=$((0.2*0.3)); done'
real 0m0.009s
user 0m0.009s
sys 0m0.000s

たったの1000回でここまで差が出るからね
0692デフォルトの名無しさん
垢版 |
2019/09/30(月) 23:28:35.91ID:qRuhgEzP
意図と違うと思うが、
time perl -e '$j=0; for($i=0;$i<1000;$i+=1) { $j+=0.2*0.3; }; print $j'
とか、別にシェルスクリプトだけに頼らんでもなんとかなってしまうというか・・・・
0699デフォルトの名無しさん
垢版 |
2019/10/01(火) 02:00:19.69ID:rxcb8vGn
そんな事する必要がないなら縛りって言ってもいいけど、
perlが入ってない環境は実際に存在するからね
0704デフォルトの名無しさん
垢版 |
2019/10/01(火) 09:11:30.09ID:ZA6pNaC0
POSIXで縛るだけではPOSIX未満のbusyboxで動かなかったりするからね
可搬性を高くするにはPOSIXで規定されたコマンドであっても
なるべく使わないほうが良い
0706デフォルトの名無しさん
垢版 |
2019/10/01(火) 11:09:51.43ID:ZA6pNaC0
ここはシェルスクリプトのスレ
つまり可搬性とはシェルスクリプトの話をしてる。

シェルスクリプトではよく外部コマンドを呼び出す
しかし外部コマンドはOSによって違う。

特に基本的なコマンドは、各OSでバラバラに作っていたり
独自の修正を入れており複数の実装があり微妙に動きが異なっている。
例えば、LinuxのsedとMacのsedでは使える命令が違う。

POSIX準拠のコマンド(もちろんオプションなども含む)で規定されてるものだけを
使っていれば可搬性はそれなりにあるが、それでも完璧じゃない。
例えば組み込みで使われるbusyboxはPOSIX準拠コマンドのサブセットが実装されてる。

だから本気で可搬性を高くしようと思えばPOSIX縛りでも不十分。
POSIX準拠のコマンドが信じれない。という前提にたてば
思い切って外部コマンドすら呼び出さない、完全にシェルスクリプトだけで
実装するのがもっとも可搬性が高い。

もちろん限界は有るので実際には出来る限りシェルスクリプトで作って、
外部コマンドは必要最小限、必要に応じて互換性を吸収するようにラッパー関数を作る。
ということになる。
0707デフォルトの名無しさん
垢版 |
2019/10/01(火) 15:50:14.87ID:P1455Lxu
可搬性に異常に拘っているのは一人か二人しかいないけどな
可搬性に拘ってないというレスにも可搬性を押し付ける
0708デフォルトの名無しさん
垢版 |
2019/10/01(火) 16:28:55.36ID:9fvqkmcJ
認めろよ。
シェルスクリプトに可搬性などない。
どこでも動くシェルスクリプトなど幻想。
0709デフォルトの名無しさん
垢版 |
2019/10/01(火) 16:40:08.47ID:8eIOCDAd
hoge () {
echo "Hello"
}

for i in $(seq 1000); do
hoge
a=$(hoge)
done

myfunc と a=$(myfunc) の実行時間の差はなんなん?標準出力を横取りするためだけにしてはコストが高いかな
簡単に思いつくのは横取りするためパイプでで別プロセスにしなきゃとかかな?
0710デフォルトの名無しさん
垢版 |
2019/10/01(火) 16:46:56.18ID:O2y9FdCY
それBashでやってない?
試しにKshでやってみて。(俺環かもしれんから,速度比較は晒さない)
0711デフォルトの名無しさん
垢版 |
2019/10/01(火) 16:52:40.16ID:/6RuW8/Q
perlが入ってない環境ってそれは入れる必要ないんだろ
一から構築していくならそれでいいけど
0713デフォルトの名無しさん
垢版 |
2019/10/01(火) 17:07:00.59ID:cNB/gbgI
perlが無い環境があるからどうのこうの言うけど
kshが無い環境があるからは言わないんだなw
0715デフォルトの名無しさん
垢版 |
2019/10/01(火) 18:59:48.82ID:8eIOCDAd
>>712
zsh他も差があるは、>>709で体感できる差があるが正しいか
kshでも差があるね。ループ数増やせば体感できるほどの差となるね
0716デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:16:54.12ID:fust4gpU
>>709
forkだよ。$( ) の部分がサブシェルになってて
多くのシェルではサブシェル = 別プロセス生成で実装されてる。
そのおかげでサブシェルの中でcdを実行したり変数を使ったりしても
呼び出し元は汚染されたりしない

kshはサブシェルの実装が最適化されていて
全てではないが、サブシェルの部分を同一プロセスで実行する。
独自で状態の保存と復帰を実装してるのだろう。

https://codeday.me/jp/qa/20190810/1425430.html

kshは速いと言っちゃ速いんだが、その(複雑な?)仕組みのせいで
バグのもとになってたりする。ということを書いてあるページが
有ったんだがどこか忘れた。
0717デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:25:21.59ID:fust4gpU
遅い原因の本質は標準出力のキャプチャじゃないから
この二つでも違いがでる

hoge () {
 :
}

for i in $(seq 1000); do
 hoge
 (hoge)
done

>>715
> kshでも差があるね。ループ数増やせば体感できるほどの差となるね
そうなんだよね。サブシェルのコストは以外と大きい。
だから変数に入れて使うことが目的とした関数は以下のように
グローバル変数を使って返したほうがずっと速いわけさ

hoge () {
RET=Hello
}

for i in $(seq 1000); do
hoge
a=$RET
done
0718デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:26:55.18ID:8eIOCDAd
>>716
内部関数なのにってとこがね&普通の他の言語とはやはり違うな(まあ当然だが)という(内部汚染とかこれの本題ではないっすよ)

zshはkshを習ってだけど、ちょこちょこ習えてないなあ。kshの否定面のレスだけど、kshは人に優しいとこもあるとも思うw
a=0
ls | while read line; do
[ "$line" = 'hoge' ] && a=1
done
[ a -eq 1 ] && ...
っていう見た目他の言語的では当たり前のがちゃんと動くというwまあ、異端だけど

とりあえず、どうしようもないそういうものということでいいのね。どうも
0719デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:30:13.87ID:8eIOCDAd
>>717
せっかくですが、ちょい本題とは違うかな。そりゃ () は...
なんで内部関数なのにサブシェルになんのかねん、他の言語的感覚ではという
まあ、内部関数だろうと、() と同じで $() もサブシェルになるということをおっしゃっりたいのでしょうけど
どうも
0720デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:37:54.80ID:fust4gpU
>>719
> なんで内部関数なのにサブシェルになんのかねん、

考え方が違う。

コマンド置換$( ) は「サブシェルを使用して実行する」という"仕様"なんだよ
なんでサブシェルになるのか?ではなく仕様でサブシェルにすると決まってる。

ただし別プロセスにするとは決まっていない。だから子プロセスとかいう既存の
名前ではなく、新たにサブシェルという用語を作った。

サブシェルの仕様としては、「サブシェル内で行った変数などの変更は呼び出し元には伝わらない。」
などがあるが、それを実現してるなら別の別プロセスでなくてもよい。
だけど別プロセスにするほうが実装が簡単だから多くのシェルではサブシェル=別プロセスになってる。
0721デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:41:25.43ID:8eIOCDAd
>>720
その続きなどを読んでよ。言われていることはすでに書いてあるんですけど

どうしようもないという結論が得られたのでw、
結局、こんなことにもそれなりの差があるんだから「常時それも無条件で」実行時間の差があるなんて気にするなんて無意味だなと
なにかそれが問題になったときに気にする対応すればいいだけだなという。のをそもそも言いたかったw
0722デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:44:28.64ID:fust4gpU
>>718
> 内部関数なのにってとこがね
他の言語の場合、(基本的に)関数内の変数の変更は呼び出し元に反映されない。
つまりローカル変数になってるだろ?

それと同じなんだよ。POSIXの範囲ではlocalもtypesetもないから
シェルスクリプトにはローカル変数がない

ように思えるが、実はサブシェルを使うからローカル変数は必要ない。とも言える。
ローカル変数を実現するためのサブシェルと言える。
サブシェルの仕様としてローカル変数は必須の機能だが、別プロセスにするのは必須ではない。

サブシェル(別プロセス)と捉えるから仰々しくなってるが、
変数のローカル化と考えれば、内部関数内の変数をローカル化するってだけだから
「内部関数なのに」とは思わないだろ?
0723デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:51:56.19ID:8eIOCDAd
>>722
なにを教えてくれてるのか教えたいのかわからないです
内部変数?内部変数環境のことは言ってないです。他の言語でもの(内部)関数を呼ぶその返り値を使うって話なんですけど
内部変数云々ならhogeもサブシェルにしなくちゃじゃないですか?内部関数という言葉が悪かったならすまんすですけど
0724デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:52:05.05ID:fust4gpU
>>718
そのコードに関しては

ls | {
 a=0
 while read line; do
  [ "$line" = 'hoge' ] && a=1
 done
 [ a -eq 1 ] && ...
}

こう書けばいいって事がわかってから悩むことはなくなったなw

上記をさらに発展して、関数化すれば以下のようになる。

hoge() {
 a=0
 while read line; do
  [ "$line" = 'hoge' ] && a=1
 done
 [ a -eq 1 ] && ...
}

ls | hoge

そうするとa変数は実質ローカル変数として扱ってるんだから
スコープ的にはこっちのほうが適切だと気づくだろう
0725デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:53:21.70ID:fust4gpU
>>723
> 内部変数云々ならhogeもサブシェルにしなくちゃじゃないですか?

使い分けるんだよ。

ローカル変数化したいならサブシェルを使う。
そうでないならサブシェルを使わないって。
0726デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:56:56.36ID:8eIOCDAd
>>725
なんか教えたがりのようですけど、ちょっと無理があるかなと
あくまでも「他の言語的感覚では」が前提、それとは違うというのの確認でしかないんですけど
使い分けるとかそもそも内部変数の話はしてないんですよ
0727デフォルトの名無しさん
垢版 |
2019/10/01(火) 20:00:53.41ID:fust4gpU
>>726
他の言語感覚って言うけど、
じゃあお前いくつ言語しってんの?って話だよ。

狭い言語の知識=言語の全てって思ってるだけさ
0728デフォルトの名無しさん
垢版 |
2019/10/01(火) 20:02:16.96ID:8eIOCDAd
そもそものそもそもは、bcの毎回起動するのに時間がかかるというので、せっっかくの標準で暗黙的にもマルチプロセスなのでサーバ&クラアント的に起動しとけばいいんじゃねと

trap 'exec 8>&-; exec 7>&-; rm -f from-server to-server' EXIT

mkfifo from-server
mkfifo to-server
exec 8<> to-server
exec 7<> from-server

< to-server bc -l > from-server &

calc () {
echo "$*" > to-server
read result < from-server
echo $result
}

てのを書いたのよ、単なる興味的にどれだけのコスト削減できるのかを試し確認するために。で、この一連の(他の言語的には)思ってもいなかったとこでコストがあるなと。その確認だけだよ。で、やっぱり>>721のようなことだなとw
0730デフォルトの名無しさん
垢版 |
2019/10/01(火) 20:09:04.89ID:fust4gpU
>>728
どの言語でも、その言語を知らなければ、その言語特有の所でコストがかかるってだけだ
だからちゃんとその言語を知らなければいけない。
0732デフォルトの名無しさん
垢版 |
2019/10/01(火) 21:09:03.88ID:/EdGAgHY
>>726
つうか、お前の感覚の話なんか誰にもわからんだろ。
だから、馬鹿だと言う前提で説明してるだけじゃん?
それすら理解できないってことはやはり馬鹿なんだなぁと思うばかり。
0733デフォルトの名無しさん
垢版 |
2019/10/01(火) 21:21:30.07ID:T/R8ZN8b
ろくにシェルスクリプトのことを知らないから聞いてみた。
親切に教えてくれる人がいた。
……何が不満なんだ?
0735デフォルトの名無しさん
垢版 |
2019/10/01(火) 21:31:30.87ID:8eIOCDAd
よくわからないが、他の言語で
func()

a = func()
で、こんな差があるのなんて、他にどの言語あるの?俺は知らない少々他の言語を知っているが
てか、そういうのは普通は「使えない」からそうならないようにするし、そもそもシングルプロセスを前提のが多いだろうから、他の一般的な言語でシェルスクリプトのようなのはちょっと思いつきません

func がまあ普通の速さなので、a = func もなんか他の方法があるのかなと。無いという確認はとれてお礼も言っているのになあ>>718
関係ない(知っていることを)ことを延々とでいい加減してくれというのはあったけどw
0737デフォルトの名無しさん
垢版 |
2019/10/01(火) 21:57:08.01ID:Ueonb/Q5
みんな違って
 みんないい
  まつお
0738デフォルトの名無しさん
垢版 |
2019/10/01(火) 22:01:17.19ID:8eIOCDAd
>>736
相変わらずだね。何を言いたいのかさっぱり
返り値を使う(関数)使わない(サブルーチン)でコストがこんなにあるって話なのに
0739デフォルトの名無しさん
垢版 |
2019/10/01(火) 22:14:23.82ID:8eIOCDAd
そうだ、ksh(zsh)ならreadでと思ったら、逆に遅くなるのね
hoge | read a
サブシェルになるのはhoge。kshはパイプでもパイプを使わずになんちゃらを使ってなんとかかんとかwとかあったからちょっと期待したのに

あれだな、そもそもシェルスクリプトの関数の返り値はreturnでの実行ステータスしかない、それ以外の形態(テキスト)は考えていませんからこんな感じにしかなりませんってとこか
0740デフォルトの名無しさん
垢版 |
2019/10/01(火) 22:58:18.96ID:9HRGRt02
for ループは、while よりも遅いだろ。
bash も、dash よりも遅いだろ

ループでは、for, bashを使わない方が速い
0742デフォルトの名無しさん
垢版 |
2019/10/01(火) 23:35:42.98ID:DttT1lmW
パイプで処理をつなげていくシェルスクリプトにおいて
返り値=出力なんだよ

出力を読み取って、処理して出力する

そういう基本がわかってないだけ
0743デフォルトの名無しさん
垢版 |
2019/10/01(火) 23:53:15.78ID:8eIOCDAd
return
なんすけど。returnの意味知ってる?とかいう。いや、しつれい
エラー情報でもない、単なる終了ステータス。exit ではないのは、まあ、関数だからと、exit と区別がつかないからかなw
0744デフォルトの名無しさん
垢版 |
2019/10/01(火) 23:59:02.30ID:8eIOCDAd
function name () { }
が、POSIXではないのは(これからも採用されないかも?採用するの?)というのは、関数じゃねえー、所詮コマンドだなというとこかなと思ったりしてみたり、今回w

>>742そのレベルで馬鹿にできるのはあなたがそのレベルと言っているようなもんかなとw
てか、return なのにそれを返り値と見るのを頭から否定するのは、いままでの同一人物としか思えないんだけど。シェルスクリプトは知っているがシェルスクリプトしか知らないシェルスクリプトにだけ拘るw
0747デフォルトの名無しさん
垢版 |
2019/10/02(水) 00:20:59.41ID:DWeKr+Az
アセンブラでもreturn(RET)がある。
これも戻るという意味なだけ
呼び出し元に何かを戻すという意味はない
0748デフォルトの名無しさん
垢版 |
2019/10/02(水) 00:23:56.96ID:238K9SSk
アセンブラでもマクロアセンブラはあったりするけどな
戻り値をどういう形態で(どのレジスタにとか)という決まりであれば
>呼び出し元に何かを戻すという意味はない
マジで言っているの?アホらしい
0749デフォルトの名無しさん
垢版 |
2019/10/02(水) 00:25:12.52ID:DWeKr+Az
>>748
「マジでいってんの」しか言ってないよなw
returnを翻訳してみろ。戻るという意味しかない
0751デフォルトの名無しさん
垢版 |
2019/10/02(水) 00:30:13.30ID:238K9SSk
言うならアセンブラでなくて機械語だな。ほんとにしょうもない知識自慢

>>749
>returnを翻訳してみろ。戻るという意味しかない
マジで言ってるのとしか言えんやん。「return なんとか」とか普通にあるぞ?
>>743 にreturnしか書いてないからか?なんかしょうもないなああwなんかしょうもないけど、だったらなんかすまんな

>>750
関数として見たらだよ。すでにそういうことは>>743,744で言っているんだけど
所詮コマンドだなで終わってるよ
0754デフォルトの名無しさん
垢版 |
2019/10/02(水) 01:35:40.52ID:238K9SSk
「よくわからない」が何を指しているのか「よくわからない」だろう?
また単なる「語」に食いつくwいつものかとしか思えません
0756デフォルトの名無しさん
垢版 |
2019/10/02(水) 01:39:39.82ID:238K9SSk
同一人物かどうか知らんが、>>742から同じ人物としてしまう、もうw
同じ「レベルw」でしかも同じ姿勢としか思えないので。もう十二分にそのレベルwを自ら率先して晒してしまったので>>744の後半で正解だったなと
あとはもう「教えてww」やんない
0761デフォルトの名無しさん
垢版 |
2019/10/02(水) 02:58:29.05ID:238K9SSk
>>760
>>756をよーく読もうな。読めない?

>>753は何を言いたいの?
機械語は01だからreturnに対する語はないと言いたいの?ととって、ああまたかというw>>756なんだよ(よく読んでねw)

>機械語にreturnに類する語は出てこないぞ?
って、どういう意味?俺の理解とは別でならすまんかったちょっと続ける?
0763デフォルトの名無しさん
垢版 |
2019/10/02(水) 03:28:45.47ID:238K9SSk
>>762
なにを言いたいのかさっぱりなんですが、具体的に自分のお言葉でお願い
まさか、RETはあるがReturnは無いではないだろうし、さっぱりわからん

(そしてなんで同じやねん、その姿勢w)
0766デフォルトの名無しさん
垢版 |
2019/10/02(水) 03:46:58.80ID:DWeKr+Az
シェルスクリプトのreturnは終了ステータスを返すもので
これは他の言語の返り値ではないのは一目瞭然なんだがね

だからこそ $_ という変数(外部コマンドを呼び出した時の終了ステータス)で
アクセスできるわけだし

しらないならシェルスクリプトを勉強してくださいって言うしか無いな

なんならbashのドキュメント引用しようか?

return [n]
指定した返り値 n で関数を終了させます。 n を省略すると、返却ステータスは 関数内で最後に実行したコマン
ドの返却ステータスになります。 関数の外側で使われているが、 . (source) コマンドによるスクリプトの実行
中である場合、 シェルはそのスクリプトの実行を止め、 n またはスクリプト内で最後に実行されたコマンドの
終了ステータスを スクリプトの終了ステータスとして返します。 関数の外側で . によるスクリプトの実行中以
外に使われた場合、 返却ステータスは偽となります。 関数やスクリプトから実行が戻る前に、 RETURN トラッ
プ に設定されたコマンドが実行されます。
0768デフォルトの名無しさん
垢版 |
2019/10/02(水) 03:49:09.36ID:238K9SSk
>>764
マジか
残念ながらが同一人物に見えるとやはりなお思ってしまうよw

マジか。そんなんで偉ぶるwなんの意味があるのだかさっぱり
そもそもマシン語ではない、アセンブリ=ニーモニックだし。ニーモニック命令は3文字にという昔の風習なだけだろうに

豆知識
そもそも、そんなRETでもいいけどReturnすらないCPUもある。POPしてジャンプという

なんだかなあ
0769デフォルトの名無しさん
垢版 |
2019/10/02(水) 03:55:47.57ID:238K9SSk
あら。なんかすまん、別人なのね

>>766
んー、なんで「知らない」前提なのかさっぱりわからん。一般的な関数の形態としての話だし、その言っていることは>>743,744で書いているのだけど(もちろんそんなことは前々から知っていての)

あくまでも関数の形態としてのreturn文ね。わからないかなあ

なにか俺は知らないを前提に書いているようだけど、なんで??
0770デフォルトの名無しさん
垢版 |
2019/10/02(水) 04:19:21.82ID:238K9SSk
ん??
ID:DWeKr+Az が頓珍漢に横入りしたのかwwなにをのたまっているのかだかな。もうあんたはいいよw同じこと繰り返してるし

>>768,769はID:o4tQ0hzeかと思って書いた
>>761はID:o4tQ0hze にご理解いただけたということでよろしいのですかね??
0771デフォルトの名無しさん
垢版 |
2019/10/02(水) 06:38:15.47ID:Ge1fP5ct
シェルスクリプトはシェルスクリプトだっていってんのに

俺は他の言語しか知らん。シェルスクリプトは他の言語じゃない!
といわれても、

うんじゃあ、シェルスクリプトを使えるように、シェルスクリプトの勉強をしましょうか?
としか言えんわなw
0773デフォルトの名無しさん
垢版 |
2019/10/02(水) 08:47:07.26ID:238K9SSk
>>771
どう読んで、そう思っているのか??
俺は他の言語しか知らん。シェルスクリプトは他の言語じゃない!なんてこれっぽっちも言ってないけど

他の言語の関数とはやっぱ違う他の言語の関数と同じようにはできないねというだけだが?端的には>>735と所詮コマンドということ
POSIXとしてもfunctionと名乗ってるけど、一般的=他の多くの言語のfunctionとは違うfunction、functionというよりコマンドだなやっぱちう
それがシェルスクリプトのfunctionで他の言語のfunctionとは違うって強く俺に言いたいんですかね?

いいよ、めんどくさいから読まなくても。レスするのもめんどくさいからw


>>772
まあ、そういう意味じゃないんだけどね(どういう意味のレスなのかイマイチだがw)
マクロアセンブラがあるようにアセンブラはどのようにもできる、やろうと思えば。縛りはそこじゃなくて、機械語だなという
また、機械語になんて関数なんて概念ないからねって話にも膨らむのになというw
0774デフォルトの名無しさん
垢版 |
2019/10/02(水) 09:15:47.03ID:gGwgwb6G
俺はたぬきしか知らないなんて言ってない!
みかんはたぬきとは違う!
0776デフォルトの名無しさん
垢版 |
2019/10/02(水) 09:23:09.06ID:238K9SSk
めんどくせえなあ。とんちんかんな変すぎるレスいらんw

知らなかったのはサブルーチンとして使うのと関数として使うのにコストの差が思った以上にあったというだけだな。functionなんだからそんなに差が無いようになんかあるだろうと思い込みによる
それだけだよ

別にだから関数のように使わないとも言わんし、いままでも使ってるし変わらずに使うけど
0777デフォルトの名無しさん
垢版 |
2019/10/02(水) 09:25:03.86ID:238K9SSk
>>775
無いよ。機械語を駆使して関数を作ってるっていう
機械語レベルの関数って?まあ、そんなCPUがもしかしたらあるのかもだが、知らんんなあ
0778デフォルトの名無しさん
垢版 |
2019/10/02(水) 09:39:55.43ID:238K9SSk
機械語にはサブルーチンはある。なきゃ困る(主にどこのアドレスに返ってくるのかのため)。単なるサブルーチンコール、引数の概念とかも無いw
引数も返り値(サブルーチン+返り値=関数)も、単なるmoveとかpushとかで「適当」なとこに入れての(主に高級言語(ほぼCだが)の仕様にあわせての)で、機械語の概念では存在しない
おしまい
0780デフォルトの名無しさん
垢版 |
2019/10/02(水) 10:39:50.67ID:238K9SSk
この板にもあるだろうと思ったらあったし、
「関数」で検索したらアセンブリで関数というのを説明しているようなレスもあるやん
調べろよそのぐらいw
0781デフォルトの名無しさん
垢版 |
2019/10/02(水) 10:46:24.58ID:238K9SSk
ああ、すまん。勇み足だった。よく読んだらあんま詳しくはないかな
ある程度知っていての注意点ぐらいだった
0784デフォルトの名無しさん
垢版 |
2019/10/02(水) 11:01:36.56ID:vYvaxxoe
だいたいシェルスクリプトと機械語なんて超相性悪いから
シェルスクリプトの概念を例える別の言語として機械語(含むアセンブリ言語)は最悪の選択ではw

シェルスクリプトの標準・仕様書であるPOSIXも機械語には全く言及してないってか
適用範囲の節で明言してるし。

(つーかこの喧嘩って俺がkshの速度を持ち出したことが発端なんだな…
良かれと思って余計なこと言わなけりゃよかった)
0785デフォルトの名無しさん
垢版 |
2019/10/02(水) 11:18:14.46ID:238K9SSk
>>784
>シェルスクリプトの概念を例える別の言語として機械語
じゃないよ、そもそも言いだしたのは。俺じゃないけど。単にreturnという「語」のに絡みついてだけの>>747
まあ、機械語(=1対一でしかないアセンブラ)では当たり前なんだが、上記の通りに

てか、めんどくさいから読まないでしょ?レスするのめんどくさいよw
0786デフォルトの名無しさん
垢版 |
2019/10/02(水) 11:26:54.15ID:238K9SSk
>>784
>シェルスクリプトの標準・仕様書であるPOSIXも機械語には全く言及してないってか
>適用範囲の節で明言してるし
CPUによって全然違うし(CPUメーカーが作るもんでしょう)なあ。標準化なんてする範疇じゃないんじゃないかな

>kshの速度を持ち出したことが発端なんだな…
いや、違うよ。kshの件は早々に終わっているといえば終わってる。そんなのが全く関係ないとこでながながとなってるだけだな
その前の俺の思惑wからだな、長々としている原因は。強いて言えば
0789デフォルトの名無しさん
垢版 |
2019/10/02(水) 17:06:22.98ID:em13adMU
ファイル名に()が入ってるやつをリネームしようとしたら
Syntax error: "(" unexpected
と言われる・・
ファイル名から()取り除いたらうまくいきました
どうすればよいでしょうか
0791デフォルトの名無しさん
垢版 |
2019/10/02(水) 20:34:07.49ID:9nRFYl/a
>>789
file="aaa (bbb) ccc"
mv "$file" "aaa"

シェルスクリプトでは引数の変数は""でくくるもんだ
常識だからな

shellcheckでチェックしろ
0792デフォルトの名無しさん
垢版 |
2019/10/02(水) 20:52:22.16ID:56vpBHGI
>>789
ファイル名をシングルクォートまたはダブルクォートで括る。またはそのようにシェルが特別な解釈をしてしまう文字の直前に \ を入れる。
0793デフォルトの名無しさん
垢版 |
2019/10/03(木) 00:15:58.71ID:SqD9WxB/
空白絡みで便乗質問です。

スクリプトがあるディレクトリを変数に入れるために、よく、
BASEDIR=$(cd $(dirname $0); pwd)
みたいなの書くと思うんですけど、
スクリプトを呼び出す際の相対パスや絶対パスに空白があっても大丈夫な場合はどう""をつければいいんでしょうか。

いつも試行錯誤するんですけどうまくいかなくて空白禁止にしちゃってます。
0797デフォルトの名無しさん
垢版 |
2019/10/03(木) 02:58:37.36ID:DFQVUXe/
>>793
BASEDIR=$(cd "$(dirname "$0")"; pwd)


BASEDIR="$(cd "$(dirname "$0")"; pwd)"
↑これは不要

"引数"として渡す場合に必要。
変数への代入は引数ではないので不要
0798デフォルトの名無しさん
垢版 |
2019/10/03(木) 07:38:56.48ID:vim6DLSQ
>>790
ありがとうございます
今のところThunarに標準昨日の一括リネームでなんとかなりました
>>791,792
ls: 'aaa (bbb) ccc.jpg'にアクセスできません:
みたいな感じになりましたね
0799デフォルトの名無しさん
垢版 |
2019/10/03(木) 08:37:13.31ID:/bA39X9L
小数の計算がPOSIXで標準化されるって本当?
これどうにかしてほしいんだが

$ zsh -c 'echo $((0.1+0.2))'
0.30000000000000004

固定小数点をサポートしてくれよ。
0801デフォルトの名無しさん
垢版 |
2019/10/03(木) 09:41:30.99ID:T62xH6xP
言語というよりはどういうライブラリ使っているかの問題だと思うが
0802デフォルトの名無しさん
垢版 |
2019/10/03(木) 09:46:51.64ID:wbZFe5vy
きちんと0.3返す言語は
分子と分母の2つ記録するから速度は遅くなる

遅いシェルスクリプトの選択した方法は正しい
0803デフォルトの名無しさん
垢版 |
2019/10/03(木) 09:50:59.70ID:/bA39X9L
いや、誰が浮動小数点数的な答えを求めてるのよ?
誰も数学的に間違った答えなんか求めてないでしょ?
0804デフォルトの名無しさん
垢版 |
2019/10/03(木) 13:46:15.91ID:oxXSy4fC
固定小数点なんて採用することはないな
提案してみろ、まずはStandard C Libraryとして
0805デフォルトの名無しさん
垢版 |
2019/10/03(木) 14:46:29.02ID:Fw9k5QN4
>>801
ライブラリというより、内部での浮動小数点の形(float,double,long doubleのどれか。いまどきfloatは無いか)、および、いつ丸めてるかだけじゃね

>>800のも大体は結局はCでの結果でしかないだろう。デフォのdoubleの結果がほとんどだろう
例えば、awkは問題ないように見えるが。2.3 / 0.1 = 23 だが、int(2.3/0.1) = 22 になるのも
0806デフォルトの名無しさん
垢版 |
2019/10/03(木) 14:56:31.03ID:gitagY/F
>>805
いや、だからライブラリだろ。
同じ言語でも内部表現に関する決まりのない言語なら例えばBCDで保持するようにしてそれ用のライブラリで計算や10進文字列変換したって構わないんだからな。
0807デフォルトの名無しさん
垢版 |
2019/10/03(木) 15:03:35.77ID:Fw9k5QN4
そういうある意味特殊なことをしようとする意志のがあればな
結局はCなんだよどういう言語でもああいう部分は。そしてCがそうだからただそうなだけ。わざわざ言うようなことをするのは極めて少ないだろ
浮動小数点がIEEEで決められてる正規なものだし。特殊なプログラムを使えということだよ=シェルとかに求めるのは現在のコンピュータ界隈では無理筋だな
0808デフォルトの名無しさん
垢版 |
2019/10/03(木) 15:08:16.36ID:wbZFe5vy
perl か何かに任せておけ
#!/usr/bin/env perl
use bigrat;
my ( $ss, $F, $ISO ) = (@ARGV);
unless ( defined $ISO ) { $ISO = 100 }

my %shutter_speed = (
30 => -5,
25 => -14/3,
20 => -13/3,
......
);
printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO};

ただし perl bigrat だと
0/1 +
を抜くと型が整数処理されるというわけのわからん挙動するケースがあったから
別の言語がいいけど
0809デフォルトの名無しさん
垢版 |
2019/10/03(木) 17:47:54.90ID:vTPkh0Cq
>>807
浮動小数点とIEEE754は同じ意味じゃないから語弊が生まれるよ。
文字コードとUTF-8ぐらいの関係だろう。
そして大抵の小数を扱えるプログラムがCでIEEE754に準拠した浮動小数点による取り扱いをしてるって意見は、全然同意できないな。
0810デフォルトの名無しさん
垢版 |
2019/10/03(木) 18:03:01.77ID:NYKgu9W2
1. 数学的には正しくない。
2. 速度のために正確さを犠牲にしている。
3. 誰も間違った答えは望んでいない

仕様だから〜とかいう話じゃないんだよね。
本当はみんな正しい答えが欲しい。

シェルスクリプトに速度は重要じゃないんだから
正しい答えのほうが便利だろ
0811デフォルトの名無しさん
垢版 |
2019/10/03(木) 18:39:51.77ID:K4DSf+RO
ほとんど近似値でたりるし必要なら自分でつくるなりすればとしか思わないよ
0812デフォルトの名無しさん
垢版 |
2019/10/03(木) 18:40:45.48ID:Fw9k5QN4
>>809
浮動小数点とIEEE754は同じ意味じゃないって?何を言いたいのかわからん
IEEE準拠じゃない独自のがあると?今時はFPUでやってるもんだし、速度なんぞを犠牲にしてまでもそういうのを「わざわざ」をやっている=それがウリになるからすぐに探せるんじゃないかなあ?

>>810
コンピュータサイエンス的にはそんなのはない=シェルスクリプト作る人も、そんな目新しいことをわざわざしないだろうとしか思えんな、いくらそう言っても
0814デフォルトの名無しさん
垢版 |
2019/10/03(木) 20:20:38.23ID:gitagY/F
適当なところで丸めりゃ良いんだからいいじゃねえか
0815デフォルトの名無しさん
垢版 |
2019/10/03(木) 20:23:06.87ID:Fw9k5QN4
少数なんて大体でしかないなんて常識だと思ってたのにな。少数使わないでも結局できたりするので、また、固定少数でも結局工夫が必要なのには変わりないので
なんでそんなに少数の正しさに拘っているのだか、どういう業界でそういうのをしかもスクリプトオンリーで書かなきゃならないって想像できないな
0817デフォルトの名無しさん
垢版 |
2019/10/03(木) 23:39:56.70ID:5pSilKMJ
気が付いたら少数を使うことがほとんどなくなった
利子の計算ぐらいだが、これは何桁で計算を打ち切るか
あらかじめ決めておく。安易に double とか使わない
0818デフォルトの名無しさん
垢版 |
2019/10/03(木) 23:43:58.79ID:6kVVAM38
簡単なシェルスクリプトしか書けんが何が覚えとけって言語ある?
s以外のsedの機能をようやく覚えたけどコマンドは文字列操作系で手一杯だわ
やっぱりperlの呪文覚えるしかないか
0819デフォルトの名無しさん
垢版 |
2019/10/03(木) 23:49:00.65ID:wbZFe5vy
パイプが強烈だから文字列処理に強い perl でしょ
オブジェクト指向はいらない
0821デフォルトの名無しさん
垢版 |
2019/10/04(金) 00:43:47.35ID:jIZSSFYe
>>817
それな。何桁で計算を打ち切るだと、どこで誤差が出るか想定しやすいが
doubleとかだと、桁数小さくても誤差が出るから、想定しづらいんだよね。

シェルスクリプトは型が文字列しか無いんだから、
内部の都合である数値型には影響されてほしくないな
0822デフォルトの名無しさん
垢版 |
2019/10/04(金) 01:20:38.52ID:5l5U7bxj
>>812
文字コードってのは文字に番号を割り振って取り扱いますよ、という概念。
浮動小数点も一緒で、有限の長さの小数を、小数点の位置を自由にすること
(仮数部と基数部で表現する)ことで表しますよって概念。
各ベンダーが独自に実装したら不便極まりないから文字コードにおけるUnicode(とかUTF-8)と同様IEEE754という標準がある。

浮動小数点演算、と言ったときにそれは一概にIEEE754内部表現を用いた演算とはならない。
https://ja.wikipedia.org/wiki/任意精度演算 の方式の中にはIEEE754でない浮動小数点表現を取り扱ってるものだってあるだろう。
BCDで小数が扱えるライブラリだってそう言うのが多いと思うよ。

IEEE754の仕様の浮動小数点演算で十分な場合は、CPUに便利命令が用意されてて1桁ずつ計算とかしなくても
一発で計算が求まるからIEEE754の浮動小数点は使われている、というだけでしょ。

浮動小数点っていう大きい概念がどういったものかってのと、IEEE754はその概念を実現するための一例でしかないってのを、
Wikipediaなり読み込んで理解したほうが良いと思うよ。
ほんと、文字コードとUTF-8は同じものだ、って言ってるぐらいトンチンカンだから
0824デフォルトの名無しさん
垢版 |
2019/10/04(金) 01:44:25.75ID:eSKeLXlH
>>818
1-liner、パイプ、CSV・テキスト処理、クローラーなら、可読性が高い、Ruby !

Perl のような謎のような記号は少ない
0825デフォルトの名無しさん
垢版 |
2019/10/04(金) 03:06:51.70ID:gCVTKDJQ
>>822
他のが無いというのではなく、実際に使われている多くはというのだよ
実際に使われているのはどれだけあるの?わざわざ使ってるのならそれは意味があるのだから、そうナニか書いてあってすぐにわかるだろうという。例えばbcのように

https://ja.wikipedia.org/wiki/IEEE_754
多くのプロセッサなどの〜 から書いてある通り。Javaがそうでないように書いてあるが、
https://www.ibm.com/developerworks/jp/java/library/j-jtp0114/index.html
同様に、java.math.BigDecimal が提供する任意精度の10進数もアプリケーションで使用されることは少ないため、開発者に無視されているケースがほとんどです
しかし整数を中心としたプログラムに、突如、整数以外の表現が出てくることがあります。たとえば、JDBCではSQLDECIMAL 列の優先変換形式としてBigDecimal が使用されます
なんてある意味それを表しすぎなくらい(まあ、ここは作る側ではなく使う側を言ってるけど)

CPUに便利命令ってFPUに対するのこと?一発で計算が決まるからという簡単だからとかじゃなくて、FPUがあるのはハードで支援用意しないとそもそも浮動小数点は重い演算だからなんだけど

>文字コードとUTF-8は同じものだ、って言ってるぐらい
いや、言ってないけど、なにか思い込みが激しいね。IEEEが利用されないのも普通という考え方もそうだが
0826デフォルトの名無しさん
垢版 |
2019/10/04(金) 03:13:49.05ID:gCVTKDJQ
>>825
>Javaがそうでないように書いてあるが
ああ、違ったしつれい。IEEE 754 を必須か
使ってないってどれだ?どういう理由でという思いがあって、おおと思ったんだけど
0827デフォルトの名無しさん
垢版 |
2019/10/04(金) 04:25:45.39ID:jIZSSFYe
もうさ、ハードで固定小数点数演算できるようにしたほうが良いんじゃね?
時代的にさ
0828デフォルトの名無しさん
垢版 |
2019/10/04(金) 05:02:19.85ID:Lr70dHDq
BCDはCPUで支援してた(そういう命令があったが)ようだが、無くなったっぽいという
BCDは速度的に有利な側面があるからわざわざそれ専用に用意しなくてもで無くなったかもしれない
0829デフォルトの名無しさん
垢版 |
2019/10/04(金) 07:56:41.21ID:sZOtDaP2
>>827
お前さんがこだわるほど他の人は必要だと思ってない。あったら便利なケースもあるかも知れんがコストなどに見合わないから誰もやらない。
0831デフォルトの名無しさん
垢版 |
2019/10/04(金) 11:44:19.51ID:VMw2vpri
固定小数点演算なんて整数演算と同等だからわざわざハードで実装しなくても問題ない
0832デフォルトの名無しさん
垢版 |
2019/10/04(金) 14:32:11.23ID:hcjI0QEW
>>818
そのままPerl覚えれば良い。

というのは、昔からあってあちこちで使われており、だいたいの Linux distribution はデフォルトでインストールされるような言語であるため。
インストールや環境整備で悩まなくて済む。後からモジュールを追加するとしても最初からrpmファイルがあったり、なくてもCPANを利用して簡単にインストールできる。
歴史が長く昔から使われて来たのでモジュールも沢山あり、またそれを解説しているサイトも多い。
0833デフォルトの名無しさん
垢版 |
2019/10/04(金) 14:36:19.79ID:hcjI0QEW
>>824
知らない言語を見ればどれも謎の記号だらけに見えるとは思うけどね。

まあでもPerlは確かに多いかな。なるべく使わないようにも書けるが。
0835デフォルトの名無しさん
垢版 |
2019/10/04(金) 14:42:01.29ID:hcjI0QEW
>>831
そうそう。整数計算後に割って桁合わせすれば良い。
0836デフォルトの名無しさん
垢版 |
2019/10/04(金) 14:42:43.80ID:hcjI0QEW
>>834
そうか。まあそういうのもある。
0839デフォルトの名無しさん
垢版 |
2019/10/04(金) 17:13:04.07ID:/U6oHgYD
そりゃお前の趣味だからな
perlを使いたいならインストールする
当たり前の話だよな
0841デフォルトの名無しさん
垢版 |
2019/10/04(金) 22:57:45.34ID:eSKeLXlH
Perl, Python2・3 は最初から、入っているけど、
Ruby も、apt で、簡単にインストールできる

ただし、Ruby 2.3 〜 2.6 で、プログラマーが、新しめの書き方をしていた場合に、
古いバージョンで動かないことがあるかも
0843デフォルトの名無しさん
垢版 |
2019/10/06(日) 09:44:40.51ID:462kqzf/
perlなんて普通に入ってるからな
Solaris、AIX、HP-UX、FreeBSD、Ubuntu、Centos、Redhat、Fedora
俺が触ってきたシステムではデフォルトで入ってたな
入ってない方が少数派だろ
0845デフォルトの名無しさん
垢版 |
2019/10/06(日) 11:24:56.60ID:kChpVj98
所属する研究室のMFにも入ってねーな。
Bシェルとかは(もちろん)入ってるけど

そういう点で言えばPOSIX準拠のシェルがあるようなシステムにはPerlも入っていて
PerlもないようなシステムにはPOSIX準拠シェルもないのかも知れんw
0846デフォルトの名無しさん
垢版 |
2019/10/06(日) 12:03:22.79ID:NnE09bAt
だからAlpine linuxにはPOSIX準拠のシェルは入っているが
Perlは入ってないんだって。
いい加減Perl依存やめようぜw
0848デフォルトの名無しさん
垢版 |
2019/10/06(日) 12:17:46.00ID:NnE09bAt
>>847
じゃあ言い出しっぺのあなたから、POSIXが含まれてる
LinuxやBSDやUnixやMacやWindowsを使うのをやめてください
0851デフォルトの名無しさん
垢版 |
2019/10/06(日) 12:38:20.58ID:462kqzf/
相変わらずPOSIX原理主義者が張り付いてるんだな
日本は信教の自由はあるが強要するのは犯罪だ
他人を巻き込まないで1人でやってろよ
0852デフォルトの名無しさん
垢版 |
2019/10/06(日) 12:54:03.04ID:NnE09bAt
だからPOSIX原理主義じゃないってw
Alpineはbusybox使ってるからPOSIX未満なんだよ
0853デフォルトの名無しさん
垢版 |
2019/10/06(日) 13:05:31.69ID:462kqzf/
お前はperl使いたくないんだろ?
お前の自由だし好きにすればいい

それを他人に押し付けるなと言っている

俺は普通にperlを使う
俺の自由だし好きにする

以上
0854デフォルトの名無しさん
垢版 |
2019/10/06(日) 13:12:15.17ID:rthNV3zo
        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.  終  了 │
     〜′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛
0855デフォルトの名無しさん
垢版 |
2019/10/06(日) 13:16:18.11ID:NnE09bAt
誰もPerl使うなって言ってないだろ。
Perlが入ってない環境があるという
事実を言ってるんだが
0857デフォルトの名無しさん
垢版 |
2019/10/06(日) 14:56:55.93ID:VRfDnOhz
マネーフォワードだろ。
0858デフォルトの名無しさん
垢版 |
2019/10/06(日) 17:41:58.00ID:3lXqNGxa
容量削減のためにPerlだけ抜くのも変だしそれ目的なら他のも入ってないのでは?
0859デフォルトの名無しさん
垢版 |
2019/10/06(日) 21:01:12.68ID:TprJMO+0
まぁないものどうこう言っても始まらない

ただwin のiE6とかのようにubuntu以外は淘汰されていくだろうから
最終的には問題ないんじゃない?
0860デフォルトの名無しさん
垢版 |
2019/10/06(日) 21:15:53.96ID:/W6lnfS0
Linuxはdistributionごとに色々目的が違うからPerl入ってないのがあっても特に不思議はない。
AndroidのベースのLinuxにも入ってないし、普通はそこでは必要とされない。
0862デフォルトの名無しさん
垢版 |
2019/10/06(日) 22:18:30.79ID:+aq+gJyQ
それ向けの端末エミュレータとかシェルスクリプト編集実行とかは結構種類あるけどね
割合は少ないだろうね
0865デフォルトの名無しさん
垢版 |
2019/10/07(月) 12:58:26.99ID:lSqRbxbA
PerlはCの如くしぶとく残ってしまうと思うなあ。
0867デフォルトの名無しさん
垢版 |
2019/10/07(月) 15:51:12.82ID:Wc5EJs/z
perl -peをsed代わりに使ってるだけでperl自体には興味ないや
正規表現しか出番ないし使う機会がないんだよね
awkとかgrepとかどうせ他のコマンドも覚えなきゃならんし
0868デフォルトの名無しさん
垢版 |
2019/10/08(火) 14:32:15.36ID:C04IGCd6
>>865 残ることは残るだろうけど、誰からも見捨てられてる状態で生き延びていても学ぶ価値はない。

プログラミング言語人気トップ8、過去15年間で安定 - 例外はPython
2019/10/07 14:16 後藤大地
https://news.mynavi.jp/article/20191007-905781/

TIOBE Softwareから、2019年10月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語がどれだけ話題に
なっているかをインデックス化したもの。(中略)

TIOBE Softwareは発表の中で、毎年新たなプログラミング言語が登場しているものの、TIOBE
Programming Community Indexのトップ8は過去15年間でほとんど変化していないと説明した。
Perlが消えてPythonに入れ替わったことや、Objective-Cが消えてSwiftに替わったというのが大きな
例外で、それ以外に大きな変動はないと指摘している。

ただし、プログラミング言語の分野に関してはいくつかの傾向があるとして、その例としてPHPやPerlから
Pythonへ移っていること、新しいプログラミング言語としてDart、Scala、Lua、Rust、Kotlin、TypeScript
などが人気上昇の渦中にあることなどを説明している。

10月TIOBE Programming Community Index / 円グラフ
https://news.mynavi.jp/article/20191007-905781/images/001.jpg
0869デフォルトの名無しさん
垢版 |
2019/10/08(火) 15:00:13.27ID:dg9qT1Hg
Perlはsedやawkと同じ位置で見ないとだめだよ
シェルスクリプトを書くときにsedやawkのように使う道具のひとつ
もちろんシェルスクリプトをまるごとPerlのスクリプトに置き換えてもいいけどそれは別の話
Perlを排除するのは武器を一つ捨てるようなもので損してるよ
0870デフォルトの名無しさん
垢版 |
2019/10/08(火) 15:03:58.28ID:4CpPhkv4
汎用言語としてはpython の時代に移ったかもしれないが
文字処理言語としてはいまだ現役
0871デフォルトの名無しさん
垢版 |
2019/10/08(火) 15:16:45.62ID:wc9EJfFY
>>869
と言ってもお前、sedやawkが使えないから
perlを使ってるだけやん。
お前の問題であって、perlである必要ないやん
0872デフォルトの名無しさん
垢版 |
2019/10/08(火) 15:49:08.88ID:dg9qT1Hg
俺当然sedもawkも使えるんだけど?
awkで複雑になる処理をPerlで可読性高く楽に書いてるってだけ
あんたも使える道具をうまく選べばいいんでPerlを知らなくても気にするな
0873デフォルトの名無しさん
垢版 |
2019/10/08(火) 16:39:54.73ID:9VgyN7XE
「Perlの方が楽に書ける」なんていうのは個人の嗜好に依存してて,ほとんど無根拠に近い。
もしPerlの「素晴しさ」とやらを報しめたいのなら,もっと客観的な事実――導入率・実績云々――を提示したほうがいいよ。

尤も,俺に言わせればAWKのほうが〜Perlのほうが〜なんていう議論とも呼べない喧嘩それ自体くだらねぇけどな
0875デフォルトの名無しさん
垢版 |
2019/10/08(火) 17:13:16.90ID:gh1TIWVl
python使ってわざわざ長いコード書いてどうするの?

sed -e 's/ABC/XYZ/' file1.txt

python -c 'import sys,re; [print(re.sub("ABC","XYZ",l,1),end="") for l in sys.stdin]'
0877デフォルトの名無しさん
垢版 |
2019/10/08(火) 18:40:15.32ID:gO+Oxfwr
こうして宗教戦争が始まったのです。
0878デフォルトの名無しさん
垢版 |
2019/10/08(火) 19:07:13.65ID:/hvysQLZ
pythonはワンラインにはあまり向かんのは同意。
フリーフォーマットじゃないんで当たり前といえば当たり前か。
0879デフォルトの名無しさん
垢版 |
2019/10/08(火) 19:30:38.22ID:vS76WaY3
宗教戦争は自分の信じるものが正しく、それ以外は認めないという非寛容が原因で始まる
0881デフォルトの名無しさん
垢版 |
2019/10/11(金) 19:00:05.85ID:QtmRuluN
case $value in
*-*=*-*)
esac

こんなふうに、*が複数ある場合の動きとかちゃんと仕様化されてるの
どのシェルでも同じように動く?
0884デフォルトの名無しさん
垢版 |
2019/10/12(土) 11:56:42.38ID:6fabclhr
>>883
意味がわからん

abbb 、という文字に対して、a*b はマッチするのが正しいの?
aに続く残りのbは*で全部消費されるんじゃないの?


$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c) echo ok; esac'
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c) echo ok; esac'
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c*b*c) echo ok; esac'
すべてokってでる

どういうアルゴリズムなのかわからない
0886デフォルトの名無しさん
垢版 |
2019/10/12(土) 17:15:42.03ID:1KIHwFcK
IPアドレスもgreedyが基本だな。
0889デフォルトの名無しさん
垢版 |
2019/10/16(水) 03:31:59.04ID:Pvq8peJ9
>>888
グロ
0890デフォルトの名無しさん
垢版 |
2019/10/16(水) 08:08:38.68ID:9/jaba51
変数名を変数で指定できるのは欠陥じゃねえ
0891デフォルトの名無しさん
垢版 |
2019/10/17(木) 13:11:40.29ID:huR1Dm0j
はー、すげー。yashの実装に感動した

getopts "ab" OPT -ab
echo "$OPT $OPTIND" # => a 1:2

getopts "ab" OPT -ab
echo "$OPT $OPTIND" # => b 1:3

getopts "ab" OPT -ab # exit status = 1
echo "$OPT $OPTIND" # => ? 2
0892デフォルトの名無しさん
垢版 |
2019/10/17(木) 16:55:00.31ID:PM8kIYTO
if ls "*.txt" > /dev/null 2>&1
then
echo "OK"
else
echo "NG"
fi

まったくうまくいかない
なぜ単なるファイルの存在確認だけにこんな苦労するのか
0894デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:05:16.55ID:e7ZwLQTq
# # ls *txt && echo ok || echo bad
ls: '*txt' にアクセスできません: No such file or directory
bad

# # touch foo.txt
# # ls *txt && echo ok || echo bad
foo.txt
ok

こんな要領か?
0898デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:10:05.98ID:z1/RyPhF
getopts vs getopt だけどさ、
BSDにおいてgetoptのメリットって何?

BSD版のgetoptはロングオプションに対応してないし、
引数にスペースが入ったらうまく行かないし
使い勝手悪いと思うんだが。

もしかして最初に作られたのがgetoptで
それを改良してgetoptsがシェルビルトインとして作られた。
(その後GNU版getoptが改良され、getoptsよりも便利になった)
という流れだったりするの?
0899デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:10:16.84ID:e7ZwLQTq
普通のプログラミング言語と違って
シェルスクリプトはブーリアンの分岐は可能なら
if else 使うよりも && || が見やすく良いと思う
0901デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:13:24.29ID:z1/RyPhF
>>896
アスタリスクを使うと、シェルが解釈して、
例えば、 ls * だと、 ls file1 file2 file3 file4 って実行したのと同じことになるんだぞ。
lsコマンドの中からはアスタリスクが使われてるかどうかなんてわからない。

そしてダブルクォートで括ると、lsコマンドの中から引数は "*" という文字列が渡されたようになるんだよ。
0903デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:19:49.73ID:z1/RyPhF
>>899
それだめ。 shellcheck使ってみ、エラーになる。

shellcheck において && || みたいな三項演算子風な使い方は
func && VALUE=ok || VALUE=ng
という書き方(変数代入)のみ認められる。

func && foo || bar
は認められない。

なぜかと言うと、
1. func が 正常終了して
2. foo が 異常終了すると
3. bar が 実行されるから

変数代入に限れば必ずVALUE=okは正常終了するから、
この書き方に限って許されてる。
だから、一応fooが必ず正常終了するものであれば、使えなくはないけど
静的解析ではそれを知ることが不可能なので、shellcheckはエラーになる。

あともう一つ、barが異常終了したとき、&& || だと $?はエラーになるが、
ifで書けばfi終了後、$? は正常終了になってるという違いもある。
だからset -eでの挙動が変わる。
0904デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:21:53.83ID:z1/RyPhF
もちろん、&& 単独、もしくは || 単独で 使うならば問題ない。

func && foo とか func || bar ならOK
0905デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:26:43.45ID:PM8kIYTO
今度は ls "$dir/tmp/*.txt"
みたいなことしたらアクセスできませんみたいなことを言われた

>>901
なるほど
>>902
多分"*.txt"ファイルにアクセスしようとしてできないって言われたことが原因?
でもなぜかls *.txtみたいに、ファイル直だとイケる
0906デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:33:24.48ID:z1/RyPhF
あー、やっぱりそうなんや

https://en.wikipedia.org/wiki/Getopt
https://en.wikipedia.org/wiki/Getopts

getoptは1980年頃つくられた。初期のgetoptは低機能
その改良として getopts が1986年にBourne shellに実装されたらしい。

その後、getopts (Solaris) と getopt (GNU) それぞれ違うコマンドで
ロングオプションがサポートされ

どちらでもないBSD(macOS含む)では、従来どおり
低機能な getopt と それを少し改良した getopts があるが
どちらもロングオプションはサポートしてないと
0907デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:37:12.84ID:z1/RyPhF
>>905
だからダブルクォートで括るからいかんのや

ls "$dir/tmp/" * ".txt"
これが正解(スペースは目立たせるために入れただけ)

この書き方ダサいよなw

ちなみに古いシェル(poshだっけ?)でこれがうまく行かない
バグがあるのだが、まあ誰も気にしないわなw
0909デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:43:27.80ID:z1/RyPhF
あ、いや /usr/bin/getopts もあるにはあるが、libcのgetopt()実装が拡張されたから
それを使ってるBourne Shellでも使えるようになったのか

> getopts (Solaris enhanced)
> As a result, this new feature was also available in the built-in command getopts of the Bourne Shell.
0910デフォルトの名無しさん
垢版 |
2019/10/17(木) 17:47:11.17ID:PM8kIYTO
>>907
うおおできた!
ls "$dir/tmp/"*".txt" && echo "ok" || echo "ng"
みたいな感じにした
(txtファイルがひとつもないときエラー出るけど!無視)
d
0911デフォルトの名無しさん
垢版 |
2019/10/17(木) 19:06:38.69ID:yPX5iNuE
ジェルスクリプトってバッドノウハウの塊なんだな…
0913デフォルトの名無しさん
垢版 |
2019/10/17(木) 21:23:39.68ID:1JFOpLrO
GLOB展開と""内での文字列展開は別物で""内での文字列展開にGLOBは含まれないというだけだけどな
0914デフォルトの名無しさん
垢版 |
2019/10/17(木) 22:15:54.16ID:yIl6cqO6
マニュアルにかっちり書いてあるんだけどな
読み解くのは確かに能力が必要だが
0917915
垢版 |
2019/10/18(金) 00:51:30.34ID:DhnYyybT
相対パスなら、-path で、カレントディレクトリからの相対パスで指定する

find . -type f -path "./test/*.rb" | wc -l
0919915
垢版 |
2019/10/18(金) 04:58:51.55ID:DhnYyybT
Ruby では、これでカレントディレクトリの該当ファイル数がわかる。
無ければ、0

ruby -e 'puts Dir.glob( "*.txt" ).length'
0921デフォルトの名無しさん
垢版 |
2019/10/18(金) 11:02:02.61ID:lmpJOwiE
find使うのは有りだと思うがmaxdepthとquitをつけたほうが良い

if test -n "$(find . -maxdepth 1 -name "*.txt" -print -quit)"; then
echo "OK"
else
echo "NG"
fi
0923デフォルトの名無しさん
垢版 |
2019/10/18(金) 13:39:28.03ID:+f5J2l87
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
0924デフォルトの名無しさん
垢版 |
2019/10/18(金) 14:04:15.02ID:e+8RgQym
>>918
暇なときに man と bash の man をちゃんと読み込むことをお勧めする
全部理解するのは確かに大変だが、こんな機能があるということだけ
覚えておいて、現実の問題に直面した時に詳細を再検索するのが
実用的。bash だけの問題ではないが。
0927デフォルトの名無しさん
垢版 |
2019/10/19(土) 00:34:03.00ID:+f1cBD8l
日本語版の記述が少なくて英語版の方だけびっしりとか実にマニュアルらしい
0928デフォルトの名無しさん
垢版 |
2019/10/19(土) 13:26:03.97ID:9TTj0TwZ
近頃は無料で web 上で使える翻訳ソフトの質も上がっているし
頑張って読んでくれ。
0930デフォルトの名無しさん
垢版 |
2019/10/19(土) 20:14:11.99ID:jibveSnU
ウホッ
じゃなくて
なんだ
infoとかそっちしかハッテンしてないとかあるじゃん
0931デフォルトの名無しさん
垢版 |
2019/10/20(日) 17:43:31.69ID:Tm15VeOJ
まあ、確かに sed の s コマンドのオプションは man にも入れてほしかった。
オプション使えなくなったのかと思ったじゃないか…
0933デフォルトの名無しさん
垢版 |
2019/10/21(月) 17:13:45.45ID:mT54cHzD
まあ裏を返せばそれだけ国際標準から離れていないってことよね。
ar.localeとか酷い……
0934デフォルトの名無しさん
垢版 |
2019/10/21(月) 21:16:47.36ID:SCSOJkPH
あるユーザー(Aとする)が、他のユーザー(Bとする)にのみWrite権限があるファイルを削除するような作業を自動化したいです。

当然そのままでは削除できないので、AからRootに切り替わり、ファイルを削除した後、Rootを抜けてAに戻るというBashスクリプトを作成しようとしています。

AはSudoが実行できない環境で、Expectコマンドもありません。Rootのパスワードはわかっており、平文でシェルスクリプト内に書き込んでも構いません(使用者が数人で、かつ外部に接続できないため。なのでセキュリティの問題は今回は無視)。
このような状態で、どうにか目的を果たすスクリプトはかけますでしょうか。

OSはFedora10、新たにプログラムパッケージ等はインストールできません。

よろしくおねがいします。
0936デフォルトの名無しさん
垢版 |
2019/10/21(月) 22:08:16.20ID:/woRRfjw
>>934
そもそもAがファイルを消せるようにパーミッションが初めから設定されるようには出来ないの?
0937デフォルトの名無しさん
垢版 |
2019/10/21(月) 22:24:13.78ID:Ol8k0rNq
>>934
ファイルを削除するだけの実行ファイルを作ってsetuidビット立てて所有者をBにするとかすればできないかな?
0939デフォルトの名無しさん
垢版 |
2019/10/21(月) 22:52:13.48ID:pvaospDZ
Fedora10って10年前のかっ
su: must be run from a terminal
にならんのだったらsuでいいんじゃないの。パスワード流すのは exec ででも
0941デフォルトの名無しさん
垢版 |
2019/10/22(火) 02:43:55.19ID:T9lP8zyy
>>936
パーミッションは変えない方針でいきたいですね
>>937
setuidという単語を初めて見たので、のちほど調べてみます。
>>939
su - <<EOF
password
EOF
は試しましたが、ttyを経由しろ的なメッセージで怒られました
調べたところttyなしを許可する設定がsudorsにあるらしいですが、sudoは設定したくないため、できなそうです
0942デフォルトの名無しさん
垢版 |
2019/10/22(火) 09:04:44.04ID:xSNqVMSD
>>941
# mkdir /dir
# chown userA:groupA /dir
# chmod 700 /dir
# cp /bin/rm /dir/rmB
# chown userB:groupB /dir/rmB
# chmod 6755 /dir/rmB

userA $ /dir/rmB /home/userB/file
0943デフォルトの名無しさん
垢版 |
2019/10/22(火) 10:51:03.29ID:p4xpj08d
こんな文字列野中に含まれる数字を
ゼロパディングしたいと思います

"何とかって講義 第5回 何とか特集.mp3"

まずは2桁でそろえてやりたいのですが

grep "第[1-9]回"

で一桁のものを引っ掛けて
前後をsedで除いて

sed "s/.*第//g
sed "s/回.*//g"

ゼロ埋めはprintfで実現しようと思うのですが

printf %02d $times

もっとシンプルな方法は無いでしょうか?
0944デフォルトの名無しさん
垢版 |
2019/10/22(火) 10:52:23.81ID:p4xpj08d
なお最終的な文字列の組み立てなおしは
数字の前後も抽出して3つを連結するつもりです
0945デフォルトの名無しさん
垢版 |
2019/10/22(火) 11:04:28.98ID:+cbyszgy
perl5 が使えるなら
echo "何とかって講義 第2345回 何とか特集.mp3" | perl -pe 's/第(\d+)回/ sprintf "第%06d回", $1/exm'
何とかって講義 第002345回 何とか特集.mp3
0946デフォルトの名無しさん
垢版 |
2019/10/22(火) 13:09:31.40ID:QfoZv31s
$ echo "何とかって講義 第2345回 何とか特集.mp3" | sed -E 's/第([0-9]+)回/第000000\1回/; s/0*([0-9]{6})/\1/'

6桁揃えにしたければ最初に6個0を足して次に6桁のみ残す

$ rename -n 's/\d+/sprintf("%06d",$&)/e' *.mp3

rename utilityが使えるならsprintfが使える
0949デフォルトの名無しさん
垢版 |
2019/10/22(火) 15:21:29.60ID:p4xpj08d
>>945-946
ありがとうございます
perlは入っており期待通りに動作しました
perlの方が高機能なのですが
環境を移したときにperlがあるか保証できないため
sedでやろうと思います
0953デフォルトの名無しさん
垢版 |
2019/10/22(火) 21:23:51.15ID:CciDAIxr
>>952
面白いけど、サブシェルの中で変えられないから

alias FLAG=true
(
alias FLAG=false
if FLAG; then
echo true
fi
)

出力
true
0955デフォルトの名無しさん
垢版 |
2019/10/23(水) 10:57:17.22ID:jQcWWJt3
サイトによってrenameの構文が違うけどコマンド自体が違うのな
perl付属のprenameとutil-linux付属のrename.ulがあるとか
alternativesで書き換えられてるんだからそら気付かんわ
0958デフォルトの名無しさん
垢版 |
2019/10/24(木) 18:07:25.18ID:lp1ZwQII
>>956
サブシェルは関係ない。俺もちゃんと仕様読んだわけじゃないけど、
aliasは実行時じゃなくて、1単位ごとに → パース → 実行 の
パース時に変換してる感じ

そして1単位というのは、

alias FLAG=true
alias FLAG=false; FLAG && echo true
↑これは一行で一単位、だからtrueと表示されてしまうし

関数とか、プロンプトから、func() { 改行 とかやると
} 改行 するまで、ずっと行頭に > って表示されるだろ?

あれが1単位。だから↓みたいなものもtrueって表示されてしまうんだよ

alias FLAG=true
func() {
alias FLAG=false
if FLAG; then
echo true
fi
}
func
0959793
垢版 |
2019/10/24(木) 18:35:35.72ID:n545jbBX
>>795-797
時間が経ってしまいましたが、ありがとうございました
"$()"の中の"はエスケープする必要があるのかどうか、とか、変数代入への挙動とか、そういう細かいところがよくわかってなかったです。
0962デフォルトの名無しさん
垢版 |
2019/10/25(金) 07:59:28.70ID:6Bcci7V7
>>957
真は0、偽は0以外という値を意識する必要が無い
(Cの真偽値は逆で紛らわしい)
true/falseコマンドが使えない環境でも使える
0963デフォルトの名無しさん
垢版 |
2019/10/25(金) 23:17:19.52ID:TUsRGFSK
>>962
true/falseがビルトインじゃないシェルは存在しない
また、[ の結果はtrueなら0、falseなら1と決まっている
0964デフォルトの名無しさん
垢版 |
2019/10/26(土) 06:21:32.20ID:0I+FrAtF
>>963
> true/falseがビルトインじゃないシェルは存在しない
今ならそう言えるだろうが、かつては存在した
外部コマンドのtrue/falseがその名残りだ

> また、[ の結果はtrueなら0、falseなら1と決まっている
0は数値の0であってtrueではない
trueを表現するのに0を使っているだけだ

まあ真偽値を扱うならtrue/falseを使えってことだな
0965デフォルトの名無しさん
垢版 |
2019/10/26(土) 09:53:59.01ID:Q5pTtErv
trueを表現するのに0を使っているというより、真偽に成功不成功をそのまま使ってるというだけだろ
0966デフォルトの名無しさん
垢版 |
2019/10/26(土) 10:32:17.69ID:a0V3mxKP
>>964
> 今ならそう言えるだろうが、かつては存在した
かつてとはいつで、どこの実装であるのか答えなさい

また、現存しない物の話をしても意味はない
そもそも [ が存在しない環境では使えない
外部コマンドの [ がその名残りだ
0968デフォルトの名無しさん
垢版 |
2019/10/26(土) 10:37:22.98ID:3fttRo5u
え、まさか、
hoge && FLAG=$TRUE || FLAG=$FALSE
 :
 :
if [ "$FLAG" -eq "$TRUE" ] then ・・・
if [ "$FLAG" -eq "$FALSE" ] then ・・・

とか書くつもり・・・?
0971デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:16:54.58ID:Q5pTtErv
while true
do
や、
FLAG=true
or
FLAG=false
if $FLAG; then

真偽に成功不成功をそのままは、なんて書きたかっただけだろ、そうの方が見た目がいいしな
なんでそんなに拘っているんだか
0972デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:21:27.44ID:3fttRo5u
つーか、いいかげんにしろよ。
真偽値の値を何にするかって話だろ
誰も真偽値をどうやって生成するかの話なんかしてねーよ
0973デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:22:36.82ID:3fttRo5u
いつものやつ言っとくわ

>>971
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
0974デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:23:54.27ID:Q5pTtErv
FLAG=true or false
FLAG=1 or 0
etc
なんでも好きにすればいいだろ
true/falseコマンドを使った方が見た目簡潔じゃないかと思うがな、個人的に。使わんけど
お前がいいかげんにしろよw
0975デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:29:02.54ID:3fttRo5u
質問が出てる時点で、意図がわからないコードってことなんだがw

957 名前:デフォルトの名無しさん[sage] 投稿日:2019/10/24(木) 17:49:17.77 ID:mthfJT/n [2/3]
>>954
それってTRUE=0とするのと何が違うの?


それに>>954ののコードは、set -eで正しく動かない
TRUE=$([ 0 = 0 ];echo $?)
FALSE=$([ ! $TRUE ];echo $?)

意図が不明確なコードを書いて、バグを入れるのは
アホでしか無いよ
0976デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:32:55.31ID:Q5pTtErv
俺は他alias使ったのやのその話題は、なにをわざわざ凝ったことしようとしてるのか意図不明で趣味なんだろなとしか思ってない
0977デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:33:38.63ID:T/HAOzs9
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
0979デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:36:44.02ID:Q5pTtErv
ただの雑談だろ
あれを強制するなりしているわけでもないのに、なにをそう否定してんだか
そんなヤツがリアルで一緒に仕事するなら思いっきりくそ叩くがなw
0980デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:37:51.16ID:3fttRo5u
あとC言語の世界しか知らんようだから言っておくと、rubyは0も1もtrueな
シェルスクリプトは反対で0がtrueで1がfalseなんだ、それ以外の回答はない!ってのは
ちょっと考えが浅いんじゃないですかねぇw

http://osishow3.hateblo.jp/entry/2017/04/20/235500
nil is false
false is false
0 is true
1 is true
0981デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:39:18.03ID:Q5pTtErv
何をひとりで妄想に走っているんだか
だれか「いいかげんにしろ」とか言ってなかったか?w
0984デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:47:29.21ID:3fttRo5u
そりゃいうだろ、いきなりシェルスクリプトと関係ない
「俺」の話を始めるんだからw
0985デフォルトの名無しさん
垢版 |
2019/10/26(土) 11:50:09.04ID:Q5pTtErv
言ったことに対してはそりゃ言うだろう。お前がわざわざ言ったんだから
そんなのが無くてもいいのに。お前だった元々のやつを「アホ」呼ばわりしてるじゃん
0989デフォルトの名無しさん
垢版 |
2019/10/26(土) 16:17:36.78ID:+M+pJ73c
しかも、最初の状態が set +e だったら
set -e に状態が変わってしまうというクソコード
汎用性がない
0990デフォルトの名無しさん
垢版 |
2019/10/26(土) 16:20:27.41ID:+M+pJ73c
true / false を使えばいいのに、[ が入ってない環境を考慮せずに、
true / false が入ってないかもしれないから [ を使ったと言う無能ぶりw
0993デフォルトの名無しさん
垢版 |
2019/10/26(土) 16:25:06.04ID:+M+pJ73c
TRUEの反対だからfalseというが、
FALSEの反対もfalseになってると気づいてなくて
そもそもシェルスクリプトの仕様をわかってないw

[ 0 = 0 ]; echo $? # => 0
[ ! 0 ]; echo $? # => 1
[ ! 1 ]; echo $? # => 1
0994デフォルトの名無しさん
垢版 |
2019/10/26(土) 16:27:23.30ID:+M+pJ73c
>>992
上の方で /bin/true, /bin/false コマンドがあるんだから
true, false が使えないシェルがあるはずだって主張していたぞw
その理屈で言えば [ コマンドもあるんだから、 [ が使えないシェルもあるってことになるんだがなw
0995デフォルトの名無しさん
垢版 |
2019/10/26(土) 16:28:56.67ID:+M+pJ73c
更に言うなら

TRUE=$([ 0 = 0 ];echo $?)
FALSE=$([ ! $TRUE ];echo $?)

これにサブシェルを使うのもアホらしいw
0999デフォルトの名無しさん
垢版 |
2019/10/26(土) 16:30:30.62ID:+M+pJ73c
>>1じゃなくて>>2だったな

> ・特記なき場合、POSIX 準拠の sh 可換シェルが既定です。(Bourne Shellは既にレガシーです)
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 76日 17時間 12分 59秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。