X



シェルスクリプト総合 その36
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん垢版2021/02/25(木) 09:20:14.64ID:ZyJLXTlk
シェルスクリプトに関する総合スレッドです。

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

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

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】9
https://mao.5ch.net/test/read.cgi/linux/1607589861/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
0002デフォルトの名無しさん垢版2021/02/25(木) 09:20:36.91ID:ZyJLXTlk
・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
 POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
 参考 https://unix.stackexchange.com/questions/145522/
 特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)
・POSIX準拠シェルのおすすめは?→多く使われているのはDebian/Ubuntu系のdashです
・bashでいいじゃん→bashがインストールされてない環境があります。環境によってデフォルトシェルの実体は異なります
  Debian系 … dash   CentOS系 … bash   Alpine … busybox ash  Android … mksh
  FreeBSD … ash   Solaris,OpenBSD … ksh
  macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・macOSはzshなんだよね?→ログインシェルがzshに変わっただけで/bin/shはbash 3.2です
・シェルスクリプトは可搬性を持たせるために可能な限りPOSIXに準拠しましょう
 仕様 http://pubs.opengroup.org/onlinepubs/9699919799/
・シバンになにを使えばいいの?→POSIX準拠してるなら#!/bin/sh、bashなら#!/bin/bashか#!/usr/bin/env bash
・bash依存はなるべく避けましょう。自覚なきbashism。シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
・Bourneシェル(≒POSIXシェル)はPOSIX標準化前にUNIXで使われていたシェルで多くの亜種が存在します
 Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
  Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
  Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
 歴史的資料 https://www.in-ulm.de/~mascheck/
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
  参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題は正規表現スレへ
・シェル芸とシェルスクリプトは全く異なります
・シェルスクリプトのことをシェルってゆうな
0007デフォルトの名無しさん垢版2021/02/28(日) 14:54:49.97ID:JYcgL82Q
xargsってPOSIXでは作れない機能でも使ってるの?
xargsってFreeBSDでもmacOSでも動くよね?
0008デフォルトの名無しさん垢版2021/02/28(日) 15:01:05.15ID:XNBptB7O
>>5
> 2GBをzip圧縮するような重たい処理を並列化する場合は、pthreadよりxargsのほうが、"僅かに"有利なようだ

当たり前じゃね? スレッド切り替えのオーバーヘッドがないんだから
マルチコア(マルチCPU)なら複数プロセスで実行したほうが速いでしょ?
0009デフォルトの名無しさん垢版2021/02/28(日) 15:07:08.34ID:XNBptB7O
つまりこれはマルチスレッド vs マルチプロセスの話で
一般的にはマルチスレッドの方がパフォーマンスは良いが
マルチスレッドだと共有リソースの排他制御などをする必要があるから
共有リソースがない場合はマルチプロセスのほうがパフォーマンスが良くて
POSIXとはなんの関係もないよねって意味ね
0010デフォルトの名無しさん垢版2021/02/28(日) 15:11:12.46ID:XNBptB7O
>>5
> 2GBをzip圧縮するような重たい処理を並列化する場合は
2GB・・・関係ない
zip圧縮・・・関係ない
重たい処理・・・関係ない

> pthreadよりxargsのほうが、"僅かに"有利なようだ
xargs・・・関係ない

共有リソースがなくて排他制御をする必要がない処理を並列化する場合は
マルチスレッドよりマルチプロセスで実装したほうが、"僅かに"有利なようだ

これが正しいかな
0011デフォルトの名無しさん垢版2021/02/28(日) 15:15:22.13ID:0S62sz9G
POSIXによって能力を制限されてるって書いてあるけど

https://linuxjm.osdn.jp/html/LDP_man-pages/man7/standards.7.html
> POSIX.1c
> IEEE Std 1003.1c-1995. POSIX スレッドインターフェースについて記載している。

POSIXスレッドは1995年?ぐらいに登場した新しいPOSIXで
xargsで使われてるマルチプロセスはずっと前から使えるPOSIXじゃん?
POSIXで実装されてるのにPOSIXで能力を制限とか意味わからん
0012デフォルトの名無しさん垢版2021/02/28(日) 15:21:32.20ID:VQYtUoBE
>>8
やりかたしだいやろ。
Apacheなんかは、マルチプロセスモデルよりもマルチスレッドなイベントモデルのほうが(一部を除いて)パフォーマンスが高いとされてる。
0013デフォルトの名無しさん垢版2021/02/28(日) 15:31:23.99ID:N8V7r+yZ
Apache(とか)はfork+execのオーバーヘッドが無視できないってのだな
処理単位が1秒以内とかで済む、処理単位がガシガシ来るなら当然

でもまあ>>8は間違ってるかな。>>9で訂正してるようだけど
0014デフォルトの名無しさん垢版2021/02/28(日) 16:02:00.25ID:CBZyHOS6
外国にもPOSIXを勘違いして解釈したPOSIX中心主義みたいな奴がいるんか?w
POSIXは主にC言語のインターフェースなんだから、POSIXで標準化されたコマンド以外でも
POSIXインターフェースを使って作られたコマンドもPOSIXに準拠してることになるんだって

POSIXは、POSIXで規定されたコマンドだけを使って
それ以外はシェルスクリプトで独自開発しましょうって規格じゃねーだろ?
POSIXのC言語のインターフェース使ってコマンド使ってもいいだろ?
そして自分じゃなくて誰かがOSSとかで作ったコマンドもバンバン使っていいだろ?
可搬性?OSSなら可搬性あるるからどこでも使えるコマンドだろ
0015デフォルトの名無しさん垢版2021/02/28(日) 17:07:15.88ID:qG6bavOU
>>10
もしも時間のかからない処理だったら、プロセス生成にかかるコスト差のほうが上回るんじゃね?
0016デフォルトの名無しさん垢版2021/02/28(日) 20:14:25.47ID:O8DyCWfa
これどうなんだろ、xargsの方は1プロセス1ファイルだけど、pigzは複数スレッド1ファイル
なんでしょ。
だったらpigzも1スレッド1ファイルで複数ファイルを同時処理するモードがあればどうなのかと。

いずれにせよ元の話はいろんな条件が混ざっていて気持ち悪い感じがする。
0017デフォルトの名無しさん垢版2021/02/28(日) 20:17:39.23ID:O8DyCWfa
GNUのxargsというのでじゃあPOSIXのxargsを考えると、
POSIXのxargsだと例えば引数の数を1にしても(-n1)、プロセスが並列には走らないのか。
waitを使うようなシェルスクリプトとかでGNU xargsの-Pと似たようなことはできるかな?
というわけでこのスレ的な流れに持っていけるかな? w
0021デフォルトの名無しさん垢版2021/03/01(月) 03:34:18.55ID:UPXhvHyB
あ、POSIXにあるのかw
ってことはxargsは使っていいけど-Pは
POSIXじゃないから使わないって言ってるのか?
ほんとPOSIX中心主義みたいなこと言ってるなw
0022デフォルトの名無しさん垢版2021/03/02(火) 15:59:01.27ID:NSMtG/TQ
この部分がどうしても繋がりません

if [ {find "$line" -maxdepth 1 -mindepth 1 -type d | wc -lc } -eq 0 ] ; then
echo "hoge"
fi


これがどうしても出来ません
find "$line" -maxdepth 1 -mindepth 1 -type d | wc -lcだけだと出来るんですが、それを演算式に繋げようとすると私が思いつく限りは何をどういじっても動きません
パイプを更に不等式で繋げるのがよくないと思うんですが
どうしたら直りますか?
0023デフォルトの名無しさん垢版2021/03/02(火) 16:47:44.09ID:5tuGRxIW
$()
0027デフォルトの名無しさん垢版2021/03/02(火) 17:24:52.22ID:5tuGRxIW
wcだと改行コードがね
0029デフォルトの名無しさん垢版2021/03/02(火) 18:29:23.93ID:bIA4j74d
何にも該当するのがないかどうかって判断でしかないのに、余計なこと考えたんじゃね

wcを使うのがイケてないって他の行数を数える方法でなのか??
単に出力があるか無いかだけでかと思った
0030デフォルトの名無しさん垢版2021/03/02(火) 18:41:11.07ID:bIA4j74d
-lc ってどっちやねんもあるか。それか?いや違うか
どっちかにしろってのは存在してるけど
0031デフォルトの名無しさん垢版2021/03/02(火) 18:47:50.24ID:NSMtG/TQ
おお!
なんかエラーがそれっぽくなって近づきました
エスケープ文字で引っかかってる感じですけど
ありがとうです
0032デフォルトの名無しさん垢版2021/03/02(火) 18:54:51.13ID:NSMtG/TQ
すいません
-lcのcはいつの間にか間違えて入ってしまってたみたいです
ただのミスです
申し訳ない
0034デフォルトの名無しさん垢版2021/03/02(火) 18:57:26.63ID:NSMtG/TQ
0にしてるのは簡易的なテストで
フォルダが1かつファイルが0ならば下層フォルダの階層を全部あげようとしてた感じでした
これもまたもっと良い方法があるのかもしれまん?
0037デフォルトの名無しさん垢版2021/03/02(火) 21:37:15.67ID:11FPPCA/
>>34
>フォルダが1かつファイルが0
??
>下層フォルダの階層を全部あげようとしてた


調べるフォルダで内包するのがファイルも無くフォルダ一つ
って言っていることになると思うけど
ありそうなのは、中身空っぽのフォルダ だけど、それとは違うのか
調べるフォルダ(始点のフォルダ)直下のフォルダだけでなくそれ以下の階層でもの空のフォルダを探そうとしてる
ってことなのかなあ
0039デフォルトの名無しさん垢版2021/03/07(日) 19:26:32.91ID:T3tOQ7Z+
こんな感じで
if [ "$source_line_10_first" -ne "$source_line_10_after" ] ; then
i=40
fi

ソースを引っ張ってきて比較するんですが、ソースはやはりエスケープ文字が多いので失敗します
シングルクォテーションでも思いつく限り括弧で括ってもダメでした
変数のエスケープ文字を無視する方法は何か無いですか?
0041デフォルトの名無しさん垢版2021/03/07(日) 19:49:06.84ID:UqHHohgI
文字列に元々含まれてるシングルクォートだけ"で囲って
あとは文字列全体をシングルクォートで囲めばいいのでは
0042デフォルトの名無しさん垢版2021/03/07(日) 19:54:42.49ID:abZnd7wd
コンピューターサイエンスの難問:
・命名
・オフバイワン
・キャッシュインバリデーション
・文字のエスケープ(New!)
0043デフォルトの名無しさん垢版2021/03/07(日) 20:00:22.61ID:quYd9iFF
>>39
その変数はどうやって設定してんの?
変数にいれなきゃダメなの?

cmp < <(...) < <(...)
とか、一時ファイル経由じゃダメなの?
0044デフォルトの名無しさん垢版2021/03/07(日) 20:09:21.95ID:vyuBuDwH
答える方もアホばかりやなw
素人がエスケープが〜と言っていたからって
それが原因だと思うな
0045デフォルトの名無しさん垢版2021/03/07(日) 20:41:29.78ID:PBQIZrIy
>>39
質問がよくわからんのだが -ne (数値比較であって文字列比較ではない) の
使い方は意図通りなの?
0051デフォルトの名無しさん垢版2021/03/08(月) 10:09:07.56ID:3+uDlPP2
> ソースを引っ張ってきて比較するんですが
ソースを引っ張ってくるとは?

> ソースはやはりエスケープ文字が多いので失敗します
ソースにエスケープが多いとは

> シングルクォテーションでも思いつく限り括弧で括ってもダメでした
思いつきで書くんじゃなくて、正しい書き方を学べ

> 変数のエスケープ文字を無視する方法は何か無いですか?
変数のエスケープ文字とか意味が全くわからない


この初心者の意味不明な文章を真に受けて
レスするやつがいるんだもんなぁ
アホかと
0053デフォルトの名無しさん垢版2021/03/08(月) 13:04:45.87ID:QR/il1w1
>>51
お前の指摘は「-eq を理解している事 前提」なんだよ
右も左もわからん奴は中学生レベルの英語のエラーメッセージを読む精神的な
余裕が無かったり、読んでも正しく解釈できない

お前のやり方は抽象的過ぎるわ「情報小出しにするな」的な基本でもないわで相手に全く届かず
会話に参加できていない
幾ら吠えてもムダ
0054デフォルトの名無しさん垢版2021/03/08(月) 21:43:41.10ID:vBncgnCM
ある文字1文字が標準入力で与えられたときに
その文字がサロゲートペアであるかを判定するシェルスクリプトを教えてください
0058デフォルトの名無しさん垢版2021/03/09(火) 03:38:34.14ID:O1t/zxF9
コンピューターサイエンスの難問:
・命名
・オフバイワン
・キャッシュインバリデーション
・文字エンコーディング(New!)
0060デフォルトの名無しさん垢版2021/03/16(火) 18:28:13.75ID:KSYjhM+z
行頭の任意の数の特定文字を、同じ数の別の特定文字に、sedで置換する方法はあるかな?

たとえば、次のようなテキストを

a aaa
aa aa
aaa a

次のように変更したい。

A aaa
AA aa
AAA a

次のようにだらだら書いたらできるけど、めんどくさいし、任意の数に対応できない。。。

s/^a¥s/A/;
s/^aa¥s/AA/;
s/^aaa¥s/AAA/;
...
0061デフォルトの名無しさん垢版2021/03/16(火) 18:57:27.90ID:4E4BJCoI
IPF="対象のファイル.txt"
OPF="結果を出力するファイル.txt"

#最初のフィールドを抜き出し、aをAに変換
cat ${IPF} | cut -d' ' -f1-1 | sed -e "s/a/A/gi" > /tmp/$$0
#残りのフィールドを抜き出す
cat ${IPF} | cut -d' ' -f2-128 > /tmp/$$1
#同列行を連結
paste -d " " /tmp/$$0 /tmp/$$1 > ${OPF}

rm -f  /tmp/$$*
006260垢版2021/03/16(火) 19:53:28.48ID:KSYjhM+z
>>61
いや、サンプルはああ書いたけど、実際はフィールド的じゃない。
任意のテキストも混じってるから、cutはちょっと。。。

sedで任意個→任意個の置換は、やっぱりムリ?
0066デフォルトの名無しさん垢版2021/03/16(火) 23:29:02.91ID:iNI2JLkI
$ echo 'aa@aa' | sed -E '/^(a+)/!b;s/^(a+)(.*)\n/\1\n\2/;h;s/^(a+).*$/\1/;s/./A/g;G;s/\na+//'
aa@AA

$ echo 'aabbb' | sed -E '/^(a+)/!b;s/^(a+)(.*)\n/\1\n\2/;h;s/^(a+).*$/\1/;s/./A/g;G;s/\na+//'
AAbbb
006960垢版2021/03/16(火) 23:57:21.97ID:KSYjhM+z
回答、ありがと!

>>63
>>68
要はホールドスペースか。。。
ちぎって置換する感じやな。
いまひとつわかってないので、後で調べて確認してみるわ。
007060垢版2021/03/16(火) 23:58:40.36ID:KSYjhM+z
>>65
要件はちゃんと書いてあるやろが!カス!
0074デフォルトの名無しさん垢版2021/03/18(木) 22:37:09.67ID:TQ/yKLr3
パイプとリダイレクトなんだけど、どっちを使ったほうがいいとかありますか?
1は cat のプロセスが生成されるだけ無駄なのかな

1. cat file1 | wc
2. wc < file1
0075デフォルトの名無しさん垢版2021/03/18(木) 22:38:55.72ID:TQ/yKLr3
連レスすまそ
手癖で1をやっちゃうんだけど、こういう時にまずいとかあったら教えてほしい感じです
0076デフォルトの名無しさん垢版2021/03/18(木) 22:47:23.96ID:3HmhYQS2
ないだろう
別次元で
cat file | read a
read a < file
aをなんかする
とかならあるけど
cat file | は古典的定番で今でも悪でもないだろう
0078デフォルトの名無しさん垢版2021/03/18(木) 23:06:25.59ID:TQ/yKLr3
気にしすぎか、ありがとう!

> cat > newfile
> 新規ファイルnewfileを作成もしくは上書きして、入力したい内容を打ち込み、CTRL+Dコマンドで終了する。入力された内容は新規ファイルに書き込まれる。
これ知らなかったな、同じことをやりたい時は cat << EOF > newfile してたぜ
0080デフォルトの名無しさん垢版2021/03/19(金) 00:09:26.01ID:vJ8/R89b
>>74
> 1. cat file1 | wc
> 2. wc < file1

明らかに2の方が良い

> cat file | read a
> read a < file

特にこの2つだと後者のほうが圧倒的に速い
なぜならcatを使うとシーク不可能になるから
1バイトずつの読み込みになる
< file だとシーク可能だから一定のサイズで読み込むので速い
0085デフォルトの名無しさん垢版2021/03/19(金) 00:19:26.55ID:vJ8/R89b
> 改善するには
ここまで読んで、「最初の shcat の例とコードが違うのでは」と気づいたひとがいるかも知れない。
> 文頭では、次のような例として紹介した。
>
> shcat() { while read L; do echo "$L"; done; }
>
> shcat < foo

> 当たり前だが、こちらは cat(1) を使っていない。先ほどのベンチマークは cat(1) を使っていたので、
> 入力をリダイレクトにしてみよう。

> 実は、シェルの実装によってはシーク可能な記述子を read(2) が読む場合に限り、
> システムコールのバッファを増やすという最適化が入っている。前述したとおり、r
> ead 組み込みコマンドは改行文字を飛び越さないために、1 文字ずつ読む必要がある。
> しかし読む対象がファイルであれば、ランダムアクセスできるので読み出す位置は自由に設定できる。
> そのため、read(2) で大きめに読み込んでから改行文字を探し、その直後に読み出し位置を
> 再設定すれば 1 文字ずつ read(2) を呼び出す必要はない。
0086デフォルトの名無しさん垢版2021/03/19(金) 00:20:25.38ID:gmXrz9Hk
www
わざわざ煽って出してきたのが、
自分が何も理解してませんという証明にしかなってないという
0089デフォルトの名無しさん垢版2021/03/19(金) 00:23:55.24ID:gmXrz9Hk
偉そうな馬鹿に教えてやるとでも思ってるのか
そんな煽りでとかも思ってそうだな、とことん甘ちゃんだな
それと、いつものが確定してんぞw
0096デフォルトの名無しさん垢版2021/03/19(金) 12:05:21.82ID:8EGHMbin
$ cat << EOL > file1
> foo
> bar
> EOF

これでヒアドキュメントを使った複数行テキストの書き込みはできるんだけど、
cat を使わないようにするのって可能なのかな
0099デフォルトの名無しさん垢版2021/03/19(金) 13:27:42.94ID:8EGHMbin
tee を使えば行けることに気付いたけど、cat が減っても tee が出てきたら意味ないよね
そもそも数行程度で cat を無理に外す必要はないことに気付いた
忘れてくれ
0101デフォルトの名無しさん垢版2021/03/19(金) 16:55:09.45ID:MDPOlxpG
>>96
ちょっと上に出てきたshcatからわかるように
catはほぼ同等のものをシェルスクリプトで実装できる
(ファイルにNULL文字や不正な文字が入ってる場合に少し異なる)

ただし行数が多くなるとループ処理の回数も増えるので
遅いシェルスクリプトよりもcatの方が良い

ちなみにこんな感じね
while IFS= read -r line; do
 printf '%s\n' "$line" 
done << EOW > file1
foo
bar
EOW
0103102垢版2021/03/19(金) 16:59:34.18ID:DiNJqFEB
おっと、>>102>>101 じゃなくて >>100 に対してだよ。
0105デフォルトの名無しさん垢版2021/03/19(金) 19:00:37.39ID:RMQx/osX
ああ配列使うんだから標準なわけないか
ストリームじゃないからクソデカだと困るか
でも手放せない
0106デフォルトの名無しさん垢版2021/03/23(火) 17:53:11.07ID:laboXhIZ
0、標準入力
1、標準出力
2、標準エラー出力
ですよね?

cat <&0 ってやってなんか文字打ったら
標準入力から入力したものを標準出力に出力するから
入力した行と同じ行が出力されるのはわかるんですが

なんで cat <&2 ってやっても同じように
入力した行と同じ行が出力されるんです?
標準エラー出力から入力するってどういう意味なんです?
0107デフォルトの名無しさん垢版2021/03/23(火) 18:14:05.04ID:2hAdV+Tt
$ tty
/dev/pts/0

$ ps
PID TTY TIME CMD
94 pts/0 00:00:00 bash
232 pts/0 00:00:00 ps

$ sudo ls -l /proc/94/fd
total 0
lrwx------ 1 user user 0 Mar 23 17:56 0 -> /dev/pts/0
lrwx------ 1 user user 0 Mar 23 18:08 1 -> /dev/pts/0
lrwx------ 1 user user 0 Mar 23 18:08 2 -> /dev/pts/0
lrwx------ 1 user user 0 Mar 23 18:08 255 -> /dev/pts/0
0108デフォルトの名無しさん垢版2021/03/23(火) 20:33:12.59ID:laboXhIZ
あなるほー
紐付いてんのか
POSIXで決まってたりするんかな?
0110デフォルトの名無しさん垢版2021/03/23(火) 22:43:31.00ID:laboXhIZ
標準エラー出力から入力した場合の仕様はどこに書いてるの?
0111デフォルトの名無しさん垢版2021/03/23(火) 23:02:58.99ID:abnhlux1
そんな仕様じゃないよ

<&2 という表記だから、標準エラー出力から入力する と思うのはしょうがないけど、多分思い違いしてるぞ
0<&2 は、標準エラー出力のディスクリプタの複製を標準入力のディスクリプタにするだからな

(その時点での)標準エラー出力のディスクリプタがrwで開かれてる tty(/dev/pts/0) で、それの複製なんだから、以下省略
0112デフォルトの名無しさん垢版2021/03/23(火) 23:06:00.65ID:laboXhIZ
> (その時点での)標準エラー出力のディスクリプタがrwで開かれてる tty(/dev/pts/0) で、

これがPOSIXの仕様なの?
0113デフォルトの名無しさん垢版2021/03/23(火) 23:17:16.76ID:abnhlux1
0<&2 は、標準エラー出力のディスクリプタの複製を標準入力のディスクリプタにする
これ
そこは、疑問と思ってるようだが仕様での動作として何も疑問はないってこと
0114デフォルトの名無しさん垢版2021/03/29(月) 04:33:30.50ID:T/NVAJfs
シェルスクリプトの互換性やら#!の書き方の作法互換性やらbashismやら言われてるけど、みんなmailcap/mime-type使わんの?
0115デフォルトの名無しさん垢版2021/03/29(月) 04:41:36.50ID:T/NVAJfs
一応mailcapそれ自体はPOSIX…のはず
ちゃんと各shのmime-typeがそのPOSIXで定義されてるかは不明だけど、IANAとかでは規定あるわけだし
みんな適切に拡張子つければ解決するんじゃないかなって
unix系以外のOSでも対応してるのでPOSIXのみ準拠よりポータブルのはず
0116デフォルトの名無しさん垢版2021/03/29(月) 07:07:57.33ID:wK+S1L2g
>>115
なにを言ってるのかわからん。
シェルスクリプトには全部.shという拡張子をつけろとでもいってんの?
/bin/shの実体がdashかbashかわからんって話踏まえてる?
0117デフォルトの名無しさん垢版2021/03/29(月) 07:31:02.84ID:HXftsQaM
>>116
だからこそ
application/x-dash; /bin/dash %s
mime-extensions
application/x-bash; /usr/bin/bash %s
mime-extensions
application/x-dash sh dash
application/x-bash bash
なり指定しておけば面倒はないと思ったんだよ(ごめん書式はあってるかしらん)
0119デフォルトの名無しさん垢版2021/03/29(月) 07:34:02.79ID:HXftsQaM
ああ、/binとかに標準で入ってるのは大体.sh付いてないお行儀悪いのばっかだから不味いか…
今時配布するスクリプトには大体付けると思うけど、こればっかは仕方ない
0120デフォルトの名無しさん垢版2021/03/29(月) 07:34:21.19ID:wK+S1L2g
もう一つ。

gunzip という"シェルスクリプト" に
どういう設定をすれば良いのか教えて

$ file /bin/gunzip
/bin/gunzip: POSIX shell script, ASCII text executable
0126デフォルトの名無しさん垢版2021/03/29(月) 07:42:17.96ID:wK+S1L2g
>>124
良くない習慣だと言ってる人はだれもいません。
実際にディストリに含まれる実行プログラムで
実装言語の拡張子をつけてるプログラムは一つもありません
Ruby、Perl、Python、拡張子がついてますか?

そもそもさぁ、作者が 拡張子 .sh つけたとしても
じゃあ、これを何で動かせば良いのさ?

/bin/sh が bash だって言ってんだろ
0127デフォルトの名無しさん垢版2021/03/29(月) 07:50:37.48ID:T/NVAJfs
>>126
ちゃんとユーザーがどのインタプリタ(*sh、.py etc)で実行するべきか分かるように拡張子を付けるようにしましょう、って提言してる

そりゃインタプリタはインタプリタ名が自身を現してるから付ける必要は無いけど、解釈されるスクリプトには付けない理由は無いでしょう
パス決め打ちに依存するシバンより確実にインタプリタを指定できるわけだし
0128デフォルトの名無しさん垢版2021/03/29(月) 07:56:33.90ID:wK+S1L2g
>>127
> ちゃんとユーザーがどのインタプリタ(*sh、.py etc)で実行するべきか分かるように拡張子を付けるようにしましょう、って提言してる

少しは想像力ないのか?

作者が、.sh という拡張子を使って配布して
それをユーザーが、.bash に変更するようにしましょう
とお前が言っていて

そうするとファイル名変わるから、その .sh が
呼び出せなくなるだろ

ぐらいのこと思いつかんのか?
0129デフォルトの名無しさん垢版2021/03/29(月) 07:57:55.93ID:wK+S1L2g
訂正

そうするとファイル名変わるから、その .sh を
内部で呼び出すスクリプトが動かなくなるだろ
0132デフォルトの名無しさん垢版2021/03/29(月) 08:04:34.67ID:wK+S1L2g
落ち着いてるw

そもそも拡張子ではどのインタプリタで動かすのかわからないという前提があるのに
今更何を言ってんだこいつって話
0133デフォルトの名無しさん垢版2021/03/29(月) 08:04:56.34ID:T/NVAJfs
>>128
拡張子は配布者が指定するんだよ、誤解を招いたみたいですまん

ここまでシバかれるとは思わんかった…
実行ファイルに拡張子付けるのが気に入らんなら、ファイル先頭付近のコメントにmime-typeを書いておけば検知されるわけだし、これなら既存の慣習と衝突しない落とし所としてどうだろ?
0134デフォルトの名無しさん垢版2021/03/29(月) 08:12:16.40ID:T/NVAJfs
>>132
zshくらい所謂shと違うと、.zshと付いてること多いけど、bashくらいの分かりにくい拡張だとshと付けたくなるのは分かるなあ
0135デフォルトの名無しさん垢版2021/03/29(月) 08:12:32.79ID:wK+S1L2g
>>133
> 実行ファイルに拡張子付けるのが気に入らんなら
気に入る気に入らないじゃなくて、拡張子をつけてはならない。
それともお前はwhichコマンドを、which.shに変更しろって言う気か?
0136デフォルトの名無しさん垢版2021/03/29(月) 08:17:34.76ID:T/NVAJfs
>>135
規格で決まってるコマンドはそりゃ付けちゃだめだよ
それ以外は気にいるか気に入らないかの問題でしょう
気にならないなら拡張子を付ける、気に入らないならmailcapが見つけられるようコメントにmimeを書く
0137デフォルトの名無しさん垢版2021/03/29(月) 08:19:14.60ID:wK+S1L2g
> それ以外は気にいるか気に入らないかの問題でしょう

違う。互換性の問題
実装言語を変えても、互換性は保たれなければならない
0138デフォルトの名無しさん垢版2021/03/29(月) 08:22:32.70ID:T/NVAJfs
>>137
なるほど、やっぱ拡張子はダメですね…アホなこと言ってました
コメント自動検知の方は何か見落としないですかね?
0141デフォルトの名無しさん垢版2021/03/29(月) 08:40:37.26ID:T/NVAJfs
>>139
まさにその為にPOSIXへ導入された機構なのではないでしょうか?
mailと付いているのはメール方面で発展したからかな?と気になりますが
先頭付近に書いておけばrun-mailcapが検知してくれますよね、vimのモードラインみたいに先頭5行のような明確な判定法ってないんですかね?
ブラウザなんかはヒューリスティックで上手く決めてくれますけど、
0142デフォルトの名無しさん垢版2021/03/29(月) 08:50:40.11ID:T/NVAJfs
>>140
シバンが先頭占めてるので、GUIで適当にポチポチする人や、中身知らんけど取り敢えず./scriptで実行しちゃう人にはスルーされちゃうんですよね…
イマイチ強制力がないというか
win、linun、unix、macどこでも同じコマンド/クリックで同じように実行できるのは便利なんですが
0143デフォルトの名無しさん垢版2021/03/29(月) 08:58:49.98ID:wK+S1L2g
マジ意味不明
どんな手段でもいいからファイルの上の方に書いてある
なにかに従って実行ファイルを動かすツールをもってこい
話はそれからだろ
0144デフォルトの名無しさん垢版2021/03/29(月) 09:14:27.76ID:T/NVAJfs
>>143
いや、だからそれがrun-mailcapでは…

ところで、debianのman読むと、最終的にfileコマンドにフォールバックしてmime-typeを決定するとか非常に不吉な事書いてますね!?
うちのfileはシバンから推測(bashとshの区別など)してたと思うので、一旦mailcapを参照する事によるパス非依存性以外に利点がない気がしてきました…
決定アルゴリズムが統一されてないのが課題ですかね
winはもちろん違うでしょうし、unix系でもメーラ/ブラウザは固有の方法で決めてますし

第4のシバンを待つしかないのか!
0145デフォルトの名無しさん垢版2021/03/29(月) 09:16:56.36ID:wK+S1L2g
>>144
なら、run-mailcapでいいじゃん。

あとは何をしてほしいんだ?
run-mailcapが要求する何かをすれば終わりだろ
0146デフォルトの名無しさん垢版2021/03/29(月) 09:18:26.85ID:SSJ6OpUN
うだうだと意味不明だな
シバンは(低レベル)OS API(exec系)でサポートされてるんじゃなかったかな
mime-typeを仮にサポートしてるOSがあってもせいぜい高級APIでじゃないの

何を言いたいのかさっぱりわからん
0147デフォルトの名無しさん垢版2021/03/29(月) 09:30:51.89ID:T/NVAJfs
>>146
スレを眺めるに高級環境っぽいので、posixの話はアリかと思いまして
ただ、shを名乗っててもbusyboxとか組み込みだと無さそうな気がしますね(調べてない)
普段コマンドラインに住んでますがすごく便利ですよmailcap
ただ、色々突っ込んで貰ってenvも良さそうな気がしてきました
0149デフォルトの名無しさん垢版2021/03/29(月) 09:36:04.57ID:SSJ6OpUN
OSレベルでもなくツールで便利だったからかよ?
自分が便利でしかないことをうだうだうだうだとかよw
0150デフォルトの名無しさん垢版2021/03/29(月) 09:36:15.38ID:T/NVAJfs
>>148
シェルスクリプト書く人の話ですよ
実行環境を指定するのに、シバンでパス直打ちか、envか、mailcapか、ということです
0152デフォルトの名無しさん垢版2021/03/29(月) 09:43:42.09ID:SSJ6OpUN
mailcapではないがmime-typeをサポートしてるOSがあるんだが。ある意味OSレベルでサポートしてる
作法が多分違うと思うが、それはそれでmime-typeにある意味固執して使うのかなあ?
めんどくささの方が上回りそうだけどw
0154デフォルトの名無しさん垢版2021/03/29(月) 09:49:41.80ID:SSJ6OpUN
既存の色々を知らなさすぎるのに普及運動とかは無理だろうとしか思えない
OSレベルでサポートしてるOSのでもそんなことやってるヤツ見たことないしな
0155デフォルトの名無しさん垢版2021/03/29(月) 09:52:18.11ID:T/NVAJfs
>>154
はい、当たり前と思ってたら色々目からウロコで
また勉強して建設的な議論ができるようになったら戻ってきます、皆ありがとう
0156デフォルトの名無しさん垢版2021/03/29(月) 09:59:52.36ID:Hi4CyJOB
>>137
あるいは、実装の詳細をファイル名に漏出させないため、やな。
ユーザーには関係ないし、開発者のフリーハンドを大きく残しとけるしな。
0157デフォルトの名無しさん垢版2021/03/29(月) 10:01:28.74ID:wK+S1L2g
>>153
普及運動したってmailcapに機能が搭載されてなければ出来ないだろ

だから早くいえmailcapを使うとして
シェルスクリプト作者は何をスレば良いんだ?

実は何もしなくて良いんだろ?w
そもそもmailcap使っても出来ないことだからwww
0160デフォルトの名無しさん垢版2021/03/29(月) 10:05:03.53ID:wK+S1L2g
× webだとみんなmimeでインタプリタ決めるしな
○ ウェブサーバーだとみんなmimeでインタプリタ決めるしな

ウェブサーバー側の設定でやるから
スクリプトの作者は何もする必要がない
ウェブサーバー側に相当する何かを用意すればいい
0165デフォルトの名無しさん垢版2021/03/29(月) 15:38:51.51ID:Hi4CyJOB
潔癖症とか完璧主義者とかがUNIX系のもろもろをキモく感じるのはわかる。
とくに最初のころ。

馴れてくると、だいたい気にならんくなってくる。
それがいいことかどうかはわからんけど。w
0169デフォルトの名無しさん垢版2021/03/29(月) 17:47:55.60ID:T/NVAJfs
めっちゃ右翼だなそりゃ…
仕方なく読む專だからわからんのだけど、zshもshっぽく振る舞うモードとかあるんじゃないのさすがに限度ってものがあると思うが
0170デフォルトの名無しさん垢版2021/03/29(月) 17:51:37.76ID:jeDqT5qX
>>169
単にGPL汚染だったからと言われてるけどApple側から説明はないので不明
bashのv4からGPL3になったのが理由だと思う
0171デフォルトの名無しさん垢版2021/03/29(月) 17:53:39.75ID:wK+S1L2g
>>168
> macOS Catalina

どーせそういうと思ったw
なんつーか、みんな基礎的な知識がないよな

あ、macOS Catalinaの/bin/shは(POSIXモードの)bash 3.2.57 だ
これからもずっと変わらんだろうよ
0176デフォルトの名無しさん垢版2021/03/29(月) 18:06:21.42ID:jeDqT5qX
>>174
とっくに確かめてるって
BigSurはまだ更新してないから聞いただけだが最初からzsh
わからん人だね

そんに疑うなら自分でやってみ
0178デフォルトの名無しさん垢版2021/03/29(月) 18:07:48.03ID:wK+S1L2g
>>176
俺が聞いたのは、プロンプトになんて表示されるかだ
なぜ質問に答えられないのか?
それだけなんだが?
レスするよりタイプ文字は少ないだろ

ああ面倒だw

答えは、sh-3.2
bash 3.2の3.2だ

なにか言い返す言葉はあるか?
0179デフォルトの名無しさん垢版2021/03/29(月) 18:08:14.41ID:1/gzKsrI
>>176
確かめてないだろw
冷静にもう一度ちゃんと確かめてみ

>macOS Catalina
>以前は手を入れないとダメだったらしいけど
ってのからも明らかにログインシェル=/bin/shだと思ってるだろうし
0180デフォルトの名無しさん垢版2021/03/29(月) 18:10:30.37ID:wK+S1L2g
>>177
されてない

それどころかbashにもリンクされてなくて
ファイルサイズはbashとzsh(ほぼ同じぐらい)の1/10程度しかない

これは/bin/shがbashをベースにPOSIXに準拠するだけの機能に
減らしてビルドした縮小版だからだ
0181デフォルトの名無しさん垢版2021/03/29(月) 18:13:42.46ID:1/gzKsrI
>>177
嘘なのかw、マジでそうならなんかおま環くさい
/bin/shがコロコロ変わったら困るから(コロコロ変わる必要もないしな)、なんらか(chsh)でそうなるわけもなく、なんでそうなんか...嘘くさいww

BigSurはまだ更新してないからってことは、Catalinaか...尚更嘘くさい
そんな変なの捨ててクリーンインストールしなさいなww
0182デフォルトの名無しさん垢版2021/03/29(月) 18:14:08.54ID:wK+S1L2g
しかしmacOSの/bin/shが、bashやzshの1/10にまでサイズが減ってるとなると
本来のbashに比べて/bin/shは相当機能が削減されたbashだと思うけど何が減ったんだろう?
/bin/shはbashのインタラクティブシェルとしての機能を削っただけかな?
0184デフォルトの名無しさん垢版2021/03/29(月) 18:16:35.62ID:wK+S1L2g
そういやqiitaかなんかでmacOSの/bin/shを最新のbashに
アップデートしましょうとか書いてあった記事があったな
Apple版bashじゃなくてbash本家からビルドしてsudoでcpしてw
システム壊す気かって思ったwww
0188デフォルトの名無しさん垢版2021/03/29(月) 18:34:14.26ID:5I9+wJCt
動いてるなら必要十分だよな
bashはもうバージョン5だし、補完やらのAPIを外部に晒したのが成功して、対話モードが随分良くなった
2つ入れるのはアリだと思う
名前も念の為分けといた方がいいかもしれない(俺はサボったけど)
ただ、呪文のようなパラメータ置換をモリモリ実装してるのは頭おかしいと思う
外部コマンド使え
0189デフォルトの名無しさん垢版2021/03/29(月) 18:35:37.53ID:wK+S1L2g
> ただ、呪文のようなパラメータ置換をモリモリ実装してるのは頭おかしいと思う
> 外部コマンド使え

1/1000ぐらいにパフォーマンス下がるぞw
数値は適当だが
0190デフォルトの名無しさん垢版2021/03/29(月) 18:38:16.17ID:wK+S1L2g
外部コマンドはパフォーマンスが大幅に低下するだけじゃなく
改行をうまくあつかないという問題がある
変数には改行を入れられるが、外部コマンドだと行区切りとして扱われる
0192デフォルトの名無しさん垢版2021/03/29(月) 18:59:51.55ID:wK+S1L2g
>>191
> macOS Catalina の Bourne 互換シェルとのスクリプトの互換性をテストするには、
> 「/var/select/sh」を「/bin/bash」「/bin/dash」または「/bin/zsh」に変更してみます。

それみてmacOSの/bin/shのサイズが1/10しかない理由がわかったw

man shすれば書いてあったが、macOSの/bin/shはシェル本体じゃなくて
シェル(/var/select/sh、デフォルトは/bin/bashへのシンボリックリンク)
を起動するためのコマンドなのか

どおりでstrings使ったらbashやzshといった文字が見つかるわけだ
/bin/sh をデフォルトのbashから別のシェルに変更したい場合は
シンボリックリンクを変更すれば出来るんだな

ってことはやっぱり単にPOSIXモードが有効になったというだけのbashなのかもな
0193デフォルトの名無しさん垢版2021/03/29(月) 19:55:41.76ID:1/gzKsrI
>>191
/bin/dash ってあるから、
次か次の次かで /bin/sh は bash を捨てて(流石に捨てるだろう3ベースのなんて。kshがまだあるから同じように残るか??) の dash になる可能性が大な感じ?
0194デフォルトの名無しさん垢版2021/03/29(月) 20:03:13.24ID:wK+S1L2g
>>193
bashからdashに変更すると互換性が壊れるからなぁ
まあそれをUbuntuがやってのけたから
互換性気にしないAppleならやるかもな

保守が続いてるdashに変更するか
それともAppleがbashをメンテンスし続けるか
後者でもほぼ修正はないんだから、大変ではないだろうな
0195デフォルトの名無しさん垢版2021/03/29(月) 20:07:19.27ID:KEZ/XNTe
>>189
そこまで気にしてなかった、利点はあるのね
しかしパースの曖昧さissueがどんどん上がってたり、使わない部分にまで影響が及ばないか不安になってくる
0196デフォルトの名無しさん垢版2021/03/29(月) 20:10:44.21ID:1/gzKsrI
Appleでメンテするのがめんどくさくなって捨てるのは定番
移行を即すためにも最後のあるんだろうし、dashをも入れてるのは 意味がある ことだろう
Appleの準備が終わったら&Appleが移行期間が終わりと見なしたら変わるだろうな
bashに固執することなんてないし
0197デフォルトの名無しさん垢版2021/03/29(月) 21:01:40.15ID:wK+S1L2g
bashは機能拡張とかいうレベルのメンテはしなくていいけど
もしかしたらこれから新たな脆弱性が見つかる可能性もあるからね
そうなると古いbashは公式にはメンテされない
Appleが独自で修正を入れる必要がある

/bin/sh(=/bin/bash)はAppleが手を入れてるからGPLv3だと困るとして
まったく手を入れなくていいとなった場合
macOSに新しいbashをバンドルすることはあるだろうか?

つまり古いbashはいずれにしても問題があるわけで更新しなければいけない
だから/bin/shをdashに変更した後、bash5をバンドルするかなってこと?
それが無理ならdashに変更したらbashを削除することも有り得そう
それを見越してzshに移行しろって言ってるのかもな
0198デフォルトの名無しさん垢版2021/03/29(月) 21:01:56.86ID:wK+S1L2g
つまりbash用スクリプトはmacOSで動かないわけで、
bashを入れるためにはHomebrewを使わなければならないわけで
そうするとbashからdash(POSIX準拠)に書き直す必要があるんじゃないか?w

HomebrewのインストーラーをRubyからBashに書き直しました!
https://itchyny.hatena
blog.com/entry/2020/03/03/100000

これどれくらいbash依存してるんだろう?
0202デフォルトの名無しさん垢版2021/03/31(水) 11:33:02.43ID:AtIsL56M
arrayも使えないのは正直つらい

コマンドだけど魔改造でびっくらこいたのはlinux版のcolumn.1(kernel.org配布なんで公式のはず)だなあ
linuxなのに-hも--helpも受け付けないbsd版使ってたわ
--jsonとか--treeとかもはやcolumnの域を超越してる
0203デフォルトの名無しさん垢版2021/03/31(水) 12:20:25.54ID:ekNiD538
配列なんていらんと思ってるけど、何に使ってるか聞いていい?
できれば難しいケースでw
0206デフォルトの名無しさん垢版2021/03/31(水) 12:43:15.98ID:ekNiD538
単語分割は値にスペースが入ってるときに困るんで基本使わないよ。
その上で配列いらんと思ってる。>>205に書いた通り
0207デフォルトの名無しさん垢版2021/03/31(水) 16:10:08.25ID:AtIsL56M
>>205
ああwikiにもデバッグにもお世話になってるわshellcheck様々

まあそうなんだけど、逆に割りたいところでは割りたい時にも文字列より便利なんだよなコマンド組み立てとか

そもそも俺のは乱用であって、配列本来の用途は添字で引くことでしたね!
mktempしてpaste key valueを流し込み、
grep ^key^I |cut -f2-
で引くとかぱっと思いつくけど、汚え
なんか良い方法あったらご教授頂きたい
0208デフォルトの名無しさん垢版2021/03/31(水) 16:20:02.26ID:AtIsL56M
まずmktempじゃなくて文字列変数でいいな、最大サイズとか規格にありそうだけどとりあえず
0209デフォルトの名無しさん垢版2021/03/31(水) 16:54:44.20ID:0ggCFJWv
配列は普通キーと値を追加して育てるので'key sep val '>>で追記
二度同じキーを入れると複数引っかかるので
tac |grep -m1あるいはtail -n1
とりあえずkey sep>>で空文字が返るでよしとする
でもunsetと区別できない
セパレータはタブよりヌル文字にあたりにしたほうが無難そう

ボロボロ出てくるんで出直してきます…
0210デフォルトの名無しさん垢版2021/03/31(水) 20:23:49.38ID:rlnsgVLR
>>207-209
ちゃんと読んでないけど

コマンド組み立てならこんな感じ
[ "$FLAG" = "on" ] && set -- -f "$@"
[ -e "$FILE" ] && set -- --file "$FILE" "$@"
cmd "$@"

添字で引きたいならこんな感じ
set -- a b c
echo $2

grep ^key^I |cut -f2- なら、次のようにすればgrepもcutも使わなくても出来るよ
while IFS="$TAB" read -r key value; do
echo "$value"
done

一般的なプログラムでは配列あったほうがいいけど
シェルスクリプトでやるような内容で配列なんかいらない
ただみんなシェルスクリプトを雰囲気でやってて知らないだけ
0211デフォルトの名無しさん垢版2021/03/31(水) 20:37:35.81ID:fnN7hvaV
でも、PerlもPythonもないけど、いれるほどでもない用事のときには、Bashくらいが適当かつ充分だったりするからね。
0218デフォルトの名無しさん垢版2021/04/01(木) 14:47:29.53ID:9tfGPqCh
シェルスクリプトじゃないけど、質問。
makeで、ターゲット実行が成功しても失敗しても、最後に後始末みたいな処理をさせる方法はない?
bashならtrap ... EXITでできるけど。
0220デフォルトの名無しさん垢版2021/04/01(木) 21:35:25.25ID:HbnIL0Hw
>>219
ああ、pipefailの意味をやっと理解したわ
bashのinfo何度も通読してるはずなんだけど、last commandのステータスを返すって当たり前じゃね、ってスルーしてた…
限りなくバグに近い仕様ってやつか
0223デフォルトの名無しさん垢版2021/04/01(木) 23:47:14.73ID:I05CY+G0
>>219
ちゃうねん、もう一声!
ひとつのターゲットの中での最後じゃなく、依存関係にあるターゲットでも、並列のターゲットでも、とにかくすべての最後に処理をやらせたいんや。

ちなみに、そのページは見てたけど、流してたわ。w
あらためて見直すと、意義がわかった。
ありがとやで!
0226デフォルトの名無しさん垢版2021/04/02(金) 02:22:57.94ID:xkKIrGbu
>>225
ちなみに、>>219のリンク先にも、.ONESHELLからのtrap+makeがあるんや。
たしかに、make関数とかで引数をこねまわしたら、なんとか思ったことができはするんやろうけど、しかしそれもなあ。。。

ということで、makeはそろそろあきらめる方向。
Pythonスクリプトを検討中。

さっぱりきれいな方法があったら頼むわ!
0227デフォルトの名無しさん垢版2021/04/02(金) 02:28:01.75ID:sr96G99p
Pythonスクリプトの問題点

1. makeのように依存ファイルに基づいた処理を行うのが大変
2. makeでやっていたような処理はシェルスクリプトで書いたほうが簡潔に書ける

なんでPythonのようなタスクを行うのに
適してない言語を使おうとするのかわからない
0228デフォルトの名無しさん垢版2021/04/02(金) 11:31:17.73ID:ebi/L5xP
make相当のもあるし最近良くなったので(PEP517)、python+c拡張のプロジェクトでなら従った方がいい
わざわざビルドプロセスだけpythonで書いて添えるんならやめとけ
0230デフォルトの名無しさん垢版2021/04/02(金) 13:20:46.71ID:sr96G99p
>>229
そんなsedはゲームにも使えるんやで!みたいなことを言われてもな

sedで書かれたチェスがもの凄い件
https://softantenna.com/wp/unknown/chess-written-in-sed/
> sedで書かれたテトリス「sedtris」なんてものまであるようです。

自分が得意な言語じゃなくて適切な道具を使いましょうってだけ
make使ってなにかのコマンドを実行してたんだろ?
ならそれはシェルスクリプトが適切な道具だ
Pythonじゃない。Pythonで書くと倍以上にコードが長くなるだろう
0231デフォルトの名無しさん垢版2021/04/02(金) 13:27:11.24ID:s72UfXRI
それもよく言われるけど落とし穴が多すぎる、現にハマってるようだし他の方法を考えた方が
0233デフォルトの名無しさん垢版2021/04/02(金) 13:36:01.88ID:ebi/L5xP
なるべく基本ユティリティでやりたくて、makeで融通が効かないタスクの自動順序解決&実行ならtsortを使うのが良い
0234デフォルトの名無しさん垢版2021/04/02(金) 13:46:20.17ID:ebi/L5xP
何がやりたいのか小出しでよくわからんね
makeはtsort+ビルド向けの機能のセットであって、ビルドに使わないなら必要としてるのはtsortの部分だろ
0235デフォルトの名無しさん垢版2021/04/02(金) 14:06:24.57ID:qkslRrVn
具体的にどうタイムスタンプ(に限らないが)を取ってきてコマンドと結合しtsortにかけ、出力を整形して実行するのか
みたいな事なら答えてやれるし、それがこのスレの趣旨だろう
0236デフォルトの名無しさん垢版2021/04/02(金) 14:16:05.96ID:W1Cqjj5x
単にタスクランナーとして使ってるだけかもしれんし、質問者が出してない情報を推測であれこれ言うのはやめよう
0237デフォルトの名無しさん垢版2021/04/02(金) 17:21:25.62ID:l3SG9gZX
#!/bin/sh
# >>14
# 外国籍の者が日本人に成り済ますために使う「通名」作成スクリプトを実行し
# 当たり玉を3回以上出した者をPOSIX中心主義者と見なしコレ以降の書き込みを禁じる
KIM=1
while [ $KIM -lt 21 ]
do
echo "$KIM回目"
KIM=$( expr $KIM + 1 )
NAME=$( shuf -e 村 崎 本 田 山 玉 子 -n 1 )
if [ "$NAME" = "玉" ]
then tput setaf 3 && echo "金$NAME"; tput sgr0
else echo "金$NAME"
fi
sleep $(( $(od -vAn -N3 -i /dev/random) % 5 ))
done
0240デフォルトの名無しさん垢版2021/04/02(金) 18:17:16.53ID:hbCxlU+U
移植性や持続性っても、
移植性ってただ他でも動くでしかないし、
持続性ってただ変わらない=古いのに固執でしかないし
メンテナンス性は軽視もしくは考慮外だからな(命名のいい加減さから考慮してないだろうなw)
その面が実務者(新しい人だけど)に公にやんわりとw指摘されて瀕死かな
0243デフォルトの名無しさん垢版2021/04/02(金) 18:42:19.12ID:ebi/L5xP
tsortはmakeのような動的依存解決&コード生成に使う発想は無かったわ

確かにスクリプト中でタイムスタンプでソート(sort)してからtsortすればmakeの基本機能はカバーできるが、実行したいコマンドを直接書くのはセパレータの扱いや依存が一つしか書けないなど厄介

書き散らしたシェル関数/コマンド"名"を直列に依存解決してダンプ、リファクタリングの参考にするのには気軽でいい
0244デフォルトの名無しさん垢版2021/04/02(金) 19:16:18.60ID:1/Ara7QU
進捗率表示してくれるpvコマンドってどうなの?
やっぱその分処理遅くなったりする?
0245デフォルトの名無しさん垢版2021/04/02(金) 19:16:25.76ID:ebi/L5xP
見かけ上無引数のシェル関数で包めば、とりあえず簡単に動くコードは吐けるか
あんまりやりすぎるとmakeでタスクランナーと変わらんが
0246デフォルトの名無しさん垢版2021/04/02(金) 19:37:10.62ID:ebi/L5xP
>>244
timeするしかない
例え何も処理しないコマンドであっても、パイプに挟んだとたんバッファリングモードの不整合で遅くなることだってある
0247デフォルトの名無しさん垢版2021/04/02(金) 19:42:14.08ID:ebi/L5xP
たぶん求められている答えじゃないかもしれないけど…

ことパイプに関しては前後のコマンドすらスループットに大いに関係がある
特に挟まれる前提のコマンドなら、それ単体で遅い速いを言うのは意味がない
0248デフォルトの名無しさん垢版2021/04/02(金) 20:08:48.33ID:ITrGzi0M
進捗確認ツールならそれ自体は多分十分気をつけてるだろ、通信先が病的なら気をつけても無駄だが

遅くて困ってからstdbufとか試せば
どうしても必要なものとは思えないけど、インストールスクリプト等でこだわりがあるなら
0249デフォルトの名無しさん垢版2021/04/02(金) 20:45:04.78ID:B/D63v/Y
確かにこれに限らずパイプ通しただけでもわからんよな
それ用のコマンドだから意識してるとは思うが
0250デフォルトの名無しさん垢版2021/04/02(金) 22:49:58.28ID:Gl9s1y4K
straceするんだ

ファイルIO想定で書いたけど、ストリームも一応(ロジックそのままで)対応しとくかみたいな奴が腐ったミカン
内部バッファにある程度貯めて処理するのが理想だけど、パイプラインのパーツはそうじゃない

こまめに空パイプ覗きに行って藪蛇ブロック、貯めたデータの処理止まってたり
時々ドバっと書き出すから後続はずっとアイドル

なんかインピーダンスみたいだな
0251デフォルトの名無しさん垢版2021/04/02(金) 22:56:06.54ID:Gl9s1y4K
リーダ/メイン/ライタの3プロセスで1コマンド構成するのがベストになんだろうが、めんどくさいな…

pvみたいに統計取るだけの奴は、読んだ分をそのまま書き出すだろうから、それ自身が問題起こすことは考えにくいかと

ところで、誰かtime したかー?
0253デフォルトの名無しさん垢版2021/04/02(金) 23:21:07.01ID:Gl9s1y4K
俺は他の使ってるが、単なるオレオレタスクランナーならモダン言語で良いの山ほどあるしな
やっぱり何でもmakeマンには賛同できないわ
0255デフォルトの名無しさん垢版2021/04/02(金) 23:55:49.61ID:Fe5X0u2X
複数の言語を使ってるとなんで言語ごとに
タスクランナーを変えなきゃいけないんだよと思う
大したことなんかしないだろ
0256デフォルトの名無しさん垢版2021/04/03(土) 00:05:04.26ID:hWVbhofL
>>255
高度な機能を実装する為にモダン言語使っているというだけで、自分の好きなシェルを指定して、そのシェル文法で書くのが主流だと思うよ
(思う、というのはホスト言語の構文ももちろん使えるから、他人は知らん)
.ONESHELLみたいな汚いワークアラウンドも要らないしmakeよりはbsh
0257デフォルトの名無しさん垢版2021/04/03(土) 00:12:46.44ID:YB/KO+42
Makefileは真のタスクランナー(シェルスクリプト)の
よく使う使い方を書いたサンプルファイルだよw

makeコマンドが入っていれば、makeコマンドで実行できるし
入ってないならMakefileの中を見て
そこに書いてるサンプルを直接実行するもの
0260デフォルトの名無しさん垢版2021/04/03(土) 00:28:21.58ID:YB/KO+42
> bashで書けるオススメおしえろ
どういう意味?

makeは依存ファイルに基づいてビルドするターゲットを決めるものだけど
その機能を使わないで、ただのタスクランナーとして使うなら
普通にシェルスクリプトにコード書けばいいんじゃん?
よくinstall.shとかあるでしょ?
インストールというタスクを実行してる
0261デフォルトの名無しさん垢版2021/04/03(土) 00:37:33.71ID:r67/WY6G
>>260
ロジック頭から追わなくてもルールベースで書けるってのが意義では、ここだけmake信者の気持ちは理解できる
カジュアル用途なら再コンパイル判定は要らないし、トポロジカルソートだけしてくれれば大体みんな満足でしょう

シェルオタとしては上の方に出てるtsort実装もやってみたくはある
0263デフォルトの名無しさん垢版2021/04/03(土) 00:42:44.05ID:r67/WY6G
ごめん、多分タスクランナーという言葉の解釈違いだわ
初めて聞いた言葉なので、>>236の用例を借りました
適切な順序で実行する必要があるコマンドの実行(但し非ビルド用途
0265デフォルトの名無しさん垢版2021/04/03(土) 00:53:12.25ID:YB/KO+42
>>263
適切な順番に並べればいいだけじゃん?
例えばmake.shとか作って

task1() { ・・・}
task2() { ・・・}
task3() { ・・・}

cmd1() {
 task1
 task2
 task3
}

"$@"

とか書けば、make.sh cmd1でこの順番通りに実行できるでしょ?
task2がtask3に絶対依存するってものなら
task2の中からtask3を呼び出せばいいだけだし
シンプルな手続き型で書けることを
知らなきゃわからない独自の定義構文で書くのってアホらしいと思う
0270デフォルトの名無しさん垢版2021/04/03(土) 01:06:37.77ID:r67/WY6G
>>269
適切な順番に並べたのなら書き直さなくていいよ、適切に並べる為の仕組みの話で
あと簡潔というのは各記述の話であってコード全体が簡潔になるという意味ではないぞ…むしろトポロジカルソート直列化後のコードは一般に冗長になる
0271デフォルトの名無しさん垢版2021/04/03(土) 01:14:42.13ID:r67/WY6G
つーかいい実装無いか尋ねてる俺になぜ聞く…
独特のレス見るに月末に初心者イビってた奴か?
0274デフォルトの名無しさん垢版2021/04/03(土) 01:18:13.59ID:r67/WY6G
タイポしちゃった、わけわかんねー、の前に、"も理解できないオッサン"を補って読んでください
0275デフォルトの名無しさん垢版2021/04/03(土) 01:20:35.91ID:YB/KO+42
>>273
autotoolsもcmakeも「発生した問題」を解決するためのツールであって
問題が発生してないのに、使うものではないと言ってます。
タスクランナーごときで問題が発生しますか?

まさにKeep it simple stupidの話だよ
シンプルにしておけ
0276デフォルトの名無しさん垢版2021/04/03(土) 01:34:22.75ID:r67/WY6G
>>275
やっぱ分かってねえじゃん
問題が起きないようアルゴリズムに任せるとこは任せましょう、というツールだよ…
そしてそのアプローチはカジュアルユースにも使えるよね?
0277デフォルトの名無しさん垢版2021/04/03(土) 01:37:02.86ID:YB/KO+42
> 問題が起きないようアルゴリズムに任せるとこは任せましょう
無理です。どちらにしろ人間が依存関係の情報を書かなければいけません。
単に書き方が変わってるだけです。
0278デフォルトの名無しさん垢版2021/04/03(土) 01:41:25.51ID:r67/WY6G
そういう意見はここじゃやくてそれらのツール、あと
>>252
Jenkins,
Ruby のRake, Thor,
JavaScript のnpm scripts, gulp
のメーリスにでも投稿してくれ
もしかしたら世の役に立たないこともないかもしれん
0279デフォルトの名無しさん垢版2021/04/03(土) 01:44:38.22ID:YB/KO+42
ここまでレスの応酬を続けておきながら、
今更そんなレスをするっていうのは
これ以上言い返せなくなったからということなんですね
0280デフォルトの名無しさん垢版2021/04/03(土) 01:44:39.70ID:r67/WY6G
昨日結構賑わいあって久々に良い感じの雰囲気だったのに、ID真っ赤にして空気乱してすまんかった
大人げない、反省
0286デフォルトの名無しさん垢版2021/04/03(土) 15:48:41.71ID:cpKOTPf8
>>236
当たらずとも遠からず。
目的は、サーバーテスト。
で、テスト終了後にサーバーを始末したかったんや。。。

>>265
そんなんするくらいなら、makefileのほうが万倍マシやな!w
makeと違って、個別ターゲットの指定もできないし。

>>235
tsortを持ち出す教える君は、上から教えたい気持ちが漏れすぎやで!
https://togetter.com/li/1685
0288デフォルトの名無しさん垢版2021/04/04(日) 04:15:28.57ID:Y9bxvDcN
>>286
> そんなんするくらいなら、makefileのほうが万倍マシやな!w
> makeと違って、個別ターゲットの指定もできないし。

たった>>265のコードだけで個別ターゲット指定できてるんだが?w
makeの「依存ファイルに基づいてビルドするターゲットを決める」という
メイン機能を使わないなら>>265だけでいい。
シバンがないからこれがシェルスクリプト全体だってわからなかったか?

#!/bin/sh
target1() { echo "target1"; }
target2() { echo "target2"; }
target3() { echo "target3"; }
"$@"

↑これをmake.shとかいうファイル名で作って
./make.sh target1ってやってみ、ちゃんと動作するから

もし ./make.sh target1 target2 target3 みたいに
複数ターゲット指定できるようにしたいなら単にループすればいい

for target in "$@"; do
"$target"
done

お前にとってのmakeの価値はこのたった3行のコードにすぎんよ
一行でも書けるがw

# お前に必要なmakeコマンドの実装
for target; do "$target"; done
0289252垢版2021/04/04(日) 06:36:12.78ID:0QnJQanX
まさに、それを書きやすくしたのが、

>>252
に書いた、タスクランナー

Ruby のRake, Thor などで、タスクを指定できる。
タスク同士の依存・実行順序も指定できる
0290デフォルトの名無しさん垢版2021/04/04(日) 06:54:28.00ID:Y9bxvDcN
>>289
まあ実際それらを使っても書きやすくなってないんだけどなw
シェルスクリプトで手に負えなくなる規模ってのを
実際に見たことがないよ
0291デフォルトの名無しさん垢版2021/04/04(日) 10:55:57.93ID:Y9bxvDcN
たまたまビルドを作る必要があってMakefileにちゃんと依存関係を書いてみたが
やっぱり数個程度のファイルしかない場合は過剰なんだよなw
そしてその依存関係の定義はちゃんと正しいのか見なきゃいけなないという
タスクごとにそのまま書いたほうが分かりやすいっていうね
0292デフォルトの名無しさん垢版2021/04/04(日) 12:21:35.65ID:Y9bxvDcN
依存関係の定義なくしたw
正確に言えば依存ファイルの定義だな
依存のタスクは残しているが、依存ファイルはどうでもいいや
タスクを実行したら最初からビルドしなおしても時間はかからんし
0293デフォルトの名無しさん垢版2021/04/04(日) 12:30:56.36ID:sWeAOgyW
矮小化した自分に都合に良い条件でしか考えられない
連投さえして同じとこぐるぐる回ってるだけって馬鹿犬かよ
0294デフォルトの名無しさん垢版2021/04/04(日) 12:42:29.55ID:Y9bxvDcN
自分に都合に良い条件で考えるのは足り前
正確に言えば、実際のプロジェクトにいい条件ってこと
架空のプロジェクトを相手にしたってしょうがない
0295デフォルトの名無しさん垢版2021/04/04(日) 13:10:39.02ID:sWeAOgyW
プロジェクトってw
想像できませんってだけのそんなレスできるんだから趣味での経験しかないんだろうな
吠えて煩いだけの馬鹿犬だな
0296デフォルトの名無しさん垢版2021/04/04(日) 13:30:29.59ID:rmqTiba5
>>288
all : task1 task2 task3
task1: prepare
task2: prepare
task3: prepare
prepare :

という構成で、タスクは並列可、prepareは超重い、となると、makeが最適解やろ。
0302デフォルトの名無しさん垢版2021/04/05(月) 06:19:20.07ID:3jUc8O+L
prepare無視して勝手に終わりにしてるってとこだろ
無視というかただわかってないからだろうけど
0304デフォルトの名無しさん垢版2021/04/05(月) 08:37:32.95ID:gsx4ZFoJ
その前にprepareが何なのか言えよ
ただ実行する以外に何が違うのか書いてないのに
あとつけで違うとか言うなよ
0306デフォルトの名無しさん垢版2021/04/05(月) 09:09:31.93ID:Ir9xQslo
>>304
prepareはprepareだろう。その意味意図がわからないのはちょっとなあ
知らないのにそんなに偉そうなのは恥以外の何物でもない、恥の上塗りだな
>>296がそう意図してるのかは不明だが、>>296のでできるのは>>298だけじゃないからな
親切なヒントやったぞ。さあ、どうぞ
0307デフォルトの名無しさん垢版2021/04/05(月) 10:59:23.34ID:gsx4ZFoJ
>>306
じゃあそれ以外の意図があるならそれを書いてくれ

task1関数、task2関数、task3関数 の一行目に
prepare関数を実行すれば終わりだろ?
0308デフォルトの名無しさん垢版2021/04/05(月) 11:01:51.92ID:gsx4ZFoJ
複数のタスクを指定したときにprepareを一回しか実行しないというのであれば
all関数の最初に一回だけ書いてもいいし
フラグを使って一回だけ実行するようにしてもいい(たった一行で実現可能)
動かしたい通りに書けば良い
0310デフォルトの名無しさん垢版2021/04/05(月) 11:04:54.93ID:gsx4ZFoJ
leftpad事件と同じ匂いを感じててしまうな
われわれ(俺除くw)はこんな簡単なコードも書けなくなってしまったのか?
0314デフォルトの名無しさん垢版2021/04/05(月) 12:43:47.04ID:gsx4ZFoJ
このMakefileを見て以下の情報を読み取るのは困難

> ここでは、最初のターゲットなのでデフォルトのゴールは‘all’です。
> この makefileの興味深い特徴は、‘testpad.h’がtestpadプログラムに よって
> 自動的に作成されるソースファイルである点です。そして、その プログラム自身は‘testpad.c’のコンパイルによるものです。

> ‘make’あるいは‘make all’と入力することでmakeが実行可能な ‘tar’、
> テープアクセスを提供する‘rmt’デーモン、‘tar.info’の Infoファイルを作成します。

> ‘make install’と入力すると、‘tar’、‘rmt’、‘tar.info’の 作成だけでなく、それらのインストールも行ないます。

> ‘make clean’と入力すると、makeは‘.o’ファイル、 ‘tar’、‘rmt’、‘testpad’、
> ‘testpad.h’、そして ‘core’ファイルをすべて削除します。

> ‘make distclean’と入力すると、makeは‘make clean’と同じ 削除以外に‘TAGS’、
> ‘Makefile’、そして‘config.status’ファイルも 削除します。
> (明らかではありませんが、このmakefileと‘config.status’は configureプログラムに
> よって作成されたもので、これはtarの 配布プログラムに含まれています。しかし、ここではそれは表示されていません。)

> ‘make realclean’と入力すると、makeは‘make distclean’の ときと同じ削除を行ない、
> さらに‘tar.texinfo’から生成されたInfoファイルの 削除も行ないます。

> さらに、ここでは、配布キットを作成するためのターゲットsharと distも示されています。
0315デフォルトの名無しさん垢版2021/04/05(月) 12:52:05.95ID:4wNso/hW
Makefileが複雑化するのはビルドする工程が複雑化しているという別の問題の顕在化でしかないでしょ

それと同じことができるシェルスクリプトを書くのとMakefileを書くのとどっちが簡単かって話じゃないの
0316デフォルトの名無しさん垢版2021/04/05(月) 13:07:34.94ID:i9PX2oQn
話題に挙がったついでだけどそこでtsortよ
ルールだけ抜き出して可視化しリファクタリングしなさい
0317デフォルトの名無しさん垢版2021/04/05(月) 13:09:49.69ID:gsx4ZFoJ
>>315
複雑なビルド工程をMakefileだと
・依存関係の定義として記述するのが正しいとされ、シェルスクリプトとしての柔軟性もないので
細切れのタスクが多数できてしまい、見づらくエスケープされたシェルスクリプト等を埋め込むことになる
と言ってます。

Makefileからシェルスクリプトを呼び出すんじゃなくて
シェルスクリプトから(必要な場合に必要な所だけ)makeを呼び出したほうがいいんだよ

そして大抵はmakeはいらない。多くの人がタスクランナーとして使ってるのはそういうこと
本当にmakeが必要なのは、C言語のような古い言語で、ヘッダファイルとソースファイルから
オブジェクトファイルを作ってリンクするような作業の部分だけでしょ?

つまり>>314に書いてあるタスクの殆どはmakeを使う必要がないってこと
0319デフォルトの名無しさん垢版2021/04/05(月) 14:41:15.13ID:VlUSW8N+
そもそもシェルスクリプトでファイル間の依存関係を定義するのに疲れたから make が生まれたと思うんですけど...

あと Makefile があれば make install や make clean が存在するっていうのが分かるのがいいんだよ
プロジェクトごとにシェルスクリプトがあったらどういう引数で読んだらいいかとか分からないだろ?
0320デフォルトの名無しさん垢版2021/04/05(月) 15:23:18.33ID:gsx4ZFoJ
> そもそもシェルスクリプトでファイル間の依存関係を定義するのに疲れたから make が生まれたと思うんですけど...

そうだよ?タスクランナーではなく依存関係を定義するために作られたのがmakeだよ
最初からそう言ってるじゃん
0321デフォルトの名無しさん垢版2021/04/05(月) 15:26:11.21ID:gsx4ZFoJ
> プロジェクトごとにシェルスクリプトがあったらどういう引数で読んだらいいかとか分からないだろ?

俺はそれよりもmakeで実行できるタスクに何があるのかわからんのだがw
make --helpした所で表示されないしな

Makefileみればわかるって?それはソース見ればわかるって言ってるようなもんだし
依存関係を見たいんじゃなくて、makeで直接実行することを目的としたタスクの一覧が見たいんだよ
0322デフォルトの名無しさん垢版2021/04/05(月) 16:03:10.00ID:r6jGhjiZ
>>300-302から自ら>>304と馬鹿な自分を自己紹介しておいてw
何でそうも偉ぶりたいのか。まともな神経あったらそんな態度は取らないわなあ
さすがだな
0323デフォルトの名無しさん垢版2021/04/05(月) 16:07:12.70ID:rGWHafb6
>>322
「ただ実行する以外に何が違うのか書いてない」に
対してレスはなにかありましたか?
それが答えだよ。
0324デフォルトの名無しさん垢版2021/04/05(月) 16:13:51.85ID:r6jGhjiZ
そのレスはコーダーと呼ばれる人種っぽいレスだな
いや、普通の日本語の文もそうだが読み取る能力が欠けてるだけだな
それは矮小化した自分に都合の良い条件でしか考えられないからだな
プロジェクトwwとか関係ないよ、ソース読めないといってるのと同じだな今回は
0330デフォルトの名無しさん垢版2021/04/05(月) 21:07:57.60ID:rGWHafb6
>>327
ターゲットじゃなくてタスクを見たいんだってw
例えばシェルスクリプトなら--helpして分かりやすいusageが
表示されるように作るだろ?

sedではそのわかりやすさがない。頑張れば作れるだろうが
Makefileでそんなのが用意されてるのみたことないよ
0331252垢版2021/04/05(月) 21:19:53.87ID:2g7RifS+
Ruby のタスクランナー、Rake, Thor などでは調べるのも簡単

thor list,
thor タスク名

などで、タスクを表示できる

タスク定義の仕方も決まっているので、保守しやすい。
シェルスクリプトでは、各人で書き方を変えるから、保守できない
0333デフォルトの名無しさん垢版2021/04/05(月) 21:22:55.94ID:qeGrbie0
>>330
自分で書く話なら、helpターゲットをつくったらええがな。w
実際、そういうmakefileを、おまえは見たことがなくても、ワイは見たことがあるで?
0334デフォルトの名無しさん垢版2021/04/05(月) 22:30:31.71ID:Oftt9CcS
あいつは何を言いたい何をしたいんだかな
何をしたいのかは「勝ちたい/負けたなくない」wwなのは明白だったか
0337デフォルトの名無しさん垢版2021/04/05(月) 22:56:26.91ID:Oftt9CcS
だから結局そうなるってwこいつの頭の中身はどうなってんだよ、ほんとに
利点を争ってるwのはそこじゃないだろうにな
「勝ちたい/負けたなくない」wwすぎて誤魔化しがカオス
0338デフォルトの名無しさん垢版2021/04/05(月) 22:59:22.09ID:Oftt9CcS
まあ、チャンピオンはこうだからチャンピオンなわけで、誰も勝てないわな
さすがチャンピオン
適当に諦めて試合放棄してもいいよ、挑戦者
0339デフォルトの名無しさん垢版2021/04/05(月) 23:00:22.41ID:rGWHafb6
それなら勝ち負けじゃなくてmakeの利点・欠点の話をすればいいじゃん
俺はずっとmakeの話をしてるんだが、お前は俺の話しかしてないじゃん
0340デフォルトの名無しさん垢版2021/04/05(月) 23:02:35.31ID:rGWHafb6
もちろんシェルスクリプトのスレだから
makeよりもシェルスクリプトの方が良いっていう話ね
あと今更言わなくてもわかると思うけど、タスクランナーとして使う場合
0341デフォルトの名無しさん垢版2021/04/05(月) 23:03:21.85ID:Oftt9CcS
お前に無駄な挑戦はしないww観客がヤジるくらい許せよ、チャンピオンなんだから
てか「勝ちたい/負けたなくない」wwはお前だけだぞ、言っておくが
すんなり「それなら勝ち負けじゃなくて」って言葉出るのな、さすがチャンピオン
0342デフォルトの名無しさん垢版2021/04/05(月) 23:03:56.47ID:VlUSW8N+
タスクランナーとして使う場合の話だったのか、それなら好きなのを使えばいいよ...
0344デフォルトの名無しさん垢版2021/04/05(月) 23:23:23.69ID:rGWHafb6
>>341
自覚してないと思うんだけど、お前のそのレス、またシェルスクリプトの話にはなってない

>>342
最初にそう書いてるんだが
makeからシェルスクリプトを呼び出すとか、Makefileにシェルスクリプトを埋め込むんじゃなくて
シェルスクリプトからmakeを呼び出すほうがいい。もちろんmakeが必要な場合

タスクランナーとして例えばinstallとかcleanが欲しい場合
シェルスクリプトの方がシンプルでわかりやすく書けるわけで
本来makeでやることじゃない
0345デフォルトの名無しさん垢版2021/04/05(月) 23:26:14.86ID:Oftt9CcS
>>344
>自覚してないと思うんだけど、お前のそのレス、またシェルスクリプトの話にはなってない
お前自体が逸脱することしょっちゅうあるくせに
昔からなんか困ったらw(黙らせたいとかw)そう言うよなってしか感じませんよ
0347デフォルトの名無しさん垢版2021/04/05(月) 23:44:04.08ID:Oftt9CcS
>>342は「好きなのを使えばいい」だろう
なのにチャンピオンは「最初にそう書いてるんだが」って書いておいての次の2行
そういうのは「好きなのを使えばいい」とは言わないだろう
>>342はどっちでもいい、どちらに優位とかは本人次第での「好きなのを使えばいい」だろうと思われるが
だったら、チャンピオンらしいさすがカオスな世界観

未だにMakefileの利点と挙げられてるがのがわかってないなって感じ
簡単に言うと定型フォーマットでルールを記述、オレオレロジック書く必要もないてとこかと思うんだけど、言ってるのは
何故全く理解できないのかなんだか不思議でたまらないカオスな世界

>>346
>>345
な?同じことを平気で何故か言えるだろ?
0348デフォルトの名無しさん垢版2021/04/06(火) 00:33:09.03ID:+n99AGjS
> なのにチャンピオンは「最初にそう書いてるんだが」って書いておいての次の2行
> そういうのは「好きなのを使えばいい」とは言わないだろう

補足しておくな

最初に【タスクランナーの話だと】そう書いてる
そして【タスクランナーの話だと】シェルスクリプトの方が良いと最初に書いてる

何の話なのかをあやふやにして、
他人が言ったことをすり替えようとするのは
お前がよく使う手だ。(何度も指摘されてるだろ?)
0349デフォルトの名無しさん垢版2021/04/06(火) 00:34:38.03ID:+n99AGjS
タスクランナーはシェルスクリプトが良いと最初に言ってるのに
なんで好きなものを使えばいいという話につながるのかわからん

最初から「好きなものを使えばいい」とは言ってないだろう
文章を読めないのか、話をすり替えるのが目的なのか
0350デフォルトの名無しさん垢版2021/04/06(火) 00:39:08.04ID:+n99AGjS
タスクランナーとして使う場合、依存しているファイルがないので
Makefileで使える部分は

task:

↑これだけなんだよ

そしてtaskの中身は、コマンドを羅列するか
シェルスクリプトを"エスケープして"埋め込むことだけ

task: であれば
task() { と書いても数文字増える程度で大差なく、

一番重要なタスクの処理は、

task() {
 ここにコマンドやシェルスクリプトを
 エスケープせずにそのまま書けるというメリットが有る
}

もちろん task 関数を書いただけじゃ呼び出せないから
それをシェルスクリプトでは呼び出すコードが必要

あー、それがオレオレロジックなんだーって言うかもしれないが
それは>>287に書いた通り

# お前に必要なmakeコマンドの実装
for target; do "$target"; done

たったこれだけ
0351デフォルトの名無しさん垢版2021/04/06(火) 00:53:19.81ID:WV1MWJne
>>348,349
単に「タスクランナーとして使う場合の話だったのか」の部分だけを言っているのか
そして「それなら好きなのを使えばいいよ」はあくまでも否定してる文のつもりかよ
あんな短文を分けて肯定否定してるなんて、わかりづらいわっ
まあ、そこまで読めなかったのは俺にも責はあるけどな
(何で食いついてるのかと思ったら何となく理解した。アレだからだろな、やっぱ)

だから、シェルスクリプトがいい/Makefile使うなwと言ってるのはお前だけだって。他に誰もいないだろう(せいぜい好きなの使えばいいというのだろう、他のも勧めてるのも居るしなw)
そしてシェルスクリプトがいいと言ってる理由がことごとくアレwされてるだろうに、自覚ないようだけど。そういうとこやで(ww)

あとな、シェルスクリプトの話を「してほしい」wなら、
少しはその自分のカオスな世界観wを他人にもわかるぐらいに直しないさいな
まあ「してほしい」wんじゃなくて黙らせたいだけなんだろけど、自ら行ってもいるんだからな
変わらないんだろうから、お前のルールなんて知らんとだけ言っておく
0353デフォルトの名無しさん垢版2021/04/06(火) 00:55:43.56ID:+n99AGjS
> そして「それなら好きなのを使えばいいよ」はあくまでも否定してる文のつもりかよ

知らねーよ。俺が言ったセリフじゃないんだから
言ったやつに言えよ

俺は、タスクランナーとして使う場合は
シェルスクリプトの方がいいとしか言ってない


誰が言ったかを理解してないのか?
それともわざとあやふやにして
全部俺のせいにしようとしてるのかどっちだ?
0354デフォルトの名無しさん垢版2021/04/06(火) 00:56:56.22ID:+n99AGjS
> だから、シェルスクリプトがいい/Makefile使うなwと言ってるのはお前だけだって。

だからなんなんだろう?

技術の話をせーや
俺はシェルスクリプトの話をして、シェルスクリプトの方が優れてると言ってる
お前の反論は、そんなこと言ってるのはお前だ!で
技術的な話が全く入ってない
0355デフォルトの名無しさん垢版2021/04/06(火) 01:05:48.82ID:WV1MWJne
> そして「それなら好きなのを使えばいいよ」はあくまでも否定してる文のつもりかよ
そして「それなら好きなのを使えばいいよ」に対しては あくまでも否定してる文のつもりかよ
だよ。そう読んだか。わかると思うんだがなあ、まあ、なんかすまん
>あんな短文を分けて肯定否定してるなんて、わかりづらい
文を書いたのはお前な、お前の責もあるのは当然だろう。元文を書いた人は何にも関係ないぞ、関係ないのは明らかだろうに、あんなわかりやすいw文
0357デフォルトの名無しさん垢版2021/04/06(火) 01:08:02.78ID:+n99AGjS
× そして「それなら好きなのを使えばいいよ」はあくまでも否定してる文のつもりかよ
○ そして「それなら好きなのを使えばいいよ」に対しては あくまでも否定してる文のつもりかよ

↑文を書いたのはお前だろw
まず自分の責任を認めろ
0358デフォルトの名無しさん垢版2021/04/06(火) 01:09:30.57ID:+n99AGjS
>>356
こんな簡単なこともわかってないのか?

シェルスクリプトの話をしろと言ってるのは
シェルスクリプトのコードとMakefileのコードの
比較の話をしろって意味だよ

>>351にコードなんて一つも書いてないだろ
ああ、言い訳はいい。
次のレスは「最後の一文」ではなくコードを書け
0359デフォルトの名無しさん垢版2021/04/06(火) 01:11:42.44ID:WV1MWJne
>そう読んだか。わかると思うんだがなあ、まあ、なんかすまん
わざわざ×○整形してるくせに、次のは読まないんだな
チャンピオンとしては受け取れないのか...w

>>358
すでにされてることを何で繰り返さなければならないのか
お前のルールなんて知らんwオレオレルール押し付けすぎだろう
0361デフォルトの名無しさん垢版2021/04/06(火) 01:13:32.15ID:+n99AGjS
反論がないからもう一度書くね

タスクランナーとして使う場合、依存しているファイルがないので
Makefileで使える部分は

task:

↑これだけなんだよ

そしてtaskの中身は、コマンドを羅列するか
シェルスクリプトを"エスケープして"埋め込むことだけ

task: であれば
task() { と書いても数文字増える程度で大差なく、

一番重要なタスクの処理は、

task() {
 ここにコマンドやシェルスクリプトを
 エスケープせずにそのまま書けるというメリットが有る
}

もちろん task 関数を書いただけじゃ呼び出せないから
それをシェルスクリプトでは呼び出すコードが必要

あー、それがオレオレロジックなんだーって言うかもしれないが
それは>>287に書いた通り

# お前に必要なmakeコマンドの実装
for target; do "$target"; done

たったこれだけ
0362デフォルトの名無しさん垢版2021/04/06(火) 01:16:39.85ID:WV1MWJne
カオス化がまた一層酷くになったwので、>>351の最後を繰り返すだけだぞ
続けて欲しい、技術的な話をしたいwだったら変わってみような
(そういえばチャンピオンのもう一つの武器は繰り返し言い張るだな
俺の繰り返し言い張りwも受けてみてほしいものだw)
0364デフォルトの名無しさん垢版2021/04/06(火) 01:21:16.72ID:WV1MWJne
「しない」という選択肢もあるんだよ。自覚も何も「わざと」なw
だから、そのカオスの原因を直しなさいよ、「してほしい」wなら
0365デフォルトの名無しさん垢版2021/04/06(火) 01:32:38.75ID:TYYwd7pV
>>335
シェルスクリプトでコマンドライン引数処理をするよりも、makefileにhelpターゲットを追加するほうが億倍ラクやで?
複雑になるのはシェルスクリプトのほうや。w
0366デフォルトの名無しさん垢版2021/04/06(火) 01:37:47.42ID:TYYwd7pV
>>361
前にあったprepareタスクのような、フローの合理化が、シェルスクリプトでは面倒。
&でbg処理したらええというもんではない。そもそも、並列実行していいかどうかも未定義やし。

まあ、それがプログラムとしてはふつうなんやけど、makeに比べると、makefileがルールとして記述するだけやから、そりゃあかなわんわなあ。w
0367デフォルトの名無しさん垢版2021/04/06(火) 01:39:22.54ID:bGyEcdYQ
億倍ww
シレっと煽るねえ(もしくはウィット入れるねえ)
だが、チャンピオンには通じないぞ、マジでそう受け取るぞw
0369デフォルトの名無しさん垢版2021/04/06(火) 05:35:04.17ID:MTiaA6bM
>>365
> シェルスクリプトでコマンドライン引数処理をするよりも、makefileにhelpターゲットを追加するほうが億倍ラクやで?
億倍ラクになるかやってみたら?

じゃあmake.sh版。makefile版よろしくw

#!/bin/sh
target1() { # ターゲット1
 echo "target1"
}
help() { # ヘルプ表示
 sed -n 's/('') {//p' "$0"
}
for target; do "$target"; done

$ ./make.sh help
target1 # ターゲット1
help # ヘルプ表示

(やる前から同じように書けるはずだって気づかないもんですかねぇ)
0370デフォルトの名無しさん垢版2021/04/06(火) 05:40:09.71ID:MTiaA6bM
>>366
> 前にあったprepareタスクのような、フローの合理化が、シェルスクリプトでは面倒。
何が面倒かが書いてない

> &でbg処理したらええというもんではない。
ええというもんではない当理由が書いてない

> そもそも、並列実行していいかどうかも未定義やし。
それはmakeも同じ。makeの並列実行に夢見すぎじゃね?w

Does “make -j” always produce correct result?
https://stackoverflow.com/questions/45453225/does-make-j-always-produce-correct-result
> 依存関係が正しく設定されていないと、間違った順序で処理が行われ、
> ビルドエラーが発生する可能性があります。make通常、複数回実行すると解決します。
> ただし、最善の解決策は、依存関係をリファクタリングすることです。
> それが不可能な場合は、最初から並列makeを実行しないでください。

> 私は古いgccベースのコンパイラ(?1997)を使用していますが、-j2以上でビルドすると、
> スレッドセーフではないかのようにエラーが発生します。

Installation using "make -j" error
https://github.com/espnet/espnet/issues/392

error when run "make -j 12"
https://github.com/google/ihmehimmeli/issues/2
0371デフォルトの名無しさん垢版2021/04/06(火) 05:42:39.64ID:MTiaA6bM
>>367
> だが、チャンピオンには通じないぞ、マジでそう受け取るぞw
安心しろ。億倍はネタだとわかってるぞ
でも数行増えてしまうと考えてるんだろう
実際には0倍だっただけどな
0372デフォルトの名無しさん垢版2021/04/06(火) 07:06:03.54ID:dc8Xc+ex
>例えばシェルスクリプトなら--helpして分かりやすいusageが
--helpじゃないのか
シェルスクリプトに拘ってるのにスタイルは簡単に捨てるのか
make help
は、それもスタイルだからな。何でもアリなら、何でもアリでええやん
0374デフォルトの名無しさん垢版2021/04/06(火) 07:34:25.05ID:dc8Xc+ex
言われたら対応してるだけだな
--target1
は、許すんだな。まさかそんな小手先で来ると思わなかったぞw
何でもアリに変わりないやん
0375デフォルトの名無しさん垢版2021/04/06(火) 07:48:24.00ID:dc8Xc+ex
自分の目的なら色々自分スタイルでいいと自ら自己紹介してるのに、他の人がするのは絶対許さないというカオスぶり(というより単に自己中かw)
やっぱりカオスだな、技術的なことwは無駄だなと思わせるだけだなっていう
0377デフォルトの名無しさん垢版2021/04/06(火) 08:38:17.44ID:dc8Xc+ex
「一貫性のないのや何もわかってない理解してなさそうなのに」偉そうに振る舞うのに「一貫性のないのや何もわかってない理解してなさそうなのに」部分にヤジ入れてる感想入れてるwだけだな
自分が気に食わないってしか捉えられないお前の思考が浅い(すぐ上のでも顕著なようにw全てに言える)だけだな
まあ単にそう貶めたいだけなんだろうけど、チャンピオンとしては
0378デフォルトの名無しさん垢版2021/04/06(火) 08:41:47.63ID:MTiaA6bM
一貫性がないとかいう主張の中身が、お前が気にいるかどうかでしかない
例えば、git helpでgit --helpと同じヘルプが表示される
0379デフォルトの名無しさん垢版2021/04/06(火) 08:47:35.34ID:dc8Xc+ex
--helpってお前が言い出してるんだけどな
--helptってお前自身そう思ってたくせに
そういう一貫性だよ、お前自身のな

ちなみに、git helpのはhelpが「gitのコマンド」だからだぞ
なんか残念でしたwと思わないこともない
0380デフォルトの名無しさん垢版2021/04/06(火) 08:48:45.39ID:MTiaA6bM
docker helpやgcloudもだな。
サブコマンド系は--helpがhelpサブコマンドになってるのはよくありそう
(実装者の立場で考えるとそれが合理的なのは理解できる)
0381デフォルトの名無しさん垢版2021/04/06(火) 08:50:17.32ID:MTiaA6bM
>>379
つまりお前は「俺に文句を言ってる」だけで
--helpでもhelpでも「コードは問題ない」って言ってるじゃん

お前一体何と戦ってんの?コードじゃなくて俺だよねw
0382デフォルトの名無しさん垢版2021/04/06(火) 08:51:43.12ID:MTiaA6bM
> ちなみに、git helpのはhelpが「gitのコマンド」だからだぞ

--helpがhelpコマンドへ転送されるのはよくある実装だから
>>373でそうしたよね?
0383デフォルトの名無しさん垢版2021/04/06(火) 08:53:36.32ID:dc8Xc+ex
なんか一生懸命探してんな、今更
なんか一生懸命辻褄あわせしようとしてる感じでしかないなあ。いつものw

戦うwwwさすがチャンピオン。>>377って言ってるのに、いつも戦ってるチャンピオンは、ホントにもうw
0386デフォルトの名無しさん垢版2021/04/06(火) 09:04:16.76ID:dc8Xc+ex
>>382
>--target1
>は、許すんだな
は?
そういう見え透いたカオスなこと言うんだから、チャンピオンは
なんかhelp(プログラムでのコマンドがある場合)ではしゃいでるwようだけど、自己都合でしかないよw

>>385
何言ってるの?>>377って言ってるでしょ
当然お前だよ。ただし「気に食わない」とか「戦う」じゃないよ。理解できないの?
0387デフォルトの名無しさん垢版2021/04/06(火) 09:10:08.38ID:MTiaA6bM
それでコードに問題あるの?問題ないの?
その解決策は自分で思いつけないの?
いいからコードの話をしなよw
0390デフォルトの名無しさん垢版2021/04/06(火) 09:18:50.92ID:MTiaA6bM
質問に質問で返す人の心理について
https://mental-kyoka.com/archives/6137

> しかし、聞かれたくない事を聞かれている不快感を放置することができず、
> 婉曲的ではありますが質問に質問で返すという行為により
> 「その質問の内容は不愉快だからやめてくれない?」と暗に
> 伝えているのだと考えることもできます。
> いわば、「逆ギレ」の一種と表現するのが適当かもしれません。

> また、後述するように逆に質問する行為がうまく行き、
> 会話の主導権を自分が握ることができれば、
> 今度は自分が相手に質問責めをして、今まで受けてきた
> 質問に対する鬱憤を晴らすことも可能です。

なるほど
0391デフォルトの名無しさん垢版2021/04/06(火) 09:19:45.59ID:dc8Xc+ex
ここ大事だから。お前から聞いてきたんだから、お前が自ら答える責もあるだろう
ホント、自分は例外だな。いつものことだが

もちろんお前(に限らず)がそうしようがお前の勝手だから問題だとは思わんよ
他人のやり方にアレコレダメ出しするお前はどう答えるのか当然先に聴きたくなるのは当たり前じゃん
馬鹿な墓穴掘り質問だから尚更wいつもの浅知恵レスだから尚更尚更、質問したくなるじゃん
0394デフォルトの名無しさん垢版2021/04/06(火) 09:20:55.48ID:MTiaA6bM
ではもう一回聞くね

それでコードに問題あるの?問題ないの?
その解決策は自分で思いつけないの?
いいからコードの話をしなよw
0398デフォルトの名無しさん垢版2021/04/06(火) 09:28:37.03ID:MTiaA6bM
コードに問題はないよ

で、お前はコードに問題あると思ってるの?問題ないと思ってるの?
その解決策は自分で思いつけないの?
いいからコードの話をしなよw

俺はもう答えたからねw
0399デフォルトの名無しさん垢版2021/04/06(火) 09:31:53.66ID:dc8Xc+ex
答えてるんですけど
お前が戦う姿勢なのはいいが、ちゃんと読んでくれなきゃ、ずっこけるだけですよw

コードに問題なければいいなら、Makefileで問題なければいいってことになるだろうに
自分だけは例外は許されへんな
0401デフォルトの名無しさん垢版2021/04/06(火) 09:34:52.15ID:dc8Xc+ex
何でそんなに偉そうなんだかなwww
>>391
>もちろんお前(に限らず)がそうしようがお前の勝手だから問題だとは思わんよ
0403デフォルトの名無しさん垢版2021/04/06(火) 09:35:55.88ID:MTiaA6bM
>>401
コードに問題があるか、コードに問題ないか、答えてないよね
コードに問題あるかどうかは言わずに、
それでいいよって言ってるだけだよ
0405デフォルトの名無しさん垢版2021/04/06(火) 09:37:44.50ID:MTiaA6bM
コードに問題がある or 問題がない・・・これはコードの問題
お前がそれでいいと思うならそうなんだろうな・・・これはコードではなく俺の話
0406デフォルトの名無しさん垢版2021/04/06(火) 09:38:03.38ID:MTiaA6bM
訂正

コードに問題がある or 問題がない・・・これはコードの話
お前がそれでいいと思うならそうなんだろうな・・・これはコードではなく俺の話
0407デフォルトの名無しさん垢版2021/04/06(火) 09:43:24.15ID:dc8Xc+ex
変な浅知恵でサイト探してからおかしいぞ
大丈夫か?w
クールダウンタイム必要か?

お前が、コードに「問題あるの?問題ないの?」のって聞いてきてるんだから、「問題だとは思わん」が答えになってるだろうに
何をおっしゃってるんですか。マジ大丈夫ですか?

「お前が」「他人のに」「ダメ出ししてるのが」アホみたいなながーいやり取りになる(俺だけではないのは上の方でも)主要因なのに、(Makefileでの利点をいまだに理解しようとしないのは置いておいても)何を自分ので問題ないでしょなんておっしゃってるんですか
カオスw
0410デフォルトの名無しさん垢版2021/04/06(火) 09:49:39.74ID:MTiaA6bM
Makefileでの利点はタスクランナーじゃなくて
依存ファイルに基づいて何かを処理するのが得意ってことだよ
タスクランナーとしてならシェルスクリプトの方が得意だって最初に言ったじゃん
0411デフォルトの名無しさん垢版2021/04/06(火) 09:49:55.09ID:7tHYoHIo
なに自分だけに都合が良いように誘導しようとしてんだか
そういう見え透いたのは、ホントにもうw浅知恵好きすぎだろう
矮小化した自分に都合に良いというちょっとナツいフレーズ

てか、結論は出てるだろう、なんか必死で逃げようとはしてるけど
コードに問題なければいいなら、Makefileで問題なければいいってこと
で終わること、とっくに終わってることだよ
0412デフォルトの名無しさん垢版2021/04/06(火) 09:52:24.42ID:7tHYoHIo
>>410
そう思わないのが居てもいいだろうに(居てもいいとお前自身がもう言ってしまってるようなもんだしなw)、何をそんなに拘って否定してんだか
(Makefileでの利点はお前は今も理解できないのはもうしょうがないとしても)
0413デフォルトの名無しさん垢版2021/04/06(火) 09:53:19.77ID:MTiaA6bM
>>411
> コードに問題なければいいなら、Makefileで問題なければいいってこと

シェルスクリプトのコードに問題なければいいなら、Makefileで問題なければいいってこと
ってどういう意味?

シェルスクリプトのコードに問題ないなら
シェルスクリプトのコードでいいでしょ?
0415デフォルトの名無しさん垢版2021/04/06(火) 09:56:33.41ID:7tHYoHIo
浅知恵はすぐ働くくせに、少しは頭をちゃんと使おうな
コードに問題なければ と言い出したのはなぜか自問してみ

自分の都合の良いだけの良い張り繰り返しだなw
0416デフォルトの名無しさん垢版2021/04/06(火) 09:57:37.45ID:MTiaA6bM
シェルスクリプトのコードが問題なければ
>>369のmake.shで問題ないという結論になる

それだけのことだと思うが?
0418デフォルトの名無しさん垢版2021/04/06(火) 09:58:49.67ID:MTiaA6bM
すでに出てるものは全て否定したんで
その結果>>369のシェルスクリプトのコードになったんだよ
話の流れを理解してないようだね
0419デフォルトの名無しさん垢版2021/04/06(火) 10:01:54.70ID:TYYwd7pV
>>369
シェルスクリプトのオプションの話をしてたはずなのに、ただのターゲットに変えるとか、コスいことすんな!w

ちなみにもともとは、makefileでは「タスク表示」ができない、って不当なクレームがあっただけの話やったもよう。
おまえ、忘れてるやろ?w
0420デフォルトの名無しさん垢版2021/04/06(火) 10:02:58.82ID:7tHYoHIo
>>416
>「お前が」「他人のに」「ダメ出ししてるのが」アホみたいなながーいやり取りになる(俺だけではないのは上の方でも)主要因

>コードに問題なければいいなら、Makefileで問題なければいいってこと
>で終わること、とっくに終わってることだよ

お前のの良し悪しなんて本筋とは関係ない、なぜなら、お前が拘ってるのは他人の(Makefile使うな)に対してだろうに

>>418
否定してると思い込んでるのはお前だけだぞ。浅知恵でのでしかないからなw
0423デフォルトの名無しさん垢版2021/04/06(火) 10:04:01.45ID:MTiaA6bM
> なぜなら、お前が拘ってるのは他人の(Makefile使うな)に対してだろうに
何の話ですか?そんな話はどのレスでもしてませんよ
0425デフォルトの名無しさん垢版2021/04/06(火) 10:05:07.70ID:MTiaA6bM
>>419
> ちなみにもともとは、makefileでは「タスク表示」ができない、って不当なクレームがあっただけの話やったもよう。

はい、自分で作らないとできませんよね?
間違ってますか?
0426デフォルトの名無しさん垢版2021/04/06(火) 10:08:05.69ID:7tHYoHIo
何を言ってるんだかなあ
今まで散々Makefileなんて使わないでシェルスクリプトでいいだろう(シェルスクリプト書けないのwとかさえ)と、Makefileいいよって言っている人に突っかかってたくせに

ね、
>おまえ、忘れてるやろ?w
いつものしょっちゅうやってることだけどなww
0428デフォルトの名無しさん垢版2021/04/06(火) 10:09:12.04ID:MTiaA6bM
> Makefileいいよって言っている人に突っかかってたくせに

Makefileいいよって言ってる人は
どこのレスの話ですか?
0429デフォルトの名無しさん垢版2021/04/06(火) 10:10:37.68ID:7tHYoHIo
まさかmakeとか言うんじゃないだろうな、まさかな
何をおっしゃってるんですか、誤魔化すにも馬鹿すぎる誤魔化しすぎですよ
0430デフォルトの名無しさん垢版2021/04/06(火) 10:11:34.82ID:TYYwd7pV
>>370
並列実行させたくなければ、makeは-j 1するだけで充分合理的に実行されるんやで?

ところが、シェルスクリプトで>>298みたいなことしたら、かならず並列実行になるがな。w
prepareは重いっつってんのに全無視やし。w
おまえのほうがbgに夢見すぎやろ。w
0431デフォルトの名無しさん垢版2021/04/06(火) 10:11:54.30ID:MTiaA6bM
もしかしてこれ>>286ですか?

> >>265
> そんなんするくらいなら、makefileのほうが万倍マシやな!w
> makeと違って、個別ターゲットの指定もできないし。

先にシェルスクリプトのコードが否定されたわけですが
そのシェルスクリプトのコードは問題ないと同意が取れたんですが?
0433デフォルトの名無しさん垢版2021/04/06(火) 10:14:01.22ID:TYYwd7pV
あと、makeの-nとか-qとかのオプションを、シェルスクリプトで簡単にやる方法も頼むわ。
0435デフォルトの名無しさん垢版2021/04/06(火) 10:15:34.36ID:MTiaA6bM
>>370
> 並列実行させたくなければ、makeは-j 1するだけで充分合理的に実行されるんやで?
POSIXじゃないので実行できない場合があります

> ところが、シェルスクリプトで>>298みたいなことしたら、かならず並列実行になるがな。w
え?そんな話今はじめて出ましたよねw

並列実行したくないなら & を取るようにしましょう
0437デフォルトの名無しさん垢版2021/04/06(火) 10:19:48.49ID:MTiaA6bM
>>433
> あと、makeの-nとか-qとかのオプションを、シェルスクリプトで簡単にやる方法も頼むわ。
簡単だね

makeの-n
DRY_RUN=1
run() {
 if [ "$DRY_RUN" ]; then
  echo "$@"
 else
  "$@"
 fi
}
run hage hage

-qはタスクランナーとは関係ないな
依存関係があるものに関しては、シェルスクリプトからmakeを呼び出すっていいましたね
0439デフォルトの名無しさん垢版2021/04/06(火) 10:24:39.26ID:TYYwd7pV
>>435
> POSIXじゃないので実行できない場合があります
-jオプションの話を出したのはおまえちゃうの?w
まあ、ヤな環境は、捨てるか逃げるかしたらええで。

> え?そんな話今はじめて出ましたよねw
> 並列実行したくないなら & を取るようにしましょう
prepareが重いという前提を無視すんな。w
たとえばprepare1時間、task*は1分だとすると、makeなら1時間3分、シェルスクリプトなら3時間3分やな。。。

おまえは、本当にそれでええと思っとるんか?
0440デフォルトの名無しさん垢版2021/04/06(火) 10:29:29.37ID:TYYwd7pV
>>437
まさかそんなふつうかつめんどい対応を、全ターゲットにいちいちやったらなアカンのか。。。

おまえはシェルスクリプトを使う、ワイはmakeを使う。
もうそれでええな。
0443デフォルトの名無しさん垢版2021/04/06(火) 11:27:15.77ID:WaPRNDqz
>>442
なるほど
使い勝手がいいからちょこちょこ(リアルでもw)使うエセ関西人やけど、
「やったらな」ってムズいなと感じ、もしかしたらとちょっと興味が出ただけです
お答えありがとうございましたw
0446デフォルトの名無しさん垢版2021/04/10(土) 21:39:22.59ID:1S4Ftpl7
>>237
# シェルスクリプトマガジン vol.30
# POSIX原理主義の逆襲
url=$( echo '/M57C8NB70B/pd/koobe-哲寛仲當-03-lov-ンジガマトプリクスルェシ/pj.oc.nozama.www//:sptth' | rev )
/usr/bin/firefox "$url"
xdg-open "$url"
# /usr/bin/google-chrome "$url"
0449デフォルトの名無しさん垢版2021/04/11(日) 13:26:48.64ID:kxus16p0
>>250
デスクトップ向けlinuxだと4KiBくらい貯めるのかな
改行のありなしやら入出力がターミナルかやら(test -t)で決めてるみたい?
tr -d \\nで改行絞った小さなテキストが延々と出てこなかったりするな
何が起きてるのか正直分からん
0451デフォルトの名無しさん垢版2021/04/14(水) 19:37:11.29ID:35zwdl55
> ・csh/tcshでのシェルスクリプトは*まったく推奨しません*

マジだった。ちょっと興味本位でやってみたら
変数に改行を入れようとしただけで力尽きるとは思わなかったわw
0452デフォルトの名無しさん垢版2021/04/15(木) 03:22:43.97ID:06Qz2l+r
>>2の最後の行、ゆうなって馬鹿みたいだから正しい言葉遣いに直してほしいなぁと思うのは私だけ?
0455デフォルトの名無しさん垢版2021/04/15(木) 10:26:01.70ID:CT+ncMKm
半分ネタやろ。
どうでもええわ。

どうしてもイヤなら、次スレを自分でたてて直せ。
0457デフォルトの名無しさん垢版2021/04/15(木) 11:49:33.19ID:CT+ncMKm
$SHELLOPTSに「interactive-comments」と入ってるんだけど、これは何?
man bashには記述がない。。。
0460デフォルトの名無しさん垢版2021/04/15(木) 13:42:52.38ID:EYZytY4L
>>456
あざっす
システムプログラミングアレルギー(manで2/3出てきたらそっ閉じ)なもんで…

sedとか-u(unbufferd )オプション付いてていいね、チョロチョロ出てくるのも想定してるんだろう
他はstdbuf効くならば試行錯誤って感じで凌いでるけど、もう腹括る時だろうか…
0461デフォルトの名無しさん垢版2021/04/15(木) 13:47:44.84ID:EYZytY4L
>>451
ちょうど'94年のcomp.lang.unixのfack読んでたとこだけどcshナウいぜって空気でノスタルジー
問題のリダイレクト関連は(入れ子)でサブプロセス内/外のリダイレクトを切り分け頑張るアンサーが面白かったです
0463デフォルトの名無しさん垢版2021/04/15(木) 14:02:10.00ID:ddLCV2xW
いまもcsh/tcsh使ってる人っているんだろうか?
shが神に見えるんだが
shからすれば、csh/tcshはcmdと同レベル
0464デフォルトの名無しさん垢版2021/04/15(木) 14:31:45.46ID:Hr/L3ezh
昔のshはそれはそれでクセがあったみたいだぞ、faqによると
誰もが一度は躓く
cmd |while ..
do change v
done
echo $v
問題ももっと酷くて、whileへ<inすらもアウトだった

そもそもリダイレクトはフォークする必要無いよね?バグみたいなもん?
なおパイプラインはフォークしてナンボなので合理的な設計だと思ってます
オプションlastpipe提供が現実的な妥協点かなと
0465462垢版2021/04/15(木) 14:33:04.56ID:Hr/L3ezh
です
0466デフォルトの名無しさん垢版2021/04/15(木) 14:42:31.76ID:gZ/E9OPr
>>460
ちなみに、
unbufferdだけでいいんじゃあって場合、
setbuf -o0 command1 | setbuf -o0 command2 | command3
setbuf -o0 command4 | command5
...
でなくて、冒頭で、
export LD_PRELOAD='/your/location/libstdbuf.so'
export _STDBUF_O=0
ってすると、以下外部コマンドは全て setbuf -o0 をすることになる
0467デフォルトの名無しさん垢版2021/04/15(木) 14:56:50.94ID:Hr/L3ezh
>>466
環境変数という手があったか
(いざ困るまでは)もちろんバッファはあった方が良いので、exportするスクリプトを書くと親からうっかりsourceしてしまいそうで…

env/インライン代入 パイプライン
にしといた方が安全そうですかね?
0468デフォルトの名無しさん垢版2021/04/15(木) 15:03:30.09ID:Hr/L3ezh
そもそもsourceしまくるのがお行儀悪いから、そっちを控えるべしなのかな?
何でもシェル関数にしてそれをソースしまくるパッケージを入れてしまって、bash -xオプション付けると何か操作する度に画面が数ページ流れてうんざりした経験が…
0469デフォルトの名無しさん垢版2021/04/15(木) 15:41:44.39ID:CT+ncMKm
>>458
ども。
探し直したよ。
あー、$SHELLOPTSではハイフンだけど、manページだとアンダーバーになってんな。。。
0471デフォルトの名無しさん垢版2021/04/15(木) 19:33:19.08ID:hKlH1+Q2
>>467
>env/インライン代入 パイプライン
stdbufを使うのと変わらないんじゃない
使うの局所化したいんだったら ( ) でサブシェルにするとかかな
0472デフォルトの名無しさん垢版2021/04/17(土) 05:11:50.36ID:YdwasajV
>>446
URL=$( echo '/swenybb/ten.hc5.enildaeh//:sptth' | rev )
TMP_DIR=~/tmp/5ch; DOC=${TMP_DIR}/index.php; mkdir -p ${TMP_DIR}
wget --output-document=${DOC} ${URL} || exit 1
iconv -c -f Shift_JIS -t utf-8 ${DOC} \
| grep '2021' | awk -F '</a> <br>' '{print $1}' \
| awk -F '</font>]' '{print $2}' > "~/Documents/5ch_dv.txt"
i=1; while true; do
cut --bytes=1-210 "~/Documents/5ch_dv.txt" | shuf -n 2; sleep 10; done
0473デフォルトの名無しさん垢版2021/04/17(土) 19:55:09.09ID:woV5WRvk
URL=$( echo 'fdr.wkwen/ssr/pj.en.oog.hcraes//:sptth' | rev )
TMP_DIR=~/tmp/goo; DOC=${TMP_DIR}/index.php; mkdir -p ${TMP_DIR}
wget --output-document=${DOC} ${URL} || exit 1
iconv -c -f utf-8 -t utf-8 ${DOC} | grep -v 'gooウェブ検索 急上昇ワード' \
| grep 'title' | awk -F '<title>' '{print $2}' \
| awk -F '</title>' '{print $1}' >> "$HOME/Documents/goo_web.txt"
while read KEYWORD; do
URL=$( echo '=yreuq_hcraes?stluser/moc.ebutuoy.www//:sptth' | rev )""$KEYWORD""
firefox "$URL"; sleep $( shuf -i 10-21 -n 1 )
done < "$HOME/Documents/goo_web.txt"
0475terai垢版2021/04/27(火) 17:28:08.57ID:K85aNu+Y
Linux(CentOS7)からsshで192.168.1.50(windows)に接続して、grepでD:\samba-backup\tmpの中を探して、
"bk-日付.tar"という名前のファイルがあれば"backup = O"、なければ"backup = O"と表示されるようにしたいと思い以下のようにシェルスクリプトを書きました。
if expect -c "
set timeout 5
spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\samba-backup\\tmp
expect \"password\"
send \"パスワード\n\"
expect eof
exit
"|grep "bk-$(日付).tar"
then echo "backup = O"
else echo "backup = X"
fi
実行すると"backup = O"と表示されると思ったのですが、"backup = X"と表示されます。tmpフォルダには"bk-日付.tar"という名前のファイルが確かに置いてあります。どうすれば"backup = O"と表示されるようになるのか教えてください。よろしくお願いいたします。
0476デフォルトの名無しさん垢版2021/04/27(火) 21:13:37.71ID:veDN2Ote
複雑な問題は複数のより単純な問題に分割すればいいんじゃないかな
まずは expect だけ実行して何が出力されるかみるところから始めなよ
0477デフォルトの名無しさん垢版2021/04/27(火) 22:41:50.05ID:1A6wmpHM
batの問題じゃないの
0478デフォルトの名無しさん垢版2021/04/28(水) 06:11:06.05ID:M5uDUSOh
"|grep "bk-$(日付).tar"
tmpフォルダには、"bk-日付.tar"という名前のファイルが確かに置いてあります

この「日付」って、日本語を使っているの?
基本的に、半角英数字・ascii 以外は、動かないのでは?

日本語には、CP932・UTF-8/16/32 の4つのエンコードがあって、
各OS・ファイルシステム・端末の入出力によって異なるから
0479デフォルトの名無しさん垢版2021/04/28(水) 06:38:05.23ID:xybfukyI
中途半端の知識。自分が詳しいつもりになってそう。
素人同然だから1から勉強してね
0480478垢版2021/04/28(水) 06:50:30.51ID:M5uDUSOh
そもそも、Linux から、cmd とか、Windows のコマンドを呼べるの?
Remote Login してるの?

PuTTY, TeraTerm, VSCode のRemote SSH などを使えば?
0482terai垢版2021/04/28(水) 10:22:09.08ID:D1qJru6v
spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\samba-backup\\tmp
のところを
spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\\\samba-backup\\\\tmp
にしたらうまくいきました。ご迷惑をおかけしました。
0483478垢版2021/04/28(水) 10:55:25.45ID:M5uDUSOh
例えば、Windows 10, WSL2, Ubuntu 18.04, Ruby では、
Linux 側から、Windows側のC ドライブへアクセスできる

パス区切りも、/ を使える。
\ では、各端末でのエスケープを考慮しなければならないので、非常に難しい

Dir.glob( '/mnt/c/Users/Owner/Documents/test/**/*.txt' ) do | full_path |
next if File.directory? full_path # ファイルだけを処理する

p full_path
end
0484デフォルトの名無しさん垢版2021/04/28(水) 11:50:29.51ID:Ttx7vHwT
sshを使うなら、ええかげんにexpectなんかせんでもええようにしたほうがええんちゃう?
鍵ファイルを使えば。
0485478垢版2021/04/28(水) 12:15:20.00ID:M5uDUSOh
Ruby にも、expect モジュールがある
0488デフォルトの名無しさん垢版2021/04/28(水) 18:13:04.67ID:xybfukyI
ファイルの中に書いたマーカーの中に別のファイルを挿入するにはどうしたらいい?
例えばこんな感じのファイルがあったとして、<marker>〜</marker>の中身を
別のファイルに入れ替えたい。posixコマンドだけで

aaa
bbb
<marker>
ccc
ddd
</marker>
eee
fff
0491デフォルトの名無しさん垢版2021/04/28(水) 18:46:45.34ID:xybfukyI
C言語でもどんな言語でも書けるというだけのことなら
私も知ってますが・・・
0494デフォルトの名無しさん垢版2021/04/28(水) 19:02:11.38ID:snsrMSzN
csplitで2回割って3つに、真ん中を捨てcatを想定したが、regexで割れるので<marker>...</marker>を指定して一回で割った方が素直かもしらん
ファイル内に複数回マークアップが現れる時も、マークアップ+1個に割れるのでスケーラブル
0495デフォルトの名無しさん垢版2021/04/28(水) 19:11:21.62ID:xybfukyI
ファイルに複数回現れるのは想定してませんでしたが
その場合は全部置き換えたいです

中間ファイルを作るのは一時的であっても
想定してないファイルができるので避けたいです
0496デフォルトの名無しさん垢版2021/04/28(水) 19:14:50.05ID:mi6bhbk3
>>491
awk で、
行単位で出力制御できる、フラグなども自由に作れる使える
標準入力以外の入力ソースから読める
って、材料あるんだから簡単にできるだろ
>>479って言ってるのに、何、>>491とか言ってるんだかw
0497デフォルトの名無しさん垢版2021/04/28(水) 19:19:23.15ID:snsrMSzN
じゃあsedとかでいいんじゃね、行志向だとフラグ立てる必要があるので面倒だから、一時的にtrで改行を変な文字に置換して一行扱いすると楽
複数回マークアップするなら、非貪欲マッチの為に終わりマーカーを^指定するのを忘れないでね、念の為
0500デフォルトの名無しさん垢版2021/05/01(土) 16:16:25.77ID:R5WysE71
今日の発見

何気なく LANG=C の状態で man ping をやったら日本語マニュアルでは出て来なかった -a を発見。
しかし、 "Audible ping. " ってなんだろうと思い、 -a を付けて ping をやってみるが -a なしと違いはない。
何だろうと散々悩んでまさか本当に音が出るのではと思い、ヘッドホンを指して聞いてみたら BEEP 音が出ていた。
(端末に Ctrl+G の出力しているだけの模様)。

これは普通の状態で音が出るようになってないと使えない(というか分からない)機能だな。
ていうか、この機能って需要あるのか? どういう時に使うんだ? (耳は聞こえるけど目が見えない人向け?)
0501デフォルトの名無しさん垢版2021/05/01(土) 16:29:28.92ID:djtwQ/hU
システム言語英語にしてるから気づかなかった
0503デフォルトの名無しさん垢版2021/05/01(土) 17:12:17.40ID:/E4OYG0J
>>500
https://lab.kuas.ac.jp/~ippei94da/unixtodaystips/index.html#%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E5%B0%8E%E9%80%9A%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF
まあ、本気でやるならスクリプトを書くところやけど、ちょろっと待ったり確認したりするだけなら?
0504デフォルトの名無しさん垢版2021/05/01(土) 17:24:56.48ID:qPtffzbe
まあBEEPだと鳴るにしても、あんまり便利じゃないから、bellってスクリプトつくって、mpg123で小さなサウンドファイル鳴らしてたなーw
時間のかかる処理動かすときに、;bellとかやってたわw
0505デフォルトの名無しさん垢版2021/05/01(土) 20:54:25.86ID:mMPVMQKF
>>500
日本語マニュアルは古いからな
Ubuntu 20.04のbashのマニュアルなんか
英語版は当然bashのバージョンと同じ5.0(2018年)のマニュアルが入ってるが
日本語版だと4.2(2010年)のやつだからな

あとpingに音がなる機能は便利だぞ
pingで音を鳴らしながら断線チェックするんだよ
断線しかかってるケーブルがあれば触った時に音がなったり止まったりするだろ
一人がディスプレイの前にいて「あ!そのケーブル触ったときに繋がりました!」
なんて叫ぶ必要がなくなるから、一人でも作業できる
0508デフォルトの名無しさん垢版2021/05/01(土) 22:42:41.06ID:mMPVMQKF
軍人は卓球が好きだったんか?
0510デフォルトの名無しさん垢版2021/05/01(土) 22:56:49.66ID:oDxNWiQE
軍関係者、それも技術者研究者ならそんなナワバリとか無いんじゃね
陸軍でも海軍のそういうのは知ってはいるだろう一般知識的な
事故死で亡くなってるのね。世界的貢献度が高いし有名だから残してもいるのかな
0511デフォルトの名無しさん垢版2021/05/01(土) 22:59:35.67ID:oDxNWiQE
>>508
全然関係ないぞ、ソナーのって書いてるじゃん?
冷戦時潜水艦戦な小説読めばわかるぞ
まあ、ボケなんだろうけど
0512デフォルトの名無しさん垢版2021/05/02(日) 00:08:11.78ID:r2Ed4Ypi
>>505
ナルほどナルほどw確かに便利だねw
昔、ネットワークエンジニアやってた時を思い出してほのぼのしてしまったw
0515デフォルトの名無しさん垢版2021/05/09(日) 03:33:23.42ID:DzKdtz/a
ほんとこの人酷いわ。関わりたくないからここで書くけど
バカにされてる事にも気づかないでしゃしゃり出てきてこのセリフ

https://twitter.com/col_richie/status/1390912236181364737
> 何を隠そう私こそPOSIX原理主義者。
>
> 「藪医者」の語源(の一説)が面白いので紹介しておきたい。
>
> 藪医者とは、高価な薬が買えずに藪から薬草に使えそうな草を見繕って患者に与えていた医者のことだという。
>
> つまり適当にライブラリーを拾って解決を図るプログラマーは藪医者同然ということになる。

じゃあ藪医者ではない凄腕の医者は自分で薬を作ってるのか?
お前だって自分で作らずにPOSIXコマンドを使って解決してるだけだろ
他人の成果を利用してるだけのくせに自分で何も作らずに主義だけでマウント取ろうとするな
藪医者の語源を自分の主義を正当化するために曲解して利用するな
まさにPOSIX"原理"主義者だと思うわ

https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%AA%E3%82%B9%E3%83%88%E6%95%99%E5%8E%9F%E7%90%86%E4%B8%BB%E7%BE%A9
> キリスト教原理主義(キリストきょうげんりしゅぎ、英語: Christian fundamentalism)とは、
> 特にアメリカ合衆国で聖書の教えを硬直的、新興宗教的に歪曲するキリスト教右派、キリスト教根本主義、
> キリスト教会とその教派に向けて使用される。非難、侮蔑の意味合いを持って使用される場合も多い。

https://twitter.com/takapon_jp/status/9068335656
> 原理主義者はやはりイスラム原理主義者も捕鯨反対原理主義者も
> 正義原理主義者の検察もみんな頑固だから、
> 色んな曲解をしながら原理主義の姿勢を崩さない。
> だからこその原理主義者なんだろうが。。。というわけでもう、寝る。

お前が言う交換可能性とかPOSIXでは一切言われていない
POSIXの教えとは無関係なのにPOSIX原理主義者
POSIXという言葉と成果を利用してるだけ
https://twitter.com/5chan_nel (5ch newer account)
0518デフォルトの名無しさん垢版2021/05/09(日) 18:58:58.35ID:QngfRO5p
やぶ医者 語源 でぐぐったら一番最初にこれが出てきてワロタw
https://www.kanken.or.jp/kanken/kankantown/trivia/trivia2.html

治療や診断が下手な医者を「藪医者」と言うが、草木が生い茂った「藪」とは直接関係なく、
もともとは「野巫(やぶ)」と書いたとされている。
「野巫」とは、まじないを使ったあやしげな治療しかできない田舎の医者のこと。
0520デフォルトの名無しさん垢版2021/05/10(月) 09:00:19.42ID:m/v6xXVY
例えば微細化技術で消費電力半分になるんだがそのまま消費電力
半分にするかそれともトランジスタ2倍積むかって言われたら
今だったら(dashが必須だったような)組み込み用チップでも
後者をとってWebなりWifiの機能つけてメモリも潤沢になってる
だろうしなあ
0521デフォルトの名無しさん垢版2021/05/10(月) 09:42:46.16ID:Qz+CRcrD
>>520
選ぶとするならコスト削減になるほうじゃね?
同じコストで性能二倍になるなら
コスト半分にして同じ値段で前と同じ性能のものを売る
0522デフォルトの名無しさん垢版2021/05/10(月) 10:46:13.22ID:jJW0aId3
>>521
んな単純な話やないやろ。
パフォーマンス指向なら性能が高ければ高いほど売りやすいし、原価比率が小さければ下げたところでたいした儲けにならんし、結局、モノにもよるし経営判断にもよる。

つーか、何の話や?w
0523デフォルトの名無しさん垢版2021/05/10(月) 14:41:26.23ID:/CC3l5IU
Debianとかパフォーマンスが理由?でdashに変わったけど
今後これが将来bashに変わることってあると思う?
俺はもう無いと思うんだよね
性能的にはbashで良くなったとしても
互換性を理由にPOSIXに縛られちゃった
0525デフォルトの名無しさん垢版2021/05/10(月) 18:43:12.00ID:hErX5Z2R
Ubuntuでのことがあったから
まあしょうがないってことだな、ああいうプロダクトでは
bashismもそれでわかったくらいな、いいとか言う話ではないな

その後のUbuntuでもPOSIX縛りではないからな
まあPOSIXでも書けるならPOSIX準拠にするだろうけど、ああいうプロダクトでは
0527デフォルトの名無しさん垢版2021/05/10(月) 19:47:37.47ID:hErX5Z2R
しばらくbashだったがdashに変えた。bashのPOSIXモードで動くように書いてたのに動かないやんけっていう
bashism問題に当たった最初のそれなりのスクリプトの数があるプロダクトがUbuntuじゃないのかな
もしくはちゃんと文書化して残したプロダクトかもだが
0530デフォルトの名無しさん垢版2021/05/10(月) 20:11:08.73ID:hErX5Z2R
>>523,524 がそもそも何か勘違いしてるだけだな
(>>528も。普段はインタラクティブでdashなんて使ってるのか?)

bashの時でも「ああいう」スクリプトはPOSIX(/bin/sh)準拠で書いてたからな
別に誰も #!/bin/sh でしか書くなとは言ってないだろう。ただなんとなくかそうした方がいい程度だなw
(なんか絶対にとか言う変なのは居るけど)
必要ならbashでもzshでもなんでも好きに書けばよろしい、シバンを適切にしてればいいことだな
0531デフォルトの名無しさん垢版2021/05/10(月) 20:19:30.27ID:aEtJHiO8
/bin/shがdashへのリンクになってるだけ
UbuntuでもDebianでもデフォルトのログインシェルはbash
上でも言われてる通りbashなりの拡張機能を使いたいならシバンをちゃんと設定すればいい話でしょ
0532デフォルトの名無しさん垢版2021/05/10(月) 20:29:43.61ID:hErX5Z2R
なってるだけが起因なんだがな
というより、bashもなってるだけでもあったろうが、GNUは変なとこで拘るからなあ。素直にPOSIXモードならPOSIX準拠にしていればいいようなもんなのに
なんか他のPOSIXのことでもオレオレの主張は曲げない独自にやるんだというのはあったな

GNU/Linuxはログインシェルはどのディストリでもbashだろうな
変わったディストリはあるかもしれないが
FreeBSDはtcsh、OpenBSDはkshみたいだな。macOSはzshか。BSD系は色々(歴史的に)ありそうだな
0533デフォルトの名無しさん垢版2021/05/11(火) 00:12:44.56ID:1enRFFJU
>>531
/bin/shがdashのリンクになってるだけという話じゃなくて
dashのリンクになっていてそれ以外に変更することはないだろうってことよ

>>532
> 素直にPOSIXモードならPOSIX準拠にしていればいいようなもんなのに
bashの場合POSIXモードにしていても非POSIXの機能が使えちゃうからね
/bin/shをbashにしてもPOSIX制限ができない
シバンを/bin/shにちゃんと設定してるのにPOSIXオンリーのシェルじゃないってのが問題
0535デフォルトの名無しさん垢版2021/05/11(火) 12:39:30.70ID:PU80Jyjy
極論だが古典的なシステムでは /bin/sh は POSIX 準拠でさえないんだから
POSIX 準拠厨はシェバンに #!/bin/dash って書くべき
0537デフォルトの名無しさん垢版2021/05/11(火) 13:12:35.75ID:ZJle8Vfo
dash用スクリプトを書くのにbashのデバッグ機能は必須(というほど大したもんでもないが…)
0538デフォルトの名無しさん垢版2021/05/11(火) 13:27:42.49ID:rqNaE/tz
>>535
今時の /bin/sh の最低限度がPOSIXなんだよ
POSIX以前の /bin/sh が現役(古いどころではないOSを無理に今でも使ってるではなく、現代的なOSでという意味での)なのはどこにあるの?
0539デフォルトの名無しさん垢版2021/05/11(火) 14:27:39.20ID:nf224V10
dashならPOSIX準拠、と信じてしまうのも、経緯的によろしくなさそうやけどなあ。

もうbashでもdashでも、#!に明記したほうがマシやろ。
あとから検索もしやすいし。
0541デフォルトの名無しさん垢版2021/05/12(水) 00:28:01.49ID:w4TAZAbA
>>539
スクリプトはPOSIXに準拠しており
POSIXシェルで動かすことを想定しているのだから
#!/bin/sh でいいだろ

実際に動かすシェルのことは知らん。そんなもん使う環境次第だろ。
スクリプトをmacOSにインストールするか、Debianにインストールするか、
その他のUNIXにインストールするか、そんなこと開発者が知ることなんてできない。
スクリプトがPOSIXシェルと言うだけの話。
0542デフォルトの名無しさん垢版2021/05/12(水) 00:34:31.14ID:1N3VwigT
>>538
bash じゃなくて dash を使わざるを得ないような極小環境で現役なものはどこにあるの?
正直 bash 拡張使って簡潔に書いたほうがRAMもROM/Storageも少ないんじゃないかと
さえ勘繰ってるわ
0543デフォルトの名無しさん垢版2021/05/12(水) 00:39:55.66ID:w4TAZAbA
>>542
メモリやストレージを気にするならBusyBox一択
必然的に使うシェルはBusyBoxに内蔵されてるash

Alpine Linuxのbusyboxは 805.6KB
この中にシェルだけではなくcpやrmやawkなどの
よく使うコマンドが大量に詰め込まれてる
0544デフォルトの名無しさん垢版2021/05/12(水) 00:44:00.91ID:w4TAZAbA
Alpineのbashは742.3k、dashは106.3kだな
それからdashを使うのは環境が極小だからと言うよりも
bashがPOSIXに準拠してないからだ
0545デフォルトの名無しさん垢版2021/05/12(水) 00:46:26.43ID:w4TAZAbA
極小環境で現役なもの = 組み込み
0546デフォルトの名無しさん垢版2021/05/12(水) 00:46:28.75ID:1N3VwigT
>>541
/bin/sh が POSIX 準拠していない bash の環境もあるんだから
POSIX 準拠を期待しているならシェバンは #!/bin/sh と書くべきじゃない

既に /bin/sh が bash 期待のスクリプトも大量に出回っているから
/bin/sh から bash を追い出すのも現実的じゃない

つまりシェバンに #!/bin/sh って書く、イコール bash でも dash でも
動くなんかよくわからない基準でスクリプト書きますよって宣言している
ようなもんなんだから、そんな曖昧な宣言するぐらいならシェバンに
bash だの dash だの書いた方がいいんじゃないか?
0547デフォルトの名無しさん垢版2021/05/12(水) 00:47:51.03ID:w4TAZAbA
>>546
> /bin/sh が POSIX 準拠していない bash の環境もあるんだから
だから、それはシェルスクリプトの問題じゃない
bashを使ってるシステム側の問題
0548デフォルトの名無しさん垢版2021/05/12(水) 00:48:09.14ID:w4TAZAbA
#!/bin/sh はシェルスクリプトに書くものだってわかってる?
0549デフォルトの名無しさん垢版2021/05/12(水) 00:49:26.60ID:w4TAZAbA
POSIXシェルで書いてる人は、dashで動かすなんて想定してないからなw
0550デフォルトの名無しさん垢版2021/05/12(水) 00:50:03.00ID:1N3VwigT
>>545
いや、今どき組込システムで bash じゃなくて dash 使わざるを得ない程メモリが
逼迫しているか?って話よ

それに busybox だけ使うならそれでいいんだけどセットで使うアプリのスクリプトが
bash 依存だったりして結局 bash もイメージに組み込まざるをえないとかあり得る
(といういかあった)話なわけで
0551デフォルトの名無しさん垢版2021/05/12(水) 00:53:13.25ID:w4TAZAbA
>>550
だからPOSIXという互換性のほうが重要ということだよ
ほれみろbash依存のスクリプトなんか書くから困ってる
bash以外じゃ動かんだろ
0552デフォルトの名無しさん垢版2021/05/12(水) 01:00:08.38ID:1N3VwigT
>>547
でも「今からひっくり返せる戦況にもない」こともわかってるよね?
そこを見て見ぬ振りして POSIX が正義だと旗を掲げても無駄しにするだけだよ
0553デフォルトの名無しさん垢版2021/05/12(水) 01:01:55.36ID:w4TAZAbA
今からひっくり返せる戦況ってなんのこと?
すでに/bin/shがdashまたはashである環境が最多になってしまったから
脱bashの流れは止まらないって話?
0554デフォルトの名無しさん垢版2021/05/12(水) 01:04:16.31ID:1N3VwigT
>>551
> bash以外じゃ動かんだろ
スクリプトの動作の互換性という観点ではむしろそこが良いのがわかってない
bash/dash/ash に限定したほうが保守コストは下がるんだよ
0555デフォルトの名無しさん垢版2021/05/12(水) 01:04:53.84ID:w4TAZAbA
bashに限定したらダメでしょ?
dash/ashでは動かないんだから
0556デフォルトの名無しさん垢版2021/05/12(水) 01:06:24.03ID:w4TAZAbA
dash/ash用(つまりPOSIXシェル)で書けばbashでも動くが
bashの非POSIXシェル機能を使ったら、dash/ashで動かないってわかってますか?
0558デフォルトの名無しさん垢版2021/05/12(水) 01:09:59.32ID:OO1NJlSc
本当すぐPOSIXの話題になるよな
0559デフォルトの名無しさん垢版2021/05/12(水) 01:10:52.06ID:w4TAZAbA
>>557
それはbash依存が問題なのではなくそのファイルが
メンテされてないっていうのが問題なだけ
そのファイルをメンテすればいい

メンテされてるなら
#!/bin/sh を #!/bin/bashに変更するだけ
0560デフォルトの名無しさん垢版2021/05/12(水) 01:11:51.40ID:w4TAZAbA
>>558
シェルスクリプトから移植性を取ったら何も残らない
それはもう別の言語で書けばいい
0561デフォルトの名無しさん垢版2021/05/12(水) 01:26:23.80ID:1N3VwigT
>>556
君は(坊主憎けりゃ袈裟まで憎い的な) bashism 死すべしが強すぎて話がそれ過ぎるきらいがあるな

bash 依存のシェバンは #!/bin/bash って書くのは当然
#!/bin/sh は何に向けてるかわからんから #!/bin/dash って明示しようぜって話だぞ?
0562デフォルトの名無しさん垢版2021/05/12(水) 01:27:46.42ID:w4TAZAbA
> #!/bin/sh は何に向けてるかわからんから
何に向けてるってPOSIXシェル全てだろ。何を言ってるんだ?
互換性がないならそれはそのシェルのバグであって
スクリプトの問題じゃない
0563デフォルトの名無しさん垢版2021/05/12(水) 01:28:10.36ID:w4TAZAbA
#!/bin/dashだったらdash限定になるじゃん
アホなのかな?
0564デフォルトの名無しさん垢版2021/05/12(水) 01:36:50.63ID:1N3VwigT
>>563
ash で動作するけど ash の劣化実装の dash では動作しないスクリプトを排除できるという意味で安全だ

下手に確認取れてない環境で間違った動作されるくらいなら動かない方がマシ
0565デフォルトの名無しさん垢版2021/05/12(水) 01:40:11.91ID:1N3VwigT
>>562
> 何に向けてるってPOSIXシェル全てだろ。何を言ってるんだ?
だからそこに bash 拡張必須な困ったちゃんが混在してて排除しきれない
から POSIX シェルとは言い切れないってさっきから説明してんだろ
0566デフォルトの名無しさん垢版2021/05/12(水) 01:40:52.17ID:w4TAZAbA
>>564
dashがashの劣化実装と言うなら、dashで動作テストすればOKじゃん
何を言ってるんだかw
0567デフォルトの名無しさん垢版2021/05/12(水) 01:42:05.81ID:w4TAZAbA
>>565
だから何が問題だっていってんの?

bashコードで書く人?
それは書く人の問題だよね

コードの問題になってないよね
0568デフォルトの名無しさん垢版2021/05/12(水) 01:46:16.80ID:w4TAZAbA
私はこのスクリプトをPOSIXシェル用のコードで書いた
ちゃんと他のシェルで動くこともテストした
だから全てのPOSIXシェルで動作する
なので#!/bin/shにするのである

しかし私の中のもう一人の自分がdashでしか動かないかもしれないから
#!/bin/dashにしろというのである

なんて言う話だったら、頭がおかしいとしか思えないw
0569デフォルトの名無しさん垢版2021/05/12(水) 02:04:49.76ID:w4TAZAbA
つーかashとdashってほぼ同じでしょ?ashで動作してdashで動作しないことなんてあるの?
あるならdashで動作確認しろってところは変わらんがな
0570デフォルトの名無しさん垢版2021/05/12(水) 02:05:08.70ID:VEm96Egx
理想主義者 vs 現実主義者
完全主義者 vs 悲観主義者
POSIX主義者 vs こだわらない派

落としどころはないな。。。
0571デフォルトの名無しさん垢版2021/05/12(水) 02:10:51.35ID:w4TAZAbA
POSIXに準拠したコードであれば/bin/shで動くんだから
#!/bin/shにすればいいってだけなんだがな
0572デフォルトの名無しさん垢版2021/05/12(水) 02:11:51.69ID:w4TAZAbA
もちろんそれがdashでしか動かないって言うなら#!/bin/dashにするべきだがな
どのPOSIXシェルでも動くなら#!/bin/shでいい
0573デフォルトの名無しさん垢版2021/05/12(水) 02:28:43.75ID:qBxmR+eO
ID:1N3VwigT
DebianやUbuntuで書いてあることを読んで出直せ
何もわかってないで自分が思うでしか言ってないだろう
0575デフォルトの名無しさん垢版2021/05/12(水) 02:58:36.12ID:w4TAZAbA
>>573
読んで出直したが何も変わらない。

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

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

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

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

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

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

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

その理屈だと dashism な#!/bin/shは#!/bin/dashにしなさいってことになるだろw
0584デフォルトの名無しさん垢版2021/05/12(水) 03:38:40.82ID:QztuhdBY
バグじゃなのw ashのが残ってるとか
そういうのはdashismだからもちろん #!/bin/dash にすべきだろうな
そんなの使わないのが多いから見過ごされていても不思議ではないかな
他にもあるんだったらDebianに持って行った方がいいぞ。自ら ism を否定してるとこなんだから
0585デフォルトの名無しさん垢版2021/05/12(水) 03:54:18.34ID:QztuhdBY
いや、Debianの明確な仕様だな。どこぞのスクリプトでも使ってるのほぼ見たことないから>>584って言ったけど、すまん

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

データ中に、カンマを含んでいても、正常に抜き出せるのか?
0617デフォルトの名無しさん垢版2021/05/17(月) 00:20:52.65ID:HtlvZdi5
https://twitter.com/col_richie/status/1393925115386101766

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

???

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

となるのでは?w
0646デフォルトの名無しさん垢版2021/05/20(木) 13:17:23.56ID:ALA05zio
綴りが同じでも意味が違う場合がある
意味が同じでも別の綴りで表現することもある

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

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

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

readlink -f /bin/sh
/bin/dash

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

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

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

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

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

これを人が読めるように戻すにはどうしたらよいでしょうか?
またshellのコマンドはプログラム言語は何で書かれているのでしょうか?
0669デフォルトの名無しさん垢版2021/06/06(日) 19:47:31.05ID:czQb8XNZ
>>667
> shellのコマンドはプログラム言語は何で書かれているのでしょうか
だいたい全部と言っていいほど、Cだな
ほぼ全部OSSなんだから、全てのコマンドのソースがネットに普通に置いてある
0670デフォルトの名無しさん垢版2021/06/06(日) 19:48:12.73ID:P8Y1M++D
>>669
それはLinuxだろ
0672デフォルトの名無しさん垢版2021/06/06(日) 19:53:49.73ID:P8Y1M++D
なんかずれてるな
0673デフォルトの名無しさん垢版2021/06/06(日) 19:55:06.72ID:P8Y1M++D
オープンソースとそうでないものがあって、そもそもはオープンソースでない方が元。
0675デフォルトの名無しさん垢版2021/06/06(日) 19:59:04.19ID:czQb8XNZ
>>673
イミフ。何を言いたいの?
shellのコマンド(ex cd・cp・find ...etc)=一般的なコマンドは、>>669の通りだけど
OSSでないそうでないものって何?
0676デフォルトの名無しさん垢版2021/06/06(日) 20:01:57.37ID:wmjhjcQW
>>667
それらの基本的なコマンドはLinuxが作ってるんじゃなくて
GNUが作ってる。Linuxそれを採用してるだけ

それらの基本的なコマンドはだいたいcoreutilsの中に詰め込まれてる
https://github.com/coreutils/coreutils/tree/master/src
ただし一部は別だったりする。例えばfindはfindutils
cdはシェルで実装されてるからbashとかのソースコードを見ないとわからない

Linux以外を見たければそのOSを作ってるサイトとかに書いてある
0678デフォルトの名無しさん垢版2021/06/06(日) 20:04:40.72ID:wmjhjcQW
しかしオープンソースじゃないcpってあるんだろうか?w
unixのソースコードも公開されてたよね?
0679デフォルトの名無しさん垢版2021/06/06(日) 20:05:20.51ID:czQb8XNZ
>>677
それでも、イミフだわあwOSSやんww
最初の(?)UNIXもソース提供だったな。それもネットに丸ごと今でもあったりするな
0681デフォルトの名無しさん垢版2021/06/06(日) 20:24:40.79ID:JMlL8BLG
>669 676
ありがとうございます。GitHubでソースコード拝見しましたが
C言語難しいですね。
0682デフォルトの名無しさん垢版2021/06/06(日) 22:11:42.25ID:aDY6ROlo
標準出力の速度を制限したり、通信速度を表示するコマンドってないでしょうか?
0686デフォルトの名無しさん垢版2021/06/07(月) 11:24:53.90ID:4bgMFjRA
>>685
ありがとうございました!
0687デフォルトの名無しさん垢版2021/06/08(火) 14:08:09.66ID:OYNrrHpJ
誰かいます?質問いいですか?
0688デフォルトの名無しさん垢版2021/06/08(火) 16:02:21.82ID:CHrXnr0w
ff fb 20
0689デフォルトの名無しさん垢版2021/06/08(火) 19:32:55.59ID:VAaMDIwe
.bashrcのaliasでnohupしたいんだがどう書けばいいの?

これだと上手くいかなかった
alias unko='sudo nohup sh -c '¥''time /unko/unchi.sh '¥'' &'
0690デフォルトの名無しさん垢版2021/06/09(水) 10:49:19.85ID:Zc888NJs
>>689
それって sudo してるからパスワード入力が必要になるが、最後に & 付いてるからシェルに戻って来ちゃうからうまく行かんのでは?
普通にコマンドラインから入力してもうまく行かんと思うんだが。1度sudoで何かを動かした後でパスワード入力しなくて良い状態になっている時ならできるだろうけど。
0691デフォルトの名無しさん垢版2021/06/09(水) 14:08:40.45ID:HNZZx/kM
>>690
確かに!
事前に試した時はその前にsudoしてたからパスワード聞かれなかっただけだわ
0692デフォルトの名無しさん垢版2021/06/13(日) 19:52:58.76ID:5F9QidAB
sudo でワイルドカード使いたいときって
sudo sh -c "hoge *"
をイディオムだと思って使うのが良いですかね?
他のやり方ってありますか?
0693デフォルトの名無しさん垢版2021/06/13(日) 20:33:30.15ID:ZhJARNOF
>>692
ワイルドカードの使いかたによるやろ。
ワイルドカード処理を自分で行うアプリ(gitとか)なら不要やし。

イディオムではなく、ワイルドカード処理をどれに任せるのかを考えるべき。
0694デフォルトの名無しさん垢版2021/06/14(月) 11:12:16.03ID:KZOl1vP3
イディオムってなんだよ? 何も考えたくないって言ってんのか?
正しいコードを書くだけの話だろ
0695デフォルトの名無しさん垢版2021/06/14(月) 12:55:12.73ID:0x3Kpqg0
その「正しいコード」とやらが、初心者にはちょっと難しいことはわかる。

凝ったことをやるときに、シェル組み込みのコマンドや機能は混乱のもとやからしゃあない。
0696デフォルトの名無しさん垢版2021/06/14(月) 15:51:02.64ID:KZOl1vP3
俺が突っ込みたいのは「イディオム」って言葉だよ
仕組みを理解したくないってのがバレバレなんだよ

上司「なんでこんなコードにしたの?」
馬鹿「知りません。イディオムです!」

っていいたいのバレバレやろ?
0697デフォルトの名無しさん垢版2021/06/14(月) 16:13:33.51ID:lTAIWsCW
すみません
sh -c は何も sudo でワイルドカードを使うためだけに存在する構文ではないので、イディオムと申しました
0698デフォルトの名無しさん垢版2021/06/14(月) 16:18:29.41ID:lTAIWsCW
sudoが使えるユーザが利用者で、実行時にパスワードを求める想定です

このときにワイルドカードを使うための、その「正しいコード」とはどのようなものですか、というのが質問です
0699デフォルトの名無しさん垢版2021/06/14(月) 19:26:11.00ID:hx6guc/Q
sudoでもワイルドカード使えるし
echo /etc/*.conf
ってしてみろ
shellの機能を使ってるのがわかってない
shellのオーナーはrootじゃなくユーザー
0700デフォルトの名無しさん垢版2021/06/14(月) 21:27:46.24ID:KZOl1vP3
正しいコードを聞くんじゃなくて、
シェルスクリプトを勉強しろって言ってんの

コード聞いて終わりにするだろ

上司「なんでこんなコードにしたの?」
馬鹿「知りません。5ちゃんねるでこれが正しいって聞きました!」
0702デフォルトの名無しさん垢版2021/06/14(月) 21:32:42.19ID:0x3Kpqg0
>>700
ほっとけよ。
それでもべつにええがな。

そもそも、ムリなヤツにはムリやし、できるヤツなら勝手にやる。
0703デフォルトの名無しさん垢版2021/06/14(月) 21:42:49.75ID:TBcjiJdx
どの回答も想像を絶するレベルの低さでワロタ


>>693
どれに任せるかって、質問者が想定してんのはフツーにシェルだろ

>>699
アホ

>>700
何に発狂してんのか分からんが少なくとも質問者の「イディオム」って語の使い方は正しいし、お前は何ら質問に答えていない
分からんなら無理してレスすんな

>>692
こだわりがあって避けたいのでない限りそれで良い
一般に使える、記述量が少ないあるいは分かりやすいやり方は特にない
あともう分かってるだろうがこのスレ終わってるからわざわざここで質問するな
0704デフォルトの名無しさん垢版2021/06/14(月) 21:47:07.04ID:KZOl1vP3
どこがイディオムなんだ?ただのワイルドカードだろ
*がワイルドカードで終わる話なんだが?
うん。はいおわた。そこにイディオムはありません。

https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%87%E3%82%A3%E3%82%AA%E3%83%A0

イディオム(英語: idiom、フランス語: idiome、ドイツ語: Idiom)とは、
単語における一定の配列での連結の総称である。言語の類型によっては、
単語に準ずる形態素や表意性を持つ文字がこの役割を担うこともある。
この連結によって、慣習的に用例と意味が固定しており、字面から意味を推測できないことも多い。
0707デフォルトの名無しさん垢版2021/06/14(月) 22:07:17.88ID:RVbOy7mU
>>701
sudoはsudo cmdのcmdの実行をroot権限にするだけ
echo *.confもechoにしてみたらいろんなの渡されてびっくりだよ
shellはあらかじめ余計な処理をする
shellを実行してるのはuser
0708デフォルトの名無しさん垢版2021/06/14(月) 22:19:23.20ID:XErzM4Zs
>あらかじめ余計な処理
余計といえば余計だが、その余計なおかげでechoなどは何もしなくてもいいんだけど
POSIXに展開はルールは明文化されてるから一度読めばいいと思う
0709デフォルトの名無しさん垢版2021/06/14(月) 22:38:14.31ID:0x3Kpqg0
>>703
> >>693
> どれに任せるかって、質問者が想定してんのはフツーにシェルだろ

そんな想定ができるヤツは、あんな質問をしないし、「イディオム」とは言うまい。
想像を絶する想像力のなさでワロタ。w

> あともう分かってるだろうがこのスレ終わってるからわざわざここで質問するな

おまえは、回答するな。
0710デフォルトの名無しさん垢版2021/06/14(月) 22:38:16.95ID:lTAIWsCW
>>704
いや誰もワイルドカードのことはイディオムとは呼んでいなくて、sh -c $command をさも sudo でワイルドカードを使うための構文のように使ってるのがイディオム的だという話なんだが、もしかしてアタマが特別お悪い?


>>706
> 本題の答え
おもろいなぁキミ笑
0712デフォルトの名無しさん垢版2021/06/14(月) 22:43:09.07ID:XErzM4Zs
>>710
人格が変わりすぎだろうw
It’s a common idiom to use env to find bash even if it’s been installed in another directory
と同じような感覚で使ったんだろう?そもそもは。とは思ってたけど
しかし人格が変わりすぎwww
0713デフォルトの名無しさん垢版2021/06/14(月) 22:43:39.18ID:TBcjiJdx
>>709
なんでなんの関係もないお前が反応してんの
もしかしてID:KZOl1vP3と同一人物でID切り替えながら荒らしてんの?
0715デフォルトの名無しさん垢版2021/06/14(月) 22:51:30.90ID:XErzM4Zs
>>712
別にいいだろうがw
>>703の冒頭の余計なこと書いてるんだし。あんなの書く癖に>>713なんて書いちゃうんだな
やっぱり小心者故の虚勢だったかと思うぞw

>>714
まあ(そんなに)間違ってはないだろうどうな
ごく普通の用法と言われれればどうかなあ??あんま使わない使われてないかな
(そう目にすることはない、Web上のプログラミング的な色々なとこでは。使ってるとこもあるだろうけど)
0717デフォルトの名無しさん垢版2021/06/14(月) 22:55:27.91ID:TBcjiJdx
>>715
> そんな想定ができるヤツは、あんな質問をしないし、「イディオム」とは言うまい。

いやこんなにも論理的に破綻していてかつイディオムという語の意味を理解してない奴が同じタイミングで二人もいるって恐怖でしかないんだが
0719デフォルトの名無しさん垢版2021/06/15(火) 03:36:25.29ID:fYgQamCV
>>713
ふつうに考えて、荒らしはおまえの方だな。w

>>717
> いやこんなにも論理的に破綻していてかつイディオムという語の意味を理解してない
ただ主張するのではなく、どのように破綻しているのかを述べよ。
0720デフォルトの名無しさん垢版2021/06/15(火) 04:54:46.12ID:UNOhr6//
>>719
> ただ主張するのではなく、どのように破綻しているのかを述べよ。

では、
>>709
> そんな想定ができるヤツは、あんな質問をしないし、「イディオム」とは言うまい。
がどう破綻しているか述べる

質問者は「一般ユーザが展開したワイルドカード」と「root が展開したワイルドカード」が違うのを知っているからこそ「sudo でワイルドカードを使いたい」と思い至ったのであって、この時点でワイルドカードの展開はシェルが担うという前提を持っている
その上で「ワイルドカードの展開をroot のシェルに委ねられないか」というのが元の質問なわけだね
従って、
> そんな想定ができるヤツは、あんな質問をしない
というのは偽だ
なんせ事実として質問者は「そんな想定」を持った上で「あんな質問」をしているのだから

また、いくつかの説明や例文がこれまでに出ているように、質問者のイディオムという語の用法は全く間違っていないし広く使われているものと合致するので、
> 「イディオム」とは言うまい
というのも頓珍漢も甚だしい
(もちろん質問者のイディオムという語の使い方が間違っていることをあなたたちが客観的に示すということはあっても良い。できるものならご自由にどうぞ)
そもそも「こういう知識レベルの人間はこういう語を使わない」なる命題が常に真なわけないでしょう
コンピュータの知識と日用語の語彙に何らかの相関があったとして、それは「そういう傾向がある」というだけなのでね

以上のことから、>>709は事実から説明される事柄と尽く反対のことを言っていて、全体的に偽なので、論理的に破綻しているといえる
0722デフォルトの名無しさん垢版2021/06/15(火) 11:50:21.12ID:vhbon9Jn
>>699
そのための全ての展開に優先するaliasですよ
user/pwdを保存しておいて、su/sudo&好きにcdしてそこで*を展開
hogeはシェル関数にしておいて、末尾に元のユーザーへsu/pwd復元コード
0723デフォルトの名無しさん垢版2021/06/15(火) 11:56:27.22ID:vhbon9Jn
エイリアスはパースの第一段階なので、su root; cd some/dir; hoge *に渡る*はsu/cd後のものになります、言葉不足ごめん

ファイル名展開はパラメータ展開よりも後なので、他の展開で仕込んでもいいかも
0725デフォルトの名無しさん垢版2021/06/15(火) 12:03:49.18ID:fYgQamCV
>>720
> 質問者は「一般ユーザが展開したワイルドカード」と「root が展開したワイルドカード」が違うのを知っている
それは>>692に書かれていない。
おまえの決めつけにすぎないので、以降の長文は全部ムダ。w

まあ、質問者の「イディオムだと思って使う」の意味次第ではあるか。
個人的には、理屈がわかってればそのように「思って」は使わない。
0730デフォルトの名無しさん垢版2021/06/16(水) 08:06:02.87ID:drc75L4c
微妙に関係しそうだから恥をしのんで
()のサブシェルで手軽にサブシェルのID得る方法ってないかな?
パラメタ展開をエイリアスで遅延テクは、エイリアスが行頭に来る必要があるので、おもむろに書ける()の利点が無くなるかなと
0732デフォルトの名無しさん垢版2021/06/16(水) 10:13:45.13ID:drc75L4c
>>731
()の中の$$は親シェルのpidを返すのよ
それこそsh -cに(適当にエスケープした)文字列としてecho $$を渡せって話だけど、折角分かりやすい()構文があるのだから、その範囲内で何かワークアラウンドできないなと
0733デフォルトの名無しさん垢版2021/06/17(木) 17:40:01.55ID:uOhhE14V
このようなファイルがあります。
先頭の単語+デリミタ(今回はカンマ)以降の文字を全て削除したい場合は
sedでどのように書けばいいでしょうか?

one,no need word, no need word
two,no need word, no need word
theree,no need word, no need word
four,no need word, no need word
0738デフォルトの名無しさん垢版2021/06/17(木) 22:03:25.59ID:T6UVeHQo
あ、あともう一つ突っ込み。
-rもいらないだろ?なんで使った?
バックスラもいらないでしょ
0739デフォルトの名無しさん垢版2021/06/17(木) 23:43:32.54ID:dfr4yCUQ
>>730,732
サブシェルのPIDはbashの4以降(確か。3にはない)なら、$BASHPIDで得られる
>>732が何言ってるのかわからんけど、他に有用性があるのは sh -c 'echo $PPID'
0740デフォルトの名無しさん垢版2021/06/17(木) 23:49:44.80ID:dfr4yCUQ
>>739
> >>732が何言ってるのかわからんけど
ああ、本来サブシェルでやりたいこと書きたいことを sh -c 'この中に' 書くってことか
sh は起動するけど、sh -c 'echo $PPID' はそれだけ、$BASHPID と(ほぼ)同等ね、いちおう
0742デフォルトの名無しさん垢版2021/06/23(水) 00:40:02.57ID:IzFohus8
>>675
UNIXを知ってますか?
0744デフォルトの名無しさん垢版2021/06/25(金) 10:36:26.68ID:RM7Ajj8i
>>733
sed -r 's/,.*$/,/g' test.csv
-r 拡張正規表現を使えるようにする。長いオプションはコレー> --regexp-extended
-i 何の確認もなしに実行結果でファイルを上書きするオプション。絶対に使ってはならない。 --in-place
正規表現
「.」は「任意の1文字」
「*」0回以上の繰り返し(たぶん0は空文字列)
「$」は「行末」
「,.*$」でカンマとそれに続く任意の1文字から行末まで

echo "chon, chon, chon" | sed -e 's/chon/5ch/' # 5ch, chon, chon
echo "chon, chon, chon" | sed -e 's/chon/5ch/g' # 5ch, 5ch, 5ch
0745デフォルトの名無しさん垢版2021/06/25(金) 10:52:02.40ID:RM7Ajj8i
>>733
# cutコマンドで1列目を取り出して
# sedで行末をカンマに置き換える
cut --delimiter=',' --fields='1' test.csv | sed 's/$/,/'
コレでよければ
cut --delimiter=',' --fields='1' test.csv | sed 's/$/,/' | tee test.csv
追記したければ
cut --delimiter=',' --fields='1' test.csv | sed 's/$/,/' | tee --append test.csv
0746デフォルトの名無しさん垢版2021/06/25(金) 23:22:45.67ID:8lh6XF2h
シェルスクリプトの話じゃねえ
0748デフォルトの名無しさん垢版2021/06/26(土) 06:02:48.49ID:m56tn/Vu
>>733
# PowerShell
Get-Content "test.csv" | ForEach-Object { $1列目, $2列目, $3列目 = $_.Split(",") ; "$1列目" -replace "$", "," }

PS> gal
# Aliasを使うとこうなる
type "test.csv" | % { $1列目, $2列目, $3列目 = $_.Split(",") ; "$1列目" -replace "$", "," }
0750デフォルトの名無しさん垢版2021/06/26(土) 15:02:58.18ID:HkMm3Nsz
書き方間違えた。。
シェルスクリプト学べる講座みたいな意味です。超初心者向けはあるけど、本格的に教えてくれるのないよね?
0751デフォルトの名無しさん垢版2021/06/26(土) 15:12:45.40ID:pd6KxWqx
>>750
本格的、ってどういうもの?
シェル芸みたいなものってことか?
ま、それは確かにないだろうなあ。
ほとんどが秘伝というか口伝みたいなものだから、講座作れるほど網羅している
人ってのがなかなかいないしなあw
0752デフォルトの名無しさん垢版2021/06/26(土) 15:20:25.76ID:15vAhO8I
python使えたらシェルスクリプト要らんのでは
0753デフォルトの名無しさん垢版2021/06/26(土) 15:26:57.82ID:pd6KxWqx
>>752
ま、なにするかによるけど、例えばファイルをリネームしたりコピーしたり、
ディレクトリ捜査/操作したりするようなのなら、pythonとかで書くのは
かなーりめんどくさいよ?w
0754デフォルトの名無しさん垢版2021/06/26(土) 16:20:33.94ID:fSNbZd7z
man bash > $HOME/Documents/bash.txt
vi $HOME/Documents/bash.txt
SHELL BUILTIN COMMANDSを検索

man dash > $HOME/Documents/bash.txt
vi $HOME/Documents/bash.txt
Builtinsを検索
0757デフォルトの名無しさん垢版2021/06/26(土) 19:39:26.99ID:6sjjJ5as
本なら、ある。
UNIXシェルスクリプトコマンドブック 第3版、 山下哲典、2015

ファイル・文字列処理なら、Ruby が良い

fileutils モジュールの、DryRun で、実際には実行せずに確認できる。
削除なら、FileUtils::DryRun.rm
0761デフォルトの名無しさん垢版2021/06/27(日) 10:23:28.81ID:kOTo8S0v
bashの予約語
! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
その中からdashにはない予約語
! [[ ]] coproc function in select time
0763デフォルトの名無しさん垢版2021/06/28(月) 09:24:33.50ID:7rguVsVy
>>747
名著「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」
0764デフォルトの名無しさん垢版2021/06/28(月) 15:58:41.95ID:PrwZxveA
functionはdashにはないので関数定義で
function 関数名 () { }
と書けない。関数をつくるときはfunctionを省く。
0765デフォルトの名無しさん垢版2021/07/04(日) 23:04:42.22ID:B2MxyBfM
Windows10ではC:\Windows\Microsoft.NET\Framework\<バージョン>以下にvbc.exeが標準インストールされてるけど
Windows11のInsider Preview版でも入ってる?
0766デフォルトの名無しさん垢版2021/07/07(水) 15:15:00.04ID:y8n+ZYbw
シェルスクリプトの引数として文字列を渡すとき、空白等を含むものはダブルクォーテーションで包んで渡してます
このダブルクォーテーションを省略できたら楽なのですが、行末 (セミコロン) まで丸々一つの文字列と見なす方法ありますか
0767デフォルトの名無しさん垢版2021/07/07(水) 17:53:02.55ID:S2V3/enC
上手く引数をクオートしてやればいいんじゃね、bashには最初からそんなシェル関数が定義されてるので、参考に
declare -p等の出力ね
ただしパースが不可逆な処理である以上、完全な再構築は不可能
自明な例:cmd 'a'とcmd a

行内コメントとヒストリ、スクリプト中のエイリアス展開等を使っていいならもっと攻められる
aliasは全ての展開に優先するので何でもできる
func () { history 1 | 引数処理}
alias getcmdline='func #'
getcmdline ) any' illegal " args

スクリプト中なら
set -o history
shopt -s expand_alias
が必要
0769デフォルトの名無しさん垢版2021/07/07(水) 18:50:47.92ID:S2V3/enC
;で止めるのはexprやパラメータ置換で;以降を切り出しておいて、ラップするコマンドの処理が済んだ後でeval に渡せばいいかな
&等他の制御構造も使いたいとなるとキリがないけど
下手に通常コマンドのように見せかけるのは混乱の元にもなるので、割り切った方がいい
0773デフォルトの名無しさん垢版2021/07/07(水) 22:09:19.52ID:lJn1zakl
インラインコメントのつもりで付けた#以降が読まれる可能性があるけど、普通スクリプト中のエイリアスは無効だから大丈夫なのね
0774デフォルトの名無しさん垢版2021/07/10(土) 17:17:24.24ID:QtAhxdi9
w3mブラウザを使っています。
w3mを起動した後の自動処理ってシェルでどのように書けばいいでしょうか??

毎回タブを作ってURL01とURL02を開くなどをやりたいのですが
bashrcにaliasやfunctionを書くことも考えましたが、w3m起動後の処理はできないので困っております。
0775デフォルトの名無しさん垢版2021/07/10(土) 22:08:01.96ID:icE46eu/
例えば、Ruby, Selenium Webdriver で、
Chrome なら操作できるけど、そういうマイナーなブラウザには対応していないかも

Rubyの他に、JavaScript でも書ける。
Selenium IDE と言うのもあるらしい

url_0 = "どこかのURL"
url_1 = "どこかのURL"

driver.navigate.to url_0 # url_0 のタブを開く

driver.execute_script( "window.open()" ) # 新しいタブを開く
driver.switch_to.window( driver.window_handles.last ) # 新しいタブへ移動する

driver.navigate.to url_1 # 新しいタブ内で、url_1 を開く
0776デフォルトの名無しさん垢版2021/07/10(土) 23:45:50.65ID:/14ZuXuK
TTY操作ってんならシェルスクリプトではなくexpectスクリプトでしょ
Linux/Unix/プログラム各板見たがexpectスレはないみたいで恐縮ではあるが
0778デフォルトの名無しさん垢版2021/07/11(日) 06:05:30.31ID:KqeUxmyI
間に擬似端末を挟む方法で w3m や lynx を自動化したことならあるけど
w3m には自動化のためのインターフェースがあるみたいだよ。
その名を "Local CGI" という。
残念ながら man には書かれていないが、普通にダウンロードすれば
doc-jp/MANUAL.html に書いてある。
サンプルコードは Bonus/ にある。
ご所望のことが全部できるかは判らないが
他の方法よりは確実な動作を期待できそうだ。
0779デフォルトの名無しさん垢版2021/07/12(月) 18:24:55.56ID:f04FcsMT
レス遅くなってすいません。

>>775
rubyでも書けるんですね。ちょっと詳しく調べてみます。

>>776 777
恥ずかしいですが、expectスクリプトという概念を初めて知りました。
インタラクティブを自動化出来るんですね。
目から鱗で震えました。ありがとうございます!

>>778
"Local CGI"調べてみました。
当方の問題ならこれで簡単に解決できそうです。

色々なコマンド後の処理を自動化したいなとずっと思ってたのですが
皆さんのおかげで解決しました。
ありがとうございます!スレチ失礼しました。
0780デフォルトの名無しさん垢版2021/07/15(木) 16:46:27.48ID:IbROtnW3
>/dev/nullでゴミ捨ててるコードをよく見るけど、
|:はダメなの?個人的によく使うんだけど

標準入力受け付けない:があったりするのだろうか
0781デフォルトの名無しさん垢版2021/07/15(木) 16:49:38.15ID:IbROtnW3
もちろんステータス見たい時はイエスマンの:はダメだけど、単に出力全部捨てたいケースね
標準エラーはパイプを通らないし、標準出力は:が食べる
0782デフォルトの名無しさん垢版2021/07/15(木) 17:56:15.08ID:CDvGwwEr
全部捨ててるのではなくて
最初に書いた時にSIGPIPEで死んでる
それに無駄にfork/cloneしてる
0783デフォルトの名無しさん垢版2021/07/19(月) 08:43:54.11ID:7DxAXQZB
【完全解説】ブログで月1万円稼ぐ具体的な方法!【アニメ動画】
https://www.youtube.com/watch?v=M_Umbak9icg&;t=401s
【ブログの始め方完全解説!】聞くだけでOK!初心者でもわかるよう基本から超丁寧に解説!【これだけでOK!】
https://www.youtube.com/watch?v=M1lUsqp7lgY
【凡人でもOK】何の実績も強みも無い人がブログで稼ぐ方法
https://www.youtube.com/watch?v=OODFq6YIbYg
【雑記ブログの始め方】「収益化させやすい」運営方法を5ステップで解説【ワードプレス】
https://www.youtube.com/watch?v=WWU_Akj2onM&;t=2s
ブログ運営のおすすめ必須ツール11選!【これだけで月100万円いけます】
https://www.youtube.com/watch?v=w1Oj_WIkNJs
【こんな人は伸びる!】上手くいくブロガーの特徴ベスト5!【月収100万超えブロガーが徹底解説!】
https://www.youtube.com/watch?v=nJG4SsoIN0w
【知らないと失敗する!】ブログで稼ぐための目標設定をプロが解説!
https://www.youtube.com/watch?v=wvWFGZ9hPIo
0784デフォルトの名無しさん垢版2021/07/19(月) 20:25:38.28ID:Vxw+8mZv
makeについて質問。
makeを多段に実行したとき、ログに「make[...]:」とか段数が出力されますが、あの段数をリセットする方法はありますか?

ログはmake: → make[1]: → make[2]: → make[3]:と深くなるにつれて出力が変わりますが、たとえば3段目でリセットして、make: → make[1]: → make: → make[1]:にする、みたいな。
0788デフォルトの名無しさん垢版2021/07/30(金) 18:22:37.15ID:7AkGA5GJ
スクレイピングしたいんですけど何を勉強すればいいですか
不正アクセスに問われたりしないでしょうか?
セキュリティ対策はどのようなことに注意すればよいでしょうか?
0790デフォルトの名無しさん垢版2021/07/30(金) 19:56:33.31ID:pVd7PqHN
他人は誰も何も保証などしないし責任など取ってくれないので法律について自分で調べて安全圏と思える範囲内でやるしかない
0792デフォルトの名無しさん垢版2021/08/01(日) 09:34:42.67ID:4xiWMys0
wgetやcurlとjson
HTMLを加工しデータを抽出するためにsed、grep
不正アクセスのリスクはどこにでもある
相手次第でしかないから
過去に図書館のシステムを作ったエンジニアが
蔵書を調べたいという目的で負荷をかけない範囲でアクセスしてたら
訴えられたってのあったな

自分がやってたのを例に挙げると
配信サイトからの動画の一括ダウンロード
配信履歴の取得などか
動画はまあそのものだが
HTMLの履歴ページにアクセスしてページを繰って
回数、時間などの集計をして傾向を分析してた
id入れれば全部やってくれるから便利だったけど
一連の処理をするツールは自分で作った
0794デフォルトの名無しさん垢版2021/08/01(日) 11:26:43.15ID:boMMlR1G
>>792
あれは常識的に考えて安全なスクレイピングクライアントでも
サーバー側のミス(接続ごとにcloseしてない)が原因で
負荷かけてないつもりが負荷かかったーって理由で逮捕だから理不尽すぎるわ
0795デフォルトの名無しさん垢版2021/08/01(日) 12:49:15.25ID:ekL5DYUO
googleが関わっているサイトはそもそもスクレイピングをさせないよね
自動的にやっていることが分かった瞬間にアクセスを出来なくしている
アルゴリズムは非公開
時間間隔を見ているとかそういう単純なものではないらしい
0798デフォルトの名無しさん垢版2021/08/04(水) 02:42:48.46ID:bE85vB+i
zshで走るスクリプトをもらったんですが、bashで走らせるとどこかでエラーになるようです。
一応bashで走るようにしたいんですが、スクリプトのどういう部分をチェックしたらいい、みたいの
ってあります?
0799デフォルトの名無しさん垢版2021/08/04(水) 04:05:35.99ID:rVD3iYVZ
ググればある
問題点を絞り込めないんだったら、Webで長く書いてくれてるのを読もう
0801デフォルトの名無しさん垢版2021/08/04(水) 14:54:33.64ID:oTWoXRyh
いやーここの皆さんならエスパーしていただけるかと思ったのですが。

とりあえず line 25: zparseopts: command not found と出ました。
0802デフォルトの名無しさん垢版2021/08/04(水) 15:57:29.74ID:ZkQ7EvI3
zsh固有のを使ってるつもりが無くてもbashで動かないのは、
いくつかある動作の僅かな差異でもありえるし、そのどれを使ってもわからんから、
エスパーは無理だろな

command not found やん。モロzsh固有の使っててやん
zsh固有のなんてもっとあるんだから、エスパーは尚更無理だろうな

getopt/getoptsを書き換えればいいだろう、その部分の話なら
他にもあるんだったら、command not foundもわからないんだったら自力では山が高いとしか思えんけど、自力で頑張れ
0803デフォルトの名無しさん垢版2021/08/04(水) 17:01:53.30ID:vF9ccavM
つーか、何が起きるかわからんのに、別シェルのスクリプトをわからんままによく実行できるな。w
メチャクチャに壊されるかもなのに。
0809デフォルトの名無しさん垢版2021/08/04(水) 18:21:21.06ID:f2ZFKBK8
そのシェルスクリプトの最初に

if [ $BASH_VERSION ]; then
 sudo apt-get update && sudo apt-get install -y zsh
 zsh "$0" "$@"
fi

とか書いておけば動くんじゃね?www
0810デフォルトの名無しさん垢版2021/08/04(水) 19:21:42.69ID:ZkQ7EvI3
>>808
>もらった
んだから普通は知り合いからだろうし、何をするのかもわかってるだろう
知り合いで当たり前のように悪さするような>>803のようなのwはまあ普通はいないわな
あんまよくわかってなさそうで、何をするかはわかってるが途中で失敗した時の弊害とかはわからんかも知れんけど
0811デフォルトの名無しさん垢版2021/08/04(水) 19:31:41.64ID:f2ZFKBK8
zshで動くものをbashで動かしたら何が起きるかわからんじゃん
そのzshスクリプトはエラーでちゃんと停止するんか?
想定とは違うディレクトリで中途半端に動いたりしないんか?
0812デフォルトの名無しさん垢版2021/08/04(水) 19:36:30.26ID:ZkQ7EvI3
>何をするのかもわかってるだろう
のうちだろ
動作させないと何が問題かわからんし、そもそもどの程度の知識かもわからんし
仮に何かあっても、全く何もわからないのにbashで動くようにしたいという望みを持った勉強代だなw

動作させないと何が問題かわからんのだから、問いに対して動かしてみろと言うのは当たり前の話でしかないだろう
何を言いたいのかわからんぞ
0814デフォルトの名無しさん垢版2021/08/04(水) 20:04:22.89ID:vF9ccavM
>>810
結局、わからんのやないか!
アホなの?w

コマンドや変数展開の違いとかでちょうどヤバい状況になる可能性もあるのに。
0815デフォルトの名無しさん垢版2021/08/04(水) 20:09:58.00ID:ZkQ7EvI3
>>814
仮に何かあっても、全く何もわからないのにbashで動くようにしたいという望みを持った勉強代だなw
>>810にそもそもその言うのも含んでるし

そして実際にはとりあえず何も無かったようなのに、想像だけ読まないで文句言ってもしょうがないよ
0817デフォルトの名無しさん垢版2021/08/04(水) 21:28:34.60ID:ZkQ7EvI3
>>816
何が知らんがなだよw
「メチャクチャ」に「壊される」からは悪意を想像しても不思議ではないと思うけどなあ
そんななんかダメなとこあったらメチャクチャに壊すスクリプトもそう無いだろうからな。そんなのばっか書いてるの?
0818デフォルトの名無しさん垢版2021/08/05(木) 00:09:48.84ID:r/zZzNU4
>>817
超ふしぎじゃ。
壊す主体は、動作の読めないスクリプトに決まってるやろ。
読解力ゼロなんか。w

> そんななんかダメなとこあったらメチャクチャに壊すスクリプトもそう無いだろうからな。そんなのばっか書いてるの?
たまたまrm *になるだけでおしまいやぞ?
0819デフォルトの名無しさん垢版2021/08/05(木) 02:16:14.66ID:uXuSxWIZ
>>818
何を言っているんだかな
何が「主体」だか、当たり前だろ。その主体に悪意があるかもしれないって話だろう
「メチャクチャ」に「壊される」が悪意を持って書かれたスクリプトを表すと読めても不思議ではないって話なんだが
読めないのはどっちなんだかなw

たまたまとか頻度がわからんな。すぐにそんなの想像してしまうぐらいの頻度で書いてるのか?w
とか、もうアレだけどw とりあえず単なる杞憂でしかないのは質問者の最初のレスで明らかだし、自己責任の範囲。やってくれないとレスしようがないし、
やってちょっとはその具体的な実行結果を出してくれたことにより、原因他が明確(*)になってんだから、ただの蛇足もこれまでにしとこな
*)お前の最初のレスもそれにより=ほとんど何も知らない人だったとわかってだろう?w
0820デフォルトの名無しさん垢版2021/08/05(木) 08:32:13.08ID:RD0C5s2g
ども、801です、盛り上がらせてしまいすみません。
どちらかというと興味として、素朴に、zshもbashもshベースで割と簡単に移植できるのかな? と
思ったんですが、結局それはNOってことですかね?

ちなみにzparseoptsというのはあからさまにzshの関数ぽいですが、
他に、どうやら変数(の中身)の展開に違いがある? ような感じでスクリプト中で呼ばれるコマンド
の引数に正しい値が渡らなかったりしてるようです。
0821デフォルトの名無しさん垢版2021/08/05(木) 09:00:33.95ID:zI5dwTpx
・POSIX(sh)のだけ使ってる
・bashにもzshにもあるのを使ってる
は、問題があったら調整ちょっと手直し程度
・zshにしかないのを使ってる
は、当然、該当部分の書き換えが必要

少しは知っているのならYESだが、
ちょっと何も知らないようなので自分で勉強する気やる気があるのかによる。今はNOだろな
0823デフォルトの名無しさん垢版2021/08/05(木) 10:12:10.01ID:hsHiTAxc
shベースはPOSIX shベースって言えばいいと思うけど
bashとzshに共通のものってなんて言えばいいんだろうね
0825デフォルトの名無しさん垢版2021/08/05(木) 16:55:00.26ID:zI5dwTpx
>>822
わざとなのかなんなのか
悪意を持って書かれたスクリプト
な、いちおう
一行目からはわざとではないみたいだが、だったら、読解力ゼロなんかを自分で嚙みしめようなw
0826デフォルトの名無しさん垢版2021/08/05(木) 17:17:04.23ID:zI5dwTpx
>>823,824
bash/zshフレンドリー?w
共通仕様の公式なドキュメントがあるわけでもなく、書いた人の知見頼りだろから、そう何か明確な名称的なのはなさげかなあ

kshからのが多そうね。bashが最初でzshでも採用ってなかったかなあ
0828デフォルトの名無しさん垢版2021/08/05(木) 18:11:34.02ID:zI5dwTpx
>>827
マジでなのか
しつこいなw繰り返すだけのを、内容無いのを、よくできるなあ
何が面白い(自分にとってな)と思ってやってるの?会話としてでもなさげで
0831デフォルトの名無しさん垢版2021/08/05(木) 22:23:46.98ID:zI5dwTpx
>>829
会話にならん、なってないぞwイミフすぎ
何が面白い(自分にとってな)と思ってやってるのかだけしかもう興味がなかったけど、それを知るのも無理そうだなw
まあ終わりだな
0832デフォルトの名無しさん垢版2021/08/05(木) 23:29:03.88ID:vcYli3BC
setコマンドで位置パラメータを指定するときに、
引用符でかこわれていない変数がフィールド分割されるかどうかって決まってたっけ?

setの仕様にはそれらしき記述はなし。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_25

BashやYashでは分割されて,Dashでは分割されない。
$ bash -c '
set -- "a b c" "d e f"
set -- $1 "$@"
echo $1
'
→a
$ yash -c '
set -- "a b c" "d e f"
set -- $1 "$@"
echo $1
'
→a
$ dash -c '
set -- "a b c" "d e f"
set -- $1 "$@"
echo $1
'
→a b c
0836デフォルトの名無しさん垢版2021/08/06(金) 15:08:57.47ID:rcBy4jaU
>>835
あのさぁ、なんで実行結果を書かないの?
やってみればすぐわかるだろ

$ bash -c '
> a="1 2 3"
> printf "/%s/" $a
> '
/1//2//3/

dash -c '
> a="1 2 3"
> printf "/%s/" $a
> '
/1//2//3/


まーーーーーーーーーったく同じ
0837デフォルトの名無しさん垢版2021/08/06(金) 17:19:21.97ID:j92KspJx
>>836
いやさ,それの実行結果が一緒なのに,
$ bash -c '
set -- "a b c" "d e f"
set -- $1 "$@"
echo $1
'
→a
$ dash -c '
set -- "a b c" "d e f"
set -- $1 "$@"
echo $1
'
→a b c
こうなるのはおかしいだろってことだよ。

話わかってるか?
0839デフォルトの名無しさん垢版2021/08/06(金) 19:29:06.94ID:mgQwZ+tq
dashで>>832見たとき試した時は、
a b c
になったけど、しばらくしたらなぜかw、
a
になるようになった、にしかならないようになった

とりあえず、現在は a b c は気のせい/何かの間違いだなと思ってるw
(多分なんかの環境値かなあ??)
メイン環境ではこんなんだったけど、ほぼあんま使わないクリーンに近いUbuntu(VM)でも a だからな

zshはデフォでは、
a b c
emulate posix でも a b c、emulate bash で a
posix でも a になるべきなんだろうな
単に shwordsplit on にするだけだけど emulate posix 時オプションセットのバグかなあ
0843デフォルトの名無しさん垢版2021/08/07(土) 01:06:35.02ID:m9mcPIVQ
お前もある意味勘違い(他の環境でなり試せばわかること)で騒いでいたんだから、
何をなんかその嫌らしいことすんなよ
0845デフォルトの名無しさん垢版2021/08/07(土) 01:50:03.69ID:m9mcPIVQ
>>839
>emulate posix でも a b c、emulate bash で a
>posix でも a になるべきなんだろうな
>単に shwordsplit on にするだけだけど emulate posix 時オプションセットのバグかなあ

posix shell を emulate する場合は posix ではなく sh か
じゃあ、psoix はなんなんねん、イマイチわからない。もしかしてそんなの無いとかか??w

emulate sh にしたら、
shwordsplit on
になるかと思いきや、
noshwordsplit off
って、shwordsplitに変わってnoshwordsplitに(同じだが)。そんなにoffに拘りたいのか

なかなかクセが強い感じw
ほぼzshネタ。でも、zshでposix shell互換にするにはというお話でした
0847デフォルトの名無しさん垢版2021/08/07(土) 08:27:51.67ID:m9mcPIVQ
なる。 zsh|sh|ksh|csh だけか
以外ではエラーにならずに zsh が指定されたとみなすか

起動時とのでオプション変わるから別のオプションセットがセットされてんのかと思った
0849デフォルトの名無しさん垢版2021/08/07(土) 08:36:21.73ID:m9mcPIVQ
>以外ではエラーにならずに zsh が指定されたとみなすか
いや、bash が指定されたら sh とみなすってのはあるみたいだな。例外か?
bash対応のチラっとあるからbash互換のオプションセットがあるのかと期待してた/思い込んでたんだけど、単に(例外的に) posix shell 互換にするだけなのね
0850デフォルトの名無しさん垢版2021/08/07(土) 08:40:12.61ID:UOc5M9xg
emulate "b型の血液が足りないんです!どなたか!どなたかいませんか?"
だったらshになるな。うん。
0851デフォルトの名無しさん垢版2021/08/07(土) 08:41:49.65ID:m9mcPIVQ
>>848
シェルオプションが変わるだけかなあ
一応、元々 ksh+tcsh で開発されてるし、cshの命令文も動いたりもするが、なんか全部ってわけじゃないなて結論で俺は確認はやめてた、以前
cshのオプションセットになったら、もっとちゃんと動くのかもしれないし大したことがないかもしれない、どうなんだろねw
0853デフォルトの名無しさん垢版2021/08/07(土) 08:44:08.17ID:UOc5M9xg
cshの命令というかコマンド?は、互換関数でも作れば対応できるんじゃねと思ってるんであんまり気にしないんだが
cshの文法ってzshに組み込めるようなものなのかなって気になってる
cshよく知らんけど、文法自体が少ないのか?関数もなかったはずだよね
0854デフォルトの名無しさん垢版2021/08/07(土) 08:48:10.86ID:UOc5M9xg
>>852
いやしらんてw
昔の人の実装者の気持ちになって考えたら
「お?これだけのパターンなら最初の一文字だけ比較すればいいんじゃね?俺天才じゃねwww」って
考えそうだなって思っただけ

なんつーか、手抜きだよなー。

あー、というかこれbash対応じゃなくて
bourne対応じゃね?bourne=shだし
0856デフォルトの名無しさん垢版2021/08/07(土) 08:58:13.11ID:m9mcPIVQ
>>853
素では、cshの(一部)命令も書ける=B shellとチャンポンできるて感じ
ベースは B shell だがそれに csh の命令文も B shell の命令文と同じように書けるって感じ。関数も普通に使える
emulate csh でそゆのがどう変化する/壊れるのかは試してもないのでわからん、どうなんだろねw

>>854,855
なるほど、それは失礼
zshが起動された時の 起動名 (shだったらsh互換でとかの) が確かそんな感じで判断しますのようなのがあったな、そういえばってので
それと同じかもっと手抜きなのかもね
0858デフォルトの名無しさん垢版2021/08/07(土) 12:55:43.98ID:UOc5M9xg
トリビア

1985年に日本で生まれたシェルがある
そのシェルは 2020年まで存在していた

その名も
0866デフォルトの名無しさん垢版2021/08/15(日) 22:19:10.80ID:G/xk0WlY
iとo
0867デフォルトの名無しさん垢版2021/08/15(日) 23:21:43.56ID:ZsODeO33
bshとbashがあるくらいなんやから、一切気にしなきゃええんちゃう?w

勝てば官軍!
勝てばね!
ふつうは、戦える立場になれないけど!
0873デフォルトの名無しさん垢版2021/08/22(日) 03:53:36.86ID:0Cz6ueFz
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
0874デフォルトの名無しさん垢版2021/08/22(日) 13:22:16.41ID:0Cz6ueFz
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html

第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
0875デフォルトの名無しさん垢版2021/08/31(火) 18:02:21.42ID:UqDTQOtm
awkでデータの中にスペースを入れるにはどうしたらいいんでしょうか?
0876デフォルトの名無しさん垢版2021/08/31(火) 18:14:12.67ID:UqDTQOtm
"a b" "c d"

みたいなデータを読み取れませんか?
0877デフォルトの名無しさん垢版2021/08/31(火) 18:41:30.09ID:zJL9bFvV
"a b" と "c d" に分割したいのであれば GNU awk の FPAT を使って

gawk -vFPAT='"[^"]*"' '{ ... }'

なんてできるけど、ダブルクォートで囲まれた内部でダブルクォートが
使われる場合には。。。
0878デフォルトの名無しさん垢版2021/08/31(火) 22:45:22.41ID:S8r07VdU
Ruby では、CSV 列内の""(クォート文字)は、\" に、
列内の改行コード・カンマ(行区切り・列区切り文字)も、適切に処理される

列内に、CSVの特殊文字、行区切り・列区切り・クォート文字が無ければ、列はクォート文字で囲まれない。
もちろん無条件に、すべての列を囲んでもよい

require 'csv'

input = <<"EOT"
"a""a","b,b",あ
"c
c","d\nd"
EOT

p input_ary = CSV.parse( input ) # 2次元配列
#=> [ ["a\"a", "b,b", "あ"], ["c\nc", "d\nd"] ]

# 2次元配列を、CSV 文字列に変換する
csv_str = input_ary.map( &:to_csv ).join
puts csv_str

出力。元に戻る
"a""a","b,b",あ
"c
c","d
d"
0880デフォルトの名無しさん垢版2021/09/18(土) 18:19:12.65ID:a1LlWfun
頭のおかしい人に以下のようなことを言われました

>>基本、スクレイピングは営業妨害との戦い。
>>どの本にも、そう書いてある。
>>スクレイピングを推奨する本はない

具体的な書籍名を教えてください


>>5ch は、マルチポスト禁止!
>>同じ質問を、複数のスレや外部のサイトに書いてはいけない

どこでそんなルールが決まっているのでしょうか?
0883デフォルトの名無しさん垢版2021/09/18(土) 20:04:20.39ID:ra+RGGfj
スクレイピングはサイト運営からすればボットと同じ迷惑行為。警告を無視して続ければ営業妨害に認定される可能性もある。
マルチポストはいわゆるネットマナーに反する行為。質問者がマルチポストを繰り返せばその質問者が「頭のおかしい人」と看做されるだろう。
0887デフォルトの名無しさん垢版2021/09/22(水) 14:28:08.32ID:Te29kBsr
ニュースグループならクロスポストってのが出来たんだけどな
0888デフォルトの名無しさん垢版2021/09/22(水) 14:42:56.06ID:RtQe+ZM1
>>876
a_b_c_dをa_bとc_dにしたいの?
アンスコ→半角スペース
0889デフォルトの名無しさん垢版2021/10/02(土) 09:12:44.17ID:AShvd7nN
bash sample1.sh && sample2.sh
でsample.shがexitとかfalse的な感じだったらsample2.shは実行しない
という処理をするにはどうしたらいいのでしょうか・・?
0890デフォルトの名無しさん垢版2021/10/02(土) 09:30:28.85ID:AShvd7nN
補足です >>889
そもそもやりたいことはsample2.shの冒頭に
if 条件; then
echo "o"
fi
みたいな条件式が出てくるのですが
その条件は他のsample3.shでもsample4.shでも重複して出てくるので
分けたいなと思いました
そういう書き方があるのかな、と
0891デフォルトの名無しさん垢版2021/10/02(土) 11:10:29.57ID:AShvd7nN
とりあえず自己解決?しました
外部読み込みで関数引き出すことにしました
しかしなぜか
if 関数1; then
echo "o"
else
echo "x"
fi
関数1の返り値が0のとき"o"、1のとき"x"となり
思ってたのと逆になりました
関数1 () {
return 0
}
0894デフォルトの名無しさん垢版2021/10/02(土) 14:45:07.98ID:lWVjrMOX
>>891
逆ではない。それで良いのだ。
成功したら0を返すというUNIX等での昔からの慣習に従っているだけ。
if は動かしたコマンドや関数の終了ステータスが0なら成功したと認識して then の後を実行しようとするように作られている。
0897デフォルトの名無しさん垢版2021/10/02(土) 15:39:19.39ID:yaQQxYBO
シェルスクリプト内で return true とか書ければいいんだが。

引数なしの return はその直前のコマンドの戻り値を戻すので
true ; return
とか
return $(true)
って感じか?
0900デフォルトの名無しさん垢版2021/10/02(土) 16:38:14.15ID:HPoADLry
>>897
やめろ。w
逆に混乱のもとや。
どうしてもっつーなら、EXIT_SUCCESS/EXIT_FAILUREか?

プロセスの戻り値についてちゃんと把握したら、混乱なんかなくなるで。
実質8ビットとか、シグナル結果も混ざるとか。
>>899もそういうひとつ。
0901デフォルトの名無しさん垢版2021/10/02(土) 17:40:54.85ID:yaQQxYBO
>>900
(実装上は?ではあるが)C言語で言う \0 や NULL は必ずしもゼロではないから
ハードコーティングするな、みたいな話と同じでは?

C言語で EXIT_SUCCESS がマクロ定義されているのと同じでは?

あとシェルスクリプトで EXIT_SUCCESS って定義されてる?
0903デフォルトの名無しさん垢版2021/10/02(土) 18:40:53.09ID:A8TEcsRS
>>899
cmp, diffなんかも同じ
これは本来のタスクの成否に加えてエラー状態でliftしてるわけで
option typeと同じ
0905デフォルトの名無しさん垢版2021/10/02(土) 19:00:42.14ID:HPoADLry
>>901
そんな机上の空論は、シェルに不要。
ハードコードとはもう言わん領域。
おまえは#define ZERO 0とかすんのか?w
0906デフォルトの名無しさん垢版2021/10/02(土) 19:08:57.75ID:HPoADLry
>>904
イカれたエンコーディングが対象で、暗黙変換がしっかりされるなら、かならずしも0でなくてもええかもな?

イバラの道というか針山というか、愚かな夢想やけど。w
0907デフォルトの名無しさん垢版2021/10/02(土) 23:25:16.60ID:yaQQxYBO
>>905
おいおい話ずれてないか?
C言語は if 文に数字を渡したらノンゼロで成立、シェルスクリプトはゼロで成立って話なんだが
つまり、C言語は #define TRUE 1 でシェルスクリプトは TRUE=0 ってこと

>>904
定義されていないからゼロとは限らないって話らしいよ
0908デフォルトの名無しさん垢版2021/10/02(土) 23:47:19.06ID:HPoADLry
>>907
おまえが勝手に勘違いして決めつけとるだけや。w

0は「TRUE」をあらわすのではない。
ただの「0」や。
シェルとかでは一般的に、0を成功と見なすことにしとるだけ。

プログラムによってはあえて、1なら成功半分失敗半分、2なら超失敗、みたいにしてもええ。
0910デフォルトの名無しさん垢版2021/10/03(日) 01:52:00.50ID:prztZm/y
>>909
Cでは、文字コードが定義されてない。
エスケープシーケンスは定義されとるが、その数値としての値が定義されてるかどうかは別の話や。

Cにはスタンドアロン環境があるし、>>906みたいに対応できなくはないやろうし、(char)¥0は(int)0でなければならないはずやが、それでもメモリ上では0でない可能性はあっていい気がするわ。

堅実にはありえないような、愚かな夢想やがな。w
0912デフォルトの名無しさん垢版2021/10/03(日) 23:29:34.04ID:53YOJQpZ
>>908
俺が勘違いしているとお前がいうならそれでいいよ

じゃあ新しい話

return 0 が C言語とシェルスクリプトで意味が真逆で紛らわしいんだがどうする?
0916デフォルトの名無しさん垢版2021/10/04(月) 11:18:50.12ID:k4THeifQ
main()のreturnに関してはshと一緒だが
returnに限らずifや論理演算で使うときの0/0以外は意味が真逆って話ですかね

どうするもこうするも、脳内で切り替えるしかないのでは
0918デフォルトの名無しさん垢版2021/10/04(月) 11:56:33.52ID:jGq6SyTd
動的に変数名を作ってそのまま使用するのってどうやるのでしょうか
val_a="aaa"
val_b="bbb"
ary=( "a" "b" )

for s in ${ary[@]}; do
echo ${val_$s}
done

だとbad substitutionでした
0919デフォルトの名無しさん垢版2021/10/04(月) 14:30:02.14ID:hDmlyFvp
>>916
成功(0)失敗(0以外、だいたい負数もしくは-1) と 真(0以外もしくは1)偽(0) があるが、真偽しか知らないとかかな
C には main 以外にも 成功失敗 を返す関数はいっぱいある。もちろん成功失敗/真偽以外のを返すのもは言わずもがなだが。Cという言語でさえ何の関数でで切り替えなきゃ C 使えないだろうにな
シェルスクリプトは成功失敗でしかないからなwhileやifなどの基本的な制御文は
0920デフォルトの名無しさん垢版2021/10/04(月) 14:57:35.57ID:fSDY+8CH
eval echo "¥${val_${s}}"
0922デフォルトの名無しさん垢版2021/10/04(月) 15:29:45.66ID:zDusbFKv
>>919
> シェルスクリプトは成功失敗でしかないからなwhileやifなどの基本的な制御文は
いや、それはCも同じや。w
条件部に任意の式を書けるだけ。

そいつは、物事をムリヤリにでも単純化したいだけやと思う。
まあ、気持ちはわからんでもない。
ワイにもそういうときはあった。
初心者かつ理想主義者ならではなんかね。
0923デフォルトの名無しさん垢版2021/10/04(月) 16:21:38.67ID:hDmlyFvp
>>922
C は 成功失敗 とかではなく、評価式の結果の値が 0かそれ以外か だけど
原典のK&Rに書いてある通り
真偽 Booleanと言えるが そもそもはBooleanが無いから 0かそれ以外か だな

シェルスクリプトはモロに成功失敗でしかないから、true「コマンド」のexit statusが 0=成功 でそれで成り立ってるんだけど
0924デフォルトの名無しさん垢版2021/10/04(月) 16:30:51.81ID:zDusbFKv
>>923
シェルスクリプトの判定は、プロセスの終了ステータスの値が0かそれ以外かなだけ。
それが成功か失敗かはただの解釈の話。
Cと同じ。

testコマンドとか知らんのか?
0925デフォルトの名無しさん垢版2021/10/04(月) 16:42:05.78ID:hDmlyFvp
>>924
Cも知らないのに何言ってるんだかなとしか思えん
シェルスクリプトが扱うコマンドはCで書かれてもいての EXIT_SUCCESS ってあるんだけど。もちろんシェルスクリプトはその値をもベースにしてる

判定は真逆だろうに、Cと同じって何を言っているのだか
C
if( 評価式 )
判定式の結果値が 「0でなかったら」
シェルスクリプト
if コマンド; then
コマンドの EXIT STATUS が 「0だったら」
testコマンドも同じ、評価した結果が 成功か失敗 でしかない。EXIT STATUSはそういうもんだから...なんてCでなんか書いたことあるなら当然知っているだろう
0926デフォルトの名無しさん垢版2021/10/04(月) 16:47:03.61ID:jGq6SyTd
>>920
¥マークをバックスラッシュにしたらできました
>>921
一度格納するのですね できました

どちらもできました
ありがとうございました。
0927デフォルトの名無しさん垢版2021/10/04(月) 17:25:08.90ID:seuesddr
[ ] がコマンドだって知らない人がいるのかな?

シェルスクリプトの真偽はCと同じですよ
コマンドの終了ステータスはCもシェルスクリプトも0が正常、0以外が異常

echo $((2 > 1))
1

↑の通りシェルスクリプトの真は1
0929デフォルトの名無しさん垢版2021/10/04(月) 17:43:03.44ID:hDmlyFvp
>>927
真(0以外もしくは1)偽(0) だけだと思うから、変なこと言い出しただけだろう
成功(0)失敗(0以外、だいたい負数もしくは-1) もあり、シェルスクリプトは 成功失敗 でしかないって話だよ
「真偽はCと同じ」とか言い出すから...w 2分岐でしかないとこのを真偽と言いたいのかな?

シェルスクリプトの制御文はEXIT STATUSしか見ないから、そんな例は無意味だろう
普通 if 文は 真/正 だったら〜でif分内に入るが、その例を持ち出してどう説明するの?
0930デフォルトの名無しさん垢版2021/10/04(月) 17:57:13.20ID:zDusbFKv
>>925
EXIT_SUCCESSとかはただの超後付けやぞ?w
もともとそんなもんはなかった。

条件判定は、判定が逆なだけで、やってることが同じ。
成功か失敗かではなく、値しか参照してない。
読解力がないヤツはめんどいな。。。

ま、いいけど。では、これにて。
0931デフォルトの名無しさん垢版2021/10/04(月) 18:03:18.56ID:hDmlyFvp
>>930
後付けでも 0 は正常終了って決まってることだろに
後付けでわかりやすく定義しただけだろう。EXIT_SUCCESSが定義されてから 0 が正常終了になったとでもいいたいの?
反論のために言い出したのが「後付け」って、何もわかってないなとしか思えんぞ

「判定が逆なだけ」って...なんで逆かを言ってるんだが、自称読解力あるはずなのに、まだ読めないのな
>>927の最初に言ってるのに、無視して(理解できないからか?)変なとこ食いつくだけだあるなとしか思えない
0932デフォルトの名無しさん垢版2021/10/04(月) 18:08:15.93ID:hDmlyFvp
成功(0)失敗(0以外、だいたい負数もしくは-1)
というのは太古から存在してるというのを、元々のやつはおろかそいつに反発(?)してるやつもどうやら知らないらしい...
何で知らないのか理解できない、Cに限らず他の言語でもあるのに
0934デフォルトの名無しさん垢版2021/10/04(月) 19:13:01.03ID:seuesddr
>>929
何がいいたいのかさっぱり

if [ $bool = 1 ]; then
で真だったらって書けるやろ
分かりづらいって言うなら

TRUE=1
if [ $bool = $TRUE ]; then
でもいいし
0935デフォルトの名無しさん垢版2021/10/04(月) 19:20:57.93ID:hDmlyFvp
>>934
>[ ] がコマンドだって知らない人がいるのかな?
と言い出したのに...本当に自分ではわかってるのか疑わしいぞ

if文=シェルスクリプトが判断してるのは その評価式=ではなく評価式を評価したtestコマンドの EXIT STATUS = 成功失敗 でしかないって
本当にわからない人だなあ

Booleanなのに true とか 1 と比較するのはどうなの、というのは個人の好みだが、こうも書ける。関係ないけど
bool=true or fasle
if $bool; then
...
よりシェルスクリプト基本に添ってると思うけどなw そのある意味オレオレよりは
0936デフォルトの名無しさん垢版2021/10/04(月) 19:34:13.89ID:hDmlyFvp
>シェルスクリプトが判断してるのは
シェル(シェルスクリプトインタープリター)が判断してるのかか

なんかあったw K&R 初版にすでに
The program also uses the standard library function exit, which ter-minates program execution when it is called. The argument of exit is available to whatever process called this one, so the success or failure of the program can be tested by another program that uses this one as a sub, process.
By convention, a return value of 0 signals that all is well, and vari-ous non-zero values signal abnormal situations.
って書いてある

Cが何のために作られたか、シェルスクリプトも何のために作られたか、それぐらいわかってはいるだろうから、この短文だけで「読める」だろう(自分勝手な理解を置いておけば)と思いたい
0938デフォルトの名無しさん垢版2021/10/04(月) 19:50:42.83ID:seuesddr
> Booleanなのに true とか 1 と比較するのはどうなの、というのは個人の好みだが、

シェルスクリプトが真で1を返してるんだからしょうがない

echo $((2 > 1))
1

FALSE=0で0以外だったら?と書いてもいいけどな
0939デフォルトの名無しさん垢版2021/10/04(月) 20:02:21.71ID:hDmlyFvp
>>937,938
話にならんな
だからコマンドの(評価式の)判断はシェルスクリプトのifなどの制御文と関係ないって言ってるだろうに
>シェルスクリプトが真で1を返してる
今だに、全然わかってないのが明らかだな

>[ ] がコマンドだって知らない人がいるのかな?
って、自分で言ってるのに、本当はわかってないんだな
わかってないのにこう言った意味意図がわからん
0942デフォルトの名無しさん垢版2021/10/04(月) 20:20:05.24ID:hDmlyFvp
いや、手取り足取り教えてくださいかな
この意固地っぷりわからなさぶりは
元々のヤツよりよほどわかってなさげだなあ、何でそいつらの方がめんどくさいんだか
0943デフォルトの名無しさん垢版2021/10/04(月) 20:25:10.55ID:seuesddr
だからシェルスクリプトの真は1
if や真偽値ではなくて、終了ステータスを見る
[]はコマンド、その戻り値は終了ステータス
って言ってるだけですが?
0945デフォルトの名無しさん垢版2021/10/04(月) 20:31:27.73ID:hDmlyFvp
まだ「言い張ってる」
やれやれ

単に「人に対してわかりやすい」単なる「算術結果」の「プリント」でしかないのに
結果が A/B でも構わない=制御文と「何も関係ないから」。そうでないのは単なる人に対しての場合の慣例だからだろうとわかりそうなものだが
そんなにBooleanが好きならやっぱりせっかくそのもである true/false 使えよと思わなくもない、制御文にもそのまま使えるのだし
0947デフォルトの名無しさん垢版2021/10/04(月) 20:38:29.57ID:hDmlyFvp
はあ...
>真偽値は1(0以外)と0だっているのに
慣例およびCとかBooleanが明確にないとこはな、そんなの常識だろうに

真偽 Boolean値はある意味正式には true/false だぞ(YES/NOとかのとこもあるけどな)、それすらも知らないとか...
0948デフォルトの名無しさん垢版2021/10/04(月) 20:40:08.73ID:hDmlyFvp
無知も大概にしろ、それもそんなくせに何か自分は知ってる風とか
ただただめんどくさいだけじゃん
てことで
0949デフォルトの名無しさん垢版2021/10/04(月) 20:52:06.46ID:seuesddr
> 真偽 Boolean値はある意味正式には true/false だぞ(YES/NOとかのとこもあるけどな)、それすらも知らないとか...

書いてある所持ってきてw

いっつも、何の根拠もなく
主張だけしてるよなお前

だから証拠付きつけられて負けてるんやで
0950デフォルトの名無しさん垢版2021/10/04(月) 20:54:23.61ID:hDmlyFvp
モロ「手取り足取り教えてください」を自白w
少し調べればあるぞ、コンピュータサイエンスの常識だからな

本当に無知のくせにただただめんどくさいヤツだったとは
まあ、あとは自力で頑張れ。その使ってるナニかは自分で調べるためにもあるんだからな
0951デフォルトの名無しさん垢版2021/10/04(月) 21:34:45.41ID:MQzfkP4R
終了ステータスは
(エラーが) [ 0:false:有りませんでした | 0以外:true:有りました ]
だと思ってたんだが
0953デフォルトの名無しさん垢版2021/10/05(火) 05:07:50.98ID:h//Q5yAA
終了ステータスは、真偽値じゃなくて数値だからね
127 はコマンドが見つからないとか、いろんな意味がある
0954デフォルトの名無しさん垢版2021/10/05(火) 11:37:08.32ID:BsTkn0yK
>>953
これ、アプリが127を返すようだと区別できないな。
ビットはあまりがちなんだから、ちゃんと整理しといてほしかった。
0956デフォルトの名無しさん垢版2021/10/05(火) 15:22:23.47ID:Vzh0q/ov
と思ったらcのが早いのか…
当時ナウかったalgolの影響大きすぎて錯覚する(fiとかesacとか)
0960デフォルトの名無しさん垢版2021/10/05(火) 18:52:58.49ID:JbR3YU6O
科学臭
0964デフォルトの名無しさん垢版2021/10/05(火) 22:05:00.71ID:I9nBHPaT
忘れられがちなPL/I
0967デフォルトの名無しさん垢版2021/10/09(土) 22:37:14.17ID:IfT7mukr
俺もUNIXプログラミング環境持ってるけど、真と偽をtrueとそれ以外(false)って感じで書いてある。シェルスクリプトで真偽と言うとこれだよな。一般的な真偽値とはまた別で。
それにifは真かそれ以外かしか見れないんだから真偽値で言う偽なんざいらねーし。
0970デフォルトの名無しさん垢版2021/10/10(日) 12:09:43.32ID:ZbbT3pWR
>>969
Unixプログラミング環境、今となっては結構レアな本だと思ってたけどみんな持ってるのか。
特に邦訳版から読んでそれ以降使い込まなかった人はシェルスクリプトの真偽はゼロかそれ以外って覚えてても不思議はないと思うな。
0971デフォルトの名無しさん垢版2021/10/10(日) 17:16:50.58ID:Liv3MhTX
不思議もなにも、それしかないからな。
勝手に意味付けしようと思い込むヤツが勝手にややこしくできあがってるだけで。
0972デフォルトの名無しさん垢版2021/10/11(月) 07:02:29.47ID:0Us0xwCf
真偽じゃなくて成否なんだよ
Exit statusは
否は複数あっていい
&&や||はexit statusに関連する成否を扱う演算なんだ
どこにどう書いてあろうが、本質はそれ以外にない

「関連する」と書いたのは
$ not-exist-command || echo hello world
not-exist-command: command not found
hello world
$ not-exist-command && echo hello world
not-exist-command: command not found
$
これはexit statusじゃないから
0973デフォルトの名無しさん垢版2021/10/11(月) 09:50:35.87ID:j+pkxrpN
>>972
うーん、失敗したら真を返すプログラムも書きたいから、スクリプト側では成否と言う概念や言葉を使うより真偽の方がやりやすいんじゃないの?
0974デフォルトの名無しさん垢版2021/10/11(月) 17:46:38.27ID:FYumYboV
>>972
いや、それもexit status。
man bash(COMMAND EXECUTION)にもはっきりそう書いてある。

プログラムとパイプライン各段、終了ステータスを出すほうと受けるほうで混乱すんなよ。
0977デフォルトの名無しさん垢版2021/10/11(月) 22:58:31.30ID:Fcy0jrOe
>>976
Wikipediaで言うと

https://ja.m.wikipedia.org/wiki/終了ステータス

の意味論最終段
時には、終了ステータスをうまく設計し、呼び出した側のプログラムがそれをそのまま条件分岐のインデックスとして使うということも可能である。
の所かな。
結局、
>>975 ですよね。
0978デフォルトの名無しさん垢版2021/10/11(月) 23:33:54.95ID:0Us0xwCf
>>976
C API的には
EXIT_SUCCESS
EXIT_FAILURE 
を使う

前者は0であることが規格で決まってる

後者は0以外だが特に決まってない
特定の値、例えば1に依存したいならこのマクロは使ってはいけない
0982デフォルトの名無しさん垢版2021/10/12(火) 02:14:19.27ID:jMkI4z1q
C/C++の関数は成功で1を返すのが多いと思う
strcmpみたいなのは例外

WindowsのAPIとかunixのシステムコールも基本的には同上だと思う

ところがシェルのコマンドとして観た場合 !0 は失敗で成功が 0
初心者はここで混乱する
0984デフォルトの名無しさん垢版2021/10/12(火) 04:02:37.92ID:4emiI4KE
>>982
またええかげんなことを。。。

strcmpの戻り値は、成功か失敗かではなく、大小関係だから。

C標準関数、UNIXシステムコールの多くは、失敗時に-1、成功時は0や非負整数を返す。
ちなみにエラーの内容はグローバル変数errno。

初心者は、歴史的事情とか現実の適当さとかを知らない。
だから、まったくの別物にも、なにか統一的なルールがあるはず、と勝手に夢想して勝手に混乱してまう。

そんなヤツもじきにわかる。
ルールがあるとしたらただひとつ、ルールなんか存在しないのだということ。

つーか、ええから黙って覚えろ!
0987デフォルトの名無しさん垢版2021/10/12(火) 10:52:14.50ID:OF6dTiE4
関数とプログラムの返り値を一緒にするなよバカ
0989デフォルトの名無しさん垢版2021/10/12(火) 13:39:53.56ID:FcrICImt
>>982
まあ、これなんだよね(笑)
要はシェルスクリプトだけは成功やノーエラーは0でないとだめよん、と覚えておきゃいいだけよ。

他は他でそれぞれの流儀があるならそれに従いなさい、ってだけのこと。

まあ、どうしてもってんなら、シェルスクリプトで成功で1を返したっていいけど、あとあと面倒くさいことになるよ、ってだけ。
0990デフォルトの名無しさん垢版2021/10/12(火) 15:15:35.32ID:FcrICImt
つか、問題が少しずれてるんだな。
シェルスクリプトで、0がノーエラーでなければいけない理由はif文の条件式の判定が
特殊だから。
シェルスクリプトでは、
if C then; A else B fi
となってる場合、Cが0のときが真という扱いになっているから。
普通のプログラミング言語では、ここはCが0のときは偽、それ以外は真。
ここがシェルスクリプトの独特な点。
だから、成功は0を返しなさいよ、ってことになるわだ。
0991デフォルトの名無しさん垢版2021/10/12(火) 15:55:22.72ID:4emiI4KE
>>990
そもそも、シェルスクリプトのifの後に書けるのは条件式ではない。
条件式だとか思うから、ほかと違うんだ、特殊なんだと考えてしまったりして混乱する。

あくまでコマンドラインなんだから、ほかのプログラム言語を引き合いに出そうとした時点でもうおかしい。
0992デフォルトの名無しさん垢版2021/10/12(火) 16:22:35.41ID:FcrICImt
>>991
あくまでもコマンドライン、って考え方がもうおかしい(笑)
コマンドラインってのはあくまでも多少制限されているだけのスクリプトを書く場所、だよw

あと、ifの後に書くのは条件「式」だよ。そういう屁理屈こねたいなら、値ってのは式のうち、てくらいの常識はわきまえておいてねw
0994デフォルトの名無しさん垢版2021/10/12(火) 16:35:06.18ID:FcrICImt
>>93
アホか。「コマンドライン」とかイキってんな。w

ワンライナーはシェルスクリプトじゃない、とか強弁するつもりなのか、お前は?www
0995デフォルトの名無しさん垢版2021/10/12(火) 16:37:10.01ID:FcrICImt
>>993
あとさ「プログラミング言語」ってものを
もう少し勉強しなさいね。
「式」くらいの用語で「イキっ」ちゃうようじゃ、こうい
話題に嘴はさむ資格がないよ。w
0996デフォルトの名無しさん垢版2021/10/12(火) 16:51:48.17ID:h64P2lE5
シェルスクリプトのifの後に書けるのは条件式ではない、コマンド
コマンドライン云々はif文のそこにではなく、シェルスクリプトがなんのためにってことだろう
まあ未だに他の言語と同じと言い張り、いろいろ理解力が足りないのにイキってるw奴には読めない理解できないんだろな
0997デフォルトの名無しさん垢版2021/10/12(火) 17:43:56.49ID:FcrICImt
>>996
コマンド呼び出しになるのは「式の値」が問題だからだよ。
ほんと面倒くさいな。true、falseコマンドも知らねーの?w
あくまもコマンドラインだから、シェルスクリプトはプログラムじゃない、プログラム言語じゃないと
強弁するつもりなの?w
あのさあ、俺が誰かなのかを下衆って勘繰る暇があるなら、コンピュータと日本語を
ちゃんと勉強しような?w
0998デフォルトの名無しさん垢版2021/10/12(火) 17:50:56.74ID:elEZT6pO
>>989
シェルスクリプトだけじゃなくてC言語も成功は0を返さないとだめだって言ってんだろ
頭大丈夫か?
10011001垢版Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 229日 8時間 32分 7秒
10021002垢版Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

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

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