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

レス数が1000を超えています。これ以上書き込みはできません。
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/
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ページや各種リンクを見ましょう
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題は正規表現スレへ
・シェル芸とシェルスクリプトは全く異なります
・シェルスクリプトのことをシェルってゆうな
2021/02/25(木) 18:11:17.11ID:w3Ud6BUK
知ってるガススタのことだよね
2021/02/26(金) 02:56:16.05ID:BSvPs2+3
資源メジャーをカススタとか、視野の狭い奴は生きてて恥ずかしくないのかな
2021/02/28(日) 14:32:38.25ID:BgTYpoJY
なんだか誤解を招く表現ばかりだけど、
https://gigazine.net/news/20210227-posix-parallel-shells-xargs/

2GBをzip圧縮するような重たい処理を並列化する場合は、pthreadよりxargsのほうが、"僅かに"有利なようだ
2021/02/28(日) 14:53:29.82ID:797yScED
xargsやparallelのほうが簡単
job control的にはparallelのほうが優れてたはず
2021/02/28(日) 14:54:49.97ID:JYcgL82Q
xargsってPOSIXでは作れない機能でも使ってるの?
xargsってFreeBSDでもmacOSでも動くよね?
2021/02/28(日) 15:01:05.15ID:XNBptB7O
>>5
> 2GBをzip圧縮するような重たい処理を並列化する場合は、pthreadよりxargsのほうが、"僅かに"有利なようだ

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

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

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

これが正しいかな
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で能力を制限とか意味わからん
2021/02/28(日) 15:21:32.20ID:VQYtUoBE
>>8
やりかたしだいやろ。
Apacheなんかは、マルチプロセスモデルよりもマルチスレッドなイベントモデルのほうが(一部を除いて)パフォーマンスが高いとされてる。
2021/02/28(日) 15:31:23.99ID:N8V7r+yZ
Apache(とか)はfork+execのオーバーヘッドが無視できないってのだな
処理単位が1秒以内とかで済む、処理単位がガシガシ来るなら当然

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

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

いずれにせよ元の話はいろんな条件が混ざっていて気持ち悪い感じがする。
2021/02/28(日) 20:17:39.23ID:O8DyCWfa
GNUのxargsというのでじゃあPOSIXのxargsを考えると、
POSIXのxargsだと例えば引数の数を1にしても(-n1)、プロセスが並列には走らないのか。
waitを使うようなシェルスクリプトとかでGNU xargsの-Pと似たようなことはできるかな?
というわけでこのスレ的な流れに持っていけるかな? w
2021/02/28(日) 20:27:29.22ID:pff3D6mj
可哀想なのがおるな
2021/03/01(月) 03:10:12.92ID:UPXhvHyB
>>17
xargsはPOSIXじゃないぞ
2021/03/01(月) 03:28:09.40ID:RTWwkQ1E
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html
2021/03/01(月) 03:34:18.55ID:UPXhvHyB
あ、POSIXにあるのかw
ってことはxargsは使っていいけど-Pは
POSIXじゃないから使わないって言ってるのか?
ほんとPOSIX中心主義みたいなこと言ってるなw
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だけだと出来るんですが、それを演算式に繋げようとすると私が思いつく限りは何をどういじっても動きません
パイプを更に不等式で繋げるのがよくないと思うんですが
どうしたら直りますか?
23デフォルトの名無しさん
垢版 |
2021/03/02(火) 16:47:44.09ID:5tuGRxIW
$()
2021/03/02(火) 16:50:56.84ID:kOL3oDu9
>>22
{}じやなくて、$()なんじゃないの?
標準出力の内容と「0」を比較するのなら。
2021/03/02(火) 16:55:13.39ID:kOL3oDu9
まけた。。。

ちなみに、"$()"のほうが安心。
2021/03/02(火) 17:15:53.31ID:qy7/OUMA
だがwcを使うのがイケてない
27デフォルトの名無しさん
垢版 |
2021/03/02(火) 17:24:52.22ID:5tuGRxIW
wcだと改行コードがね
2021/03/02(火) 18:08:15.82ID:qy7/OUMA
$ printf abc | wc -l
0

こうなるって話?
行数を数えるより良いロジックはなんだろうか
2021/03/02(火) 18:29:23.93ID:bIA4j74d
何にも該当するのがないかどうかって判断でしかないのに、余計なこと考えたんじゃね

wcを使うのがイケてないって他の行数を数える方法でなのか??
単に出力があるか無いかだけでかと思った
2021/03/02(火) 18:41:11.07ID:bIA4j74d
-lc ってどっちやねんもあるか。それか?いや違うか
どっちかにしろってのは存在してるけど
2021/03/02(火) 18:47:50.24ID:NSMtG/TQ
おお!
なんかエラーがそれっぽくなって近づきました
エスケープ文字で引っかかってる感じですけど
ありがとうです
2021/03/02(火) 18:54:51.13ID:NSMtG/TQ
すいません
-lcのcはいつの間にか間違えて入ってしまってたみたいです
ただのミスです
申し訳ない
2021/03/02(火) 18:57:13.79ID:bIA4j74d
なる。いや、謝るほどでもない。でも、まあ、いいなその姿勢w
頑張れ
2021/03/02(火) 18:57:26.63ID:NSMtG/TQ
0にしてるのは簡易的なテストで
フォルダが1かつファイルが0ならば下層フォルダの階層を全部あげようとしてた感じでした
これもまたもっと良い方法があるのかもしれまん?
2021/03/02(火) 20:26:31.82ID:1DoNrFvk
$ printf abc | grep -c .

でええんちゃうちゃう
2021/03/02(火) 20:28:20.11ID:1DoNrFvk
あ、間違えた

$ printf abc | grep -c ''

だった
2021/03/02(火) 21:37:15.67ID:11FPPCA/
>>34
>フォルダが1かつファイルが0
??
>下層フォルダの階層を全部あげようとしてた


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

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

cmp < <(...) < <(...)
とか、一時ファイル経由じゃダメなの?
2021/03/07(日) 20:09:21.95ID:vyuBuDwH
答える方もアホばかりやなw
素人がエスケープが〜と言っていたからって
それが原因だと思うな
2021/03/07(日) 20:41:29.78ID:PBQIZrIy
>>39
質問がよくわからんのだが -ne (数値比較であって文字列比較ではない) の
使い方は意図通りなの?
2021/03/07(日) 20:43:03.31ID:vyuBuDwH
素人の質問を真に受けるな、相手に情報を出させろ。アホどもが
2021/03/07(日) 21:28:47.98ID:UPuiYP7U
後で自分がわかったから偉そうにする馬鹿
2021/03/07(日) 23:47:36.62ID:T3tOQ7Z+
>>45
うわ、バッチリ出来ました
ほんとアホでした
ありがとうございます
2021/03/08(月) 03:27:47.81ID:3+uDlPP2
だから最初から出力されてるエラーメッセージをわかると書いただろ
2021/03/08(月) 09:59:07.99ID:6lKYXbK2
>>49
人にやかましく言う前に、まともな日本語を書け!
2021/03/08(月) 10:09:07.56ID:3+uDlPP2
> ソースを引っ張ってきて比較するんですが
ソースを引っ張ってくるとは?

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

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

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


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

お前のやり方は抽象的過ぎるわ「情報小出しにするな」的な基本でもないわで相手に全く届かず
会話に参加できていない
幾ら吠えてもムダ
2021/03/08(月) 21:43:41.10ID:vBncgnCM
ある文字1文字が標準入力で与えられたときに
その文字がサロゲートペアであるかを判定するシェルスクリプトを教えてください
2021/03/08(月) 21:49:20.34ID:eBezB7N7
文字はodコマンドで1バイトずつに変換できる
あとはその数値を調べればいいだけ
2021/03/08(月) 21:58:22.39ID:0PSdEx+k
>>54
| 判定するプログラム
2021/03/09(火) 01:18:57.53ID:GjAck/b0
文字って正確には何のことじゃいな?
2021/03/09(火) 03:38:34.14ID:O1t/zxF9
コンピューターサイエンスの難問:
・命名
・オフバイワン
・キャッシュインバリデーション
・文字エンコーディング(New!)
2021/03/10(水) 14:30:06.19ID:4EdeRuF3
!r posix shell
をDuckduckgoで検索
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/;
...
61デフォルトの名無しさん
垢版 |
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/$$*
6260
垢版 |
2021/03/16(火) 19:53:28.48ID:KSYjhM+z
>>61
いや、サンプルはああ書いたけど、実際はフィールド的じゃない。
任意のテキストも混じってるから、cutはちょっと。。。

sedで任意個→任意個の置換は、やっぱりムリ?
2021/03/16(火) 19:53:49.41ID:37ClWGtj
'h;s/ .*//;s/a/A/g;x;s/^[^ ]*//;H;g;s/\n//'
2021/03/16(火) 20:44:06.60ID:Uw3qDZze
':b;s/^\(A*\)a/\1A/g;tb'
2021/03/16(火) 23:16:18.12ID:cOTzxoWO
仕様を後出しするなカス
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
2021/03/16(火) 23:31:10.17ID:iNI2JLkI
>>66
最初の方、aa@AA じゃなくて AA@aa だわ
2021/03/16(火) 23:40:46.05ID:iNI2JLkI
考えてみたら

'/^(a+)/!b;h;s/^(a+).*$/\1/;s/./A/g;G;s/\na+//'

でええかな…
6960
垢版 |
2021/03/16(火) 23:57:21.97ID:KSYjhM+z
回答、ありがと!

>>63
>>68
要はホールドスペースか。。。
ちぎって置換する感じやな。
いまひとつわかってないので、後で調べて確認してみるわ。
7060
垢版 |
2021/03/16(火) 23:58:40.36ID:KSYjhM+z
>>65
要件はちゃんと書いてあるやろが!カス!
2021/03/17(水) 00:55:43.47ID:ORBKE+6f
>>70
どこに?
2021/03/17(水) 00:59:05.62ID:8tt0N3Ix
perl -pe 's/^(a*\s)/$1=~s|a|A|rg/e'
2021/03/17(水) 02:07:36.90ID:MY4kqLB8
yafiygi
2021/03/18(木) 22:37:09.67ID:TQ/yKLr3
パイプとリダイレクトなんだけど、どっちを使ったほうがいいとかありますか?
1は cat のプロセスが生成されるだけ無駄なのかな

1. cat file1 | wc
2. wc < file1
2021/03/18(木) 22:38:55.72ID:TQ/yKLr3
連レスすまそ
手癖で1をやっちゃうんだけど、こういう時にまずいとかあったら教えてほしい感じです
2021/03/18(木) 22:47:23.96ID:3HmhYQS2
ないだろう
別次元で
cat file | read a
read a < file
aをなんかする
とかならあるけど
cat file | は古典的定番で今でも悪でもないだろう
2021/03/18(木) 22:54:13.26ID:3HmhYQS2
https://ja.wikipedia.org/wiki/Cat_(UNIX)
なんかウザいw
1995年からそんなのあったんだ
あんま普及してなさそ
wc < file1
も古典だって
<file1 wc
だって。ウザいなw
2021/03/18(木) 23:06:25.59ID:TQ/yKLr3
気にしすぎか、ありがとう!

> cat > newfile
> 新規ファイルnewfileを作成もしくは上書きして、入力したい内容を打ち込み、CTRL+Dコマンドで終了する。入力された内容は新規ファイルに書き込まれる。
これ知らなかったな、同じことをやりたい時は cat << EOF > newfile してたぜ
2021/03/19(金) 00:06:34.36ID:vJ8/R89b
Useless use of cat (UUOC)
昔から有名だな
catなんか使うもんじゃない
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 だとシーク可能だから一定のサイズで読み込むので速い
2021/03/19(金) 00:15:10.62ID:gmXrz9Hk
ウザいのが出たよw
2021/03/19(金) 00:17:10.15ID:gmXrz9Hk
>なぜならcatを使うとシーク不可能になるから〜
www
何言ってるんだか
2021/03/19(金) 00:17:28.82ID:vJ8/R89b
ウザいのはあなたの感想ですよね
事実の話をしましょう
2021/03/19(金) 00:18:15.17ID:vJ8/R89b
>>82
恥ずかしくないの?

sh の組み込みコマンド read は遅い
https://www.allbsd.org/~hrs/blog/2020-03-28-sh-built-in-read.html
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) を呼び出す必要はない。
2021/03/19(金) 00:20:25.38ID:gmXrz9Hk
www
わざわざ煽って出してきたのが、
自分が何も理解してませんという証明にしかなってないという
2021/03/19(金) 00:21:37.14ID:gmXrz9Hk
連投して抽出までしてるのにww
何も理解してませんという証明にしかなってないよ
2021/03/19(金) 00:22:02.15ID:vJ8/R89b
>>86
なにか言い返す言葉があるなら言い返してみてよ
2021/03/19(金) 00:23:55.24ID:gmXrz9Hk
偉そうな馬鹿に教えてやるとでも思ってるのか
そんな煽りでとかも思ってそうだな、とことん甘ちゃんだな
それと、いつものが確定してんぞw
2021/03/19(金) 00:26:19.51ID:vJ8/R89b
自分からいつものやつだって自白してらw
2021/03/19(金) 00:28:27.48ID:gmXrz9Hk
アホな返しっぷりがまたこれがまた、いつものパターンという...w
2021/03/19(金) 02:10:05.59ID:qP05xHwq
いつもの2人やな
2021/03/19(金) 02:17:31.73ID:7j/6ICPv
トムとジェリー仲良く喧嘩しな〜♪
2021/03/19(金) 04:05:22.98ID:RMQx/osX
catよりパロディのtacの方がオプションモリモリでcat以上に乱用されてるよな…
2021/03/19(金) 04:19:36.74ID:L0TmvpAG
>>74
catのプロセス分のリソースも無駄だが、
コンテキストスイッチが多発するのが良くない
2021/03/19(金) 12:05:21.82ID:8EGHMbin
$ cat << EOL > file1
> foo
> bar
> EOF

これでヒアドキュメントを使った複数行テキストの書き込みはできるんだけど、
cat を使わないようにするのって可能なのかな
2021/03/19(金) 12:06:22.99ID:8EGHMbin
>>96 s/EOF/EOL/
2021/03/19(金) 12:13:54.81ID:UA/QoJ1s
エンドオブライフ
2021/03/19(金) 13:27:42.94ID:8EGHMbin
tee を使えば行けることに気付いたけど、cat が減っても tee が出てきたら意味ないよね
そもそも数行程度で cat を無理に外す必要はないことに気付いた
忘れてくれ
2021/03/19(金) 15:51:37.59ID:R0IdNopV
echo ... >file
でええがな。w
シェルビルトインコマンドやし、ちょっと軽い。
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
2021/03/19(金) 16:56:26.33ID:DiNJqFEB
それでいいなら最初からそうしてるんじゃないか。知らんけど。
103102
垢版 |
2021/03/19(金) 16:59:34.18ID:DiNJqFEB
おっと、>>102>>101 じゃなくて >>100 に対してだよ。
2021/03/19(金) 18:57:42.69ID:RMQx/osX
>>84
比べてないがその用途にmapfileがビルトインなんじゃないの、標準かは知らんけど
2021/03/19(金) 19:00:37.39ID:RMQx/osX
ああ配列使うんだから標準なわけないか
ストリームじゃないからクソデカだと困るか
でも手放せない
106デフォルトの名無しさん
垢版 |
2021/03/23(火) 17:53:11.07ID:laboXhIZ
0、標準入力
1、標準出力
2、標準エラー出力
ですよね?

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

なんで cat <&2 ってやっても同じように
入力した行と同じ行が出力されるんです?
標準エラー出力から入力するってどういう意味なんです?
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
108デフォルトの名無しさん
垢版 |
2021/03/23(火) 20:33:12.59ID:laboXhIZ
あなるほー
紐付いてんのか
POSIXで決まってたりするんかな?
2021/03/23(火) 22:24:47.39ID:abnhlux1
POSIXで当然定義はされてる
紐付いてんのか(?)のことじゃないけどな
110デフォルトの名無しさん
垢版 |
2021/03/23(火) 22:43:31.00ID:laboXhIZ
標準エラー出力から入力した場合の仕様はどこに書いてるの?
2021/03/23(火) 23:02:58.99ID:abnhlux1
そんな仕様じゃないよ

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

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

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

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

$ file /bin/gunzip
/bin/gunzip: POSIX shell script, ASCII text executable
2021/03/29(月) 07:34:58.94ID:wK+S1L2g
>>119
実行ファイルには拡張子をつけないのが
"正しい" 作法ですが?
2021/03/29(月) 07:35:28.60ID:HXftsQaM
>>118
できるだけ互換なのを関連付けるのがベストプラクティスじゃないかな
2021/03/29(月) 07:36:04.54ID:wK+S1L2g
>>122
だから誰がつけるのよ?

シェルスクリプト配布時に作者が
どうやってつけるの?
2021/03/29(月) 07:36:41.97ID:HXftsQaM
>>121
どう考えても良くない習慣だと思うよ…
2021/03/29(月) 07:39:18.53ID:HXftsQaM
>>123
それはユーザー側でやるべきことだと思うけど、
sudo 要求できるならecho ... >>って手もあるかも
2021/03/29(月) 07:42:17.96ID:wK+S1L2g
>>124
良くない習慣だと言ってる人はだれもいません。
実際にディストリに含まれる実行プログラムで
実装言語の拡張子をつけてるプログラムは一つもありません
Ruby、Perl、Python、拡張子がついてますか?

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

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

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

少しは想像力ないのか?

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

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

ぐらいのこと思いつかんのか?
2021/03/29(月) 07:57:55.93ID:wK+S1L2g
訂正

そうするとファイル名変わるから、その .sh を
内部で呼び出すスクリプトが動かなくなるだろ
2021/03/29(月) 07:58:26.46ID:wK+S1L2g
だいたい「拡張子をつけないのが常識」だから
シバンというものがあるんだがな
2021/03/29(月) 07:59:44.04ID:qWZz7CCC
焦りすぎだ落ち着けw
2021/03/29(月) 08:04:34.67ID:wK+S1L2g
落ち着いてるw

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

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

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

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

第4のシバンを待つしかないのか!
2021/03/29(月) 09:16:56.36ID:wK+S1L2g
>>144
なら、run-mailcapでいいじゃん。

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

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

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

実は何もしなくて良いんだろ?w
そもそもmailcap使っても出来ないことだからwww
2021/03/29(月) 10:02:18.72ID:/i/qkskJ
webだとみんなmimeでインタプリタ決めるしな
その方面で育つとカルチャーショック
2021/03/29(月) 10:03:55.77ID:SSJ6OpUN
>>158
そういう流れかあ。それっぽいな
2021/03/29(月) 10:05:03.53ID:wK+S1L2g
× webだとみんなmimeでインタプリタ決めるしな
○ ウェブサーバーだとみんなmimeでインタプリタ決めるしな

ウェブサーバー側の設定でやるから
スクリプトの作者は何もする必要がない
ウェブサーバー側に相当する何かを用意すればいい
2021/03/29(月) 10:09:45.64ID:SSJ6OpUN
読めてないんじゃないの。そんな具体的な話でないぞ
2021/03/29(月) 10:12:06.19ID:wK+S1L2g
そういう話だよ
2021/03/29(月) 10:13:08.06ID:SSJ6OpUN
まあ、ご自由に。話が繋がるとは思えないけど
さて
2021/03/29(月) 10:21:39.61ID:mn0uwvfX
自分で設定するのは面倒、色んな環境の初期設定が揃ってよろしくなってからかな
2021/03/29(月) 15:38:51.51ID:Hi4CyJOB
潔癖症とか完璧主義者とかがUNIX系のもろもろをキモく感じるのはわかる。
とくに最初のころ。

馴れてくると、だいたい気にならんくなってくる。
それがいいことかどうかはわからんけど。w
2021/03/29(月) 15:48:26.38ID:jeDqT5qX
>>126
うちのはデフォルトで/bin/shがzshになってるよ
2021/03/29(月) 17:08:18.30ID:wK+S1L2g
>>166
デフォルトで/bin/shがzshのシステムが有るなら教えて
聞いたこと無いぞ
2021/03/29(月) 17:44:52.06ID:jeDqT5qX
>>167
macOS Catalina
以前は手を入れないとダメだったらしいけど
現バージョンは最初からzshになってる
2021/03/29(月) 17:47:55.60ID:T/NVAJfs
めっちゃ右翼だなそりゃ…
仕方なく読む專だからわからんのだけど、zshもshっぽく振る舞うモードとかあるんじゃないのさすがに限度ってものがあると思うが
2021/03/29(月) 17:51:37.76ID:jeDqT5qX
>>169
単にGPL汚染だったからと言われてるけどApple側から説明はないので不明
bashのv4からGPL3になったのが理由だと思う
2021/03/29(月) 17:53:39.75ID:wK+S1L2g
>>168
> macOS Catalina

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

あ、macOS Catalinaの/bin/shは(POSIXモードの)bash 3.2.57 だ
これからもずっと変わらんだろうよ
2021/03/29(月) 17:56:44.94ID:jeDqT5qX
>>171
現バージョンはzshになってるよ
確かめてみ
2021/03/29(月) 17:58:03.88ID:jeDqT5qX
なおBigSurは最初からzsh
もうbashには戻らんだろうね
2021/03/29(月) 18:01:27.34ID:wK+S1L2g
>>172
お前が確かめろや

/bin/shって入力して、プロンプトになんと表示されるか言ってみろ
2021/03/29(月) 18:04:28.54ID:1/gzKsrI
ログインシェル と /bin/sh は違うぞ
/bin/sh がなんなの確認してみ
2021/03/29(月) 18:06:21.42ID:jeDqT5qX
>>174
とっくに確かめてるって
BigSurはまだ更新してないから聞いただけだが最初からzsh
わからん人だね

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

ああ面倒だw

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

なにか言い返す言葉はあるか?
2021/03/29(月) 18:08:14.41ID:1/gzKsrI
>>176
確かめてないだろw
冷静にもう一度ちゃんと確かめてみ

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

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

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

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

1/1000ぐらいにパフォーマンス下がるぞw
数値は適当だが
2021/03/29(月) 18:38:16.17ID:wK+S1L2g
外部コマンドはパフォーマンスが大幅に低下するだけじゃなく
改行をうまくあつかないという問題がある
変数には改行を入れられるが、外部コマンドだと行区切りとして扱われる
2021/03/29(月) 18:46:02.19ID:CpwX2Qd/
そういえばCatalinaだとこれ↓見ろってでますね
https://support.apple.com/kb/HT208050
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なのかもな
2021/03/29(月) 19:55:41.76ID:1/gzKsrI
>>191
/bin/dash ってあるから、
次か次の次かで /bin/sh は bash を捨てて(流石に捨てるだろう3ベースのなんて。kshがまだあるから同じように残るか??) の dash になる可能性が大な感じ?
2021/03/29(月) 20:03:13.24ID:wK+S1L2g
>>193
bashからdashに変更すると互換性が壊れるからなぁ
まあそれをUbuntuがやってのけたから
互換性気にしないAppleならやるかもな

保守が続いてるdashに変更するか
それともAppleがbashをメンテンスし続けるか
後者でもほぼ修正はないんだから、大変ではないだろうな
2021/03/29(月) 20:07:19.27ID:KEZ/XNTe
>>189
そこまで気にしてなかった、利点はあるのね
しかしパースの曖昧さissueがどんどん上がってたり、使わない部分にまで影響が及ばないか不安になってくる
2021/03/29(月) 20:10:44.21ID:1/gzKsrI
Appleでメンテするのがめんどくさくなって捨てるのは定番
移行を即すためにも最後のあるんだろうし、dashをも入れてるのは 意味がある ことだろう
Appleの準備が終わったら&Appleが移行期間が終わりと見なしたら変わるだろうな
bashに固執することなんてないし
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に移行しろって言ってるのかもな
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依存してるんだろう?
2021/03/29(月) 21:13:02.60ID:wK+S1L2g
Homebrewのインストーラー
https://raw.githubusercontent.com/Homebrew/install/master/install.sh

ざっと見てみたが、結構長いな
配列使ってるところがread -n 1が少し厄介だな

POSIX準拠させるよりもzshで動くようにしたほうがいいのかもしれんな
しかしこれどうやってテストしたんだろうか
2021/03/29(月) 21:49:47.52ID:wK+S1L2g
ふむ read -n 1 = getchのPOSIX準拠コードはあるようだ

https://qiita.com/miminashi/items/ad060c43c130581b412a

getch() {
old=$(stty -g)
stty raw -echo min 0 time 1
printf '%s' $(dd bs=1 count=1 2>/dev/null)
stty $old
}

じゃああとは配列の置き換えが面倒なだけだな
2021/03/30(火) 22:27:21.29ID:jfNjkEti
こうなったら世界唯一のリードオンリー言語、applescriptで書き直すしかないな
2021/03/31(水) 11:33:02.43ID:AtIsL56M
arrayも使えないのは正直つらい

コマンドだけど魔改造でびっくらこいたのはlinux版のcolumn.1(kernel.org配布なんで公式のはず)だなあ
linuxなのに-hも--helpも受け付けないbsd版使ってたわ
--jsonとか--treeとかもはやcolumnの域を超越してる
2021/03/31(水) 12:20:25.54ID:ekNiD538
配列なんていらんと思ってるけど、何に使ってるか聞いていい?
できれば難しいケースでw
2021/03/31(水) 12:34:19.85ID:AtIsL56M
ごめん、単語分割めんどいので全部突っ込みます
2021/03/31(水) 12:37:32.99ID:ekNiD538
>>204
https://github.com/koalaman/shellcheck/wiki/SC2086

こうやりたいのなら
options="-j 5 -B"
make $options file

こうやればいい
make_with_flags() { make -j 5 -B "$@"; }
make_with_flags file


配列はやっぱり、いらんのよなぁ
2021/03/31(水) 12:43:15.98ID:ekNiD538
単語分割は値にスペースが入ってるときに困るんで基本使わないよ。
その上で配列いらんと思ってる。>>205に書いた通り
2021/03/31(水) 16:10:08.25ID:AtIsL56M
>>205
ああwikiにもデバッグにもお世話になってるわshellcheck様々

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

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

ボロボロ出てくるんで出直してきます…
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

一般的なプログラムでは配列あったほうがいいけど
シェルスクリプトでやるような内容で配列なんかいらない
ただみんなシェルスクリプトを雰囲気でやってて知らないだけ
2021/03/31(水) 20:37:35.81ID:fnN7hvaV
でも、PerlもPythonもないけど、いれるほどでもない用事のときには、Bashくらいが適当かつ充分だったりするからね。
2021/03/31(水) 20:43:11.59ID:rlnsgVLR
へー、fi って終了って意味だったのか。勉強になった

https://www.dict.com/%E3%82%AB%E3%82%BF%E3%83%AB%E3%83%BC%E3%83%8B%E3%83%A3%E8%AA%9E-%E6%97%A5%E6%9C%AC%E8%AA%9E/fi

fi, -na [fi]
終了, 終止, 終わり, おしまい, 最後, 結末, 終結
2021/03/31(水) 20:44:51.45ID:rlnsgVLR
>>211
そのBashくらいが〜が俺にとっては、Dash(POSIX準拠)で十分なんだよね
2021/03/31(水) 21:13:09.30ID:4SvaIgPh
まじかよ、じゃあesacもすげー意味に違いないな
2021/03/31(水) 21:16:15.45ID:1zeQu1PP
https://acronyms.thefreedictionary.com/ESAC
2021/03/31(水) 22:31:27.28ID:rlnsgVLR
実際fiって映画の最後のfinから来てるのかもな
2021/04/01(木) 03:14:03.54ID:B5PjUTjB
ここが教養スレだ!
2021/04/01(木) 14:47:29.53ID:9tfGPqCh
シェルスクリプトじゃないけど、質問。
makeで、ターゲット実行が成功しても失敗しても、最後に後始末みたいな処理をさせる方法はない?
bashならtrap ... EXITでできるけど。
2021/04/01(木) 15:17:09.43ID:Hb/UV5K1
https://stackoverflow.com/questions/28597794/how-can-i-clean-up-after-an-error-in-a-makefile
やることは同じだな
2021/04/01(木) 21:35:25.25ID:HbnIL0Hw
>>219
ああ、pipefailの意味をやっと理解したわ
bashのinfo何度も通読してるはずなんだけど、last commandのステータスを返すって当たり前じゃね、ってスルーしてた…
限りなくバグに近い仕様ってやつか
2021/04/01(木) 22:02:03.77ID:B5PjUTjB
互換性オプションはマニュアル読んでも例を見ないと分からない物が多いと思う
2021/04/01(木) 22:26:08.86ID:o5XCnMGW
makeの欠点はシェルの文法を混ぜ込むことだよな
2021/04/01(木) 23:47:14.73ID:I05CY+G0
>>219
ちゃうねん、もう一声!
ひとつのターゲットの中での最後じゃなく、依存関係にあるターゲットでも、並列のターゲットでも、とにかくすべての最後に処理をやらせたいんや。

ちなみに、そのページは見てたけど、流してたわ。w
あらためて見直すと、意義がわかった。
ありがとやで!
2021/04/01(木) 23:49:43.54ID:I05CY+G0
>>222
「$」がとくにな。。。
make変数とシェル変数と正規表現行末とエスケープで混乱しがち。orz
2021/04/02(金) 00:09:16.86ID:sr96G99p
>>223
```sh:build.sh
trap 'echo end' EXIT
make
```

./build.sh
2021/04/02(金) 02:22:57.94ID:xkKIrGbu
>>225
ちなみに、>>219のリンク先にも、.ONESHELLからのtrap+makeがあるんや。
たしかに、make関数とかで引数をこねまわしたら、なんとか思ったことができはするんやろうけど、しかしそれもなあ。。。

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

さっぱりきれいな方法があったら頼むわ!
2021/04/02(金) 02:28:01.75ID:sr96G99p
Pythonスクリプトの問題点

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

なんでPythonのようなタスクを行うのに
適してない言語を使おうとするのかわからない
2021/04/02(金) 11:31:17.73ID:ebi/L5xP
make相当のもあるし最近良くなったので(PEP517)、python+c拡張のプロジェクトでなら従った方がいい
わざわざビルドプロセスだけpythonで書いて添えるんならやめとけ
2021/04/02(金) 13:02:49.67ID:xkKIrGbu
>>227,>>228
どっちでもないから心配すんな。w
makeはビルド以外でも使えるんやで!
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で書くと倍以上にコードが長くなるだろう
2021/04/02(金) 13:27:11.24ID:s72UfXRI
それもよく言われるけど落とし穴が多すぎる、現にハマってるようだし他の方法を考えた方が
2021/04/02(金) 13:27:52.24ID:s72UfXRI
>>229宛てね
2021/04/02(金) 13:36:01.88ID:ebi/L5xP
なるべく基本ユティリティでやりたくて、makeで融通が効かないタスクの自動順序解決&実行ならtsortを使うのが良い
2021/04/02(金) 13:46:20.17ID:ebi/L5xP
何がやりたいのか小出しでよくわからんね
makeはtsort+ビルド向けの機能のセットであって、ビルドに使わないなら必要としてるのはtsortの部分だろ
2021/04/02(金) 14:06:24.57ID:qkslRrVn
具体的にどうタイムスタンプ(に限らないが)を取ってきてコマンドと結合しtsortにかけ、出力を整形して実行するのか
みたいな事なら答えてやれるし、それがこのスレの趣旨だろう
2021/04/02(金) 14:16:05.96ID:W1Cqjj5x
単にタスクランナーとして使ってるだけかもしれんし、質問者が出してない情報を推測であれこれ言うのはやめよう
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
2021/04/02(金) 17:37:09.20ID:sr96G99p
POSIX中心主義ってあれ生きてるの?
もう虫の息なきがw
2021/04/02(金) 18:12:13.70ID:Ka7wreYU
煽ってくる質問者なんてほっとけ
2021/04/02(金) 18:17:16.53ID:hbCxlU+U
移植性や持続性っても、
移植性ってただ他でも動くでしかないし、
持続性ってただ変わらない=古いのに固執でしかないし
メンテナンス性は軽視もしくは考慮外だからな(命名のいい加減さから考慮してないだろうなw)
その面が実務者(新しい人だけど)に公にやんわりとw指摘されて瀕死かな
2021/04/02(金) 18:25:37.14ID:2zuzxBMS
>>240
日本語でOK
2021/04/02(金) 18:35:13.75ID:hbCxlU+U
自分の無知を人の日本語wのせいにするんじゃないよ
2021/04/02(金) 18:42:19.12ID:ebi/L5xP
tsortはmakeのような動的依存解決&コード生成に使う発想は無かったわ

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

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

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

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

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

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

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

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

ところで、誰かtime したかー?
2021/04/02(金) 23:12:36.74ID:nXGaO3xM
タスクランナーなら、

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

makeコマンドが入っていれば、makeコマンドで実行できるし
入ってないならMakefileの中を見て
そこに書いてるサンプルを直接実行するもの
2021/04/03(土) 00:23:20.08ID:r67/WY6G
makeがcで書かれてるからといってcでルールかかない
2021/04/03(土) 00:24:59.87ID:r67/WY6G
のと同じか
スレチぎみだけどbashで書けるオススメおしえろ
2021/04/03(土) 00:28:21.58ID:YB/KO+42
> bashで書けるオススメおしえろ
どういう意味?

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

シェルオタとしては上の方に出てるtsort実装もやってみたくはある
2021/04/03(土) 00:40:42.08ID:YB/KO+42
>>261
ルールって何?ルールがなにもないんだけど?
2021/04/03(土) 00:42:44.05ID:r67/WY6G
ごめん、多分タスクランナーという言葉の解釈違いだわ
初めて聞いた言葉なので、>>236の用例を借りました
適切な順序で実行する必要があるコマンドの実行(但し非ビルド用途
2021/04/03(土) 00:52:45.70ID:r67/WY6G
>>262
connect: lounch-serverみたいな感じ、これなら生tsortでも済むけど
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を呼び出せばいいだけだし
シンプルな手続き型で書けることを
知らなきゃわからない独自の定義構文で書くのってアホらしいと思う
2021/04/03(土) 00:55:23.30ID:r67/WY6G
依存とレシピを同一視できるのが強みじゃないかな
2021/04/03(土) 00:56:16.66ID:YB/KO+42
なんのために?
2021/04/03(土) 00:57:18.69ID:r67/WY6G
簡潔性
2021/04/03(土) 00:58:12.59ID:YB/KO+42
>>265がより簡潔になるというのなら
それを見せてほしいが
2021/04/03(土) 01:06:37.77ID:r67/WY6G
>>269
適切な順番に並べたのなら書き直さなくていいよ、適切に並べる為の仕組みの話で
あと簡潔というのは各記述の話であってコード全体が簡潔になるという意味ではないぞ…むしろトポロジカルソート直列化後のコードは一般に冗長になる
2021/04/03(土) 01:14:42.13ID:r67/WY6G
つーかいい実装無いか尋ねてる俺になぜ聞く…
独特のレス見るに月末に初心者イビってた奴か?
2021/04/03(土) 01:14:50.26ID:YB/KO+42
適切に並べる為の仕組み?
どの順番で実行すべきかなんて人が知ってる
2021/04/03(土) 01:16:18.50ID:r67/WY6G
などとautotoolsもcmakeもわけわかんねー事をほざいでおります
2021/04/03(土) 01:18:13.59ID:r67/WY6G
タイポしちゃった、わけわかんねー、の前に、"も理解できないオッサン"を補って読んでください
2021/04/03(土) 01:20:35.91ID:YB/KO+42
>>273
autotoolsもcmakeも「発生した問題」を解決するためのツールであって
問題が発生してないのに、使うものではないと言ってます。
タスクランナーごときで問題が発生しますか?

まさにKeep it simple stupidの話だよ
シンプルにしておけ
2021/04/03(土) 01:34:22.75ID:r67/WY6G
>>275
やっぱ分かってねえじゃん
問題が起きないようアルゴリズムに任せるとこは任せましょう、というツールだよ…
そしてそのアプローチはカジュアルユースにも使えるよね?
2021/04/03(土) 01:37:02.86ID:YB/KO+42
> 問題が起きないようアルゴリズムに任せるとこは任せましょう
無理です。どちらにしろ人間が依存関係の情報を書かなければいけません。
単に書き方が変わってるだけです。
2021/04/03(土) 01:41:25.51ID:r67/WY6G
そういう意見はここじゃやくてそれらのツール、あと
>>252
Jenkins,
Ruby のRake, Thor,
JavaScript のnpm scripts, gulp
のメーリスにでも投稿してくれ
もしかしたら世の役に立たないこともないかもしれん
2021/04/03(土) 01:44:38.22ID:YB/KO+42
ここまでレスの応酬を続けておきながら、
今更そんなレスをするっていうのは
これ以上言い返せなくなったからということなんですね
2021/04/03(土) 01:44:39.70ID:r67/WY6G
昨日結構賑わいあって久々に良い感じの雰囲気だったのに、ID真っ赤にして空気乱してすまんかった
大人げない、反省
2021/04/03(土) 01:45:59.57ID:ANUlY9KL
>>279
ああもうそれでいいよ、君の勝ち
おめでとう
2021/04/03(土) 01:53:31.65ID:YB/KO+42
>>281
お前が、俺の勝ちに見えるのなら、そうなんだろうな
2021/04/03(土) 01:56:49.08ID:K2jZ2c+V
こいつが絡むといつもこう、目的が↑これが冗談じゃないからな
2021/04/03(土) 13:13:41.11ID:eS+08rtw
チャンピオンの誕生を祝して専スレを建てよう
敗者も向学のためご一緒にどうぞ
2021/04/03(土) 13:19:21.91ID:G0wsjcxM
それは良い考え。チャンピオンを称えてそうしてくれるとありがたい
2021/04/03(土) 15:48:41.71ID:cpKOTPf8
>>236
当たらずとも遠からず。
目的は、サーバーテスト。
で、テスト終了後にサーバーを始末したかったんや。。。

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

>>235
tsortを持ち出す教える君は、上から教えたい気持ちが漏れすぎやで!
https://togetter.com/li/1685
2021/04/03(土) 15:51:10.04ID:cpKOTPf8

リンク先を間違った。orz
https://togetter.com/li/1685635

電車が揺れすぎなんや!
288デフォルトの名無しさん
垢版 |
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
289252
垢版 |
2021/04/04(日) 06:36:12.78ID:0QnJQanX
まさに、それを書きやすくしたのが、

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

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

という構成で、タスクは並列可、prepareは超重い、となると、makeが最適解やろ。
2021/04/04(日) 15:51:18.30ID:Y9bxvDcN
>>295
じゃお前が具体例だしたら?
想像できるって言ったんだから言えるよね
それとも口だけ?
2021/04/04(日) 15:53:37.76ID:Y9bxvDcN
>>296
task1 &
task2 &
task3 &
wait

でおわりやん
2021/04/04(日) 16:57:04.88ID:WsuFFQM2
狂犬
2021/04/04(日) 19:44:32.02ID:rmqTiba5
>>298
勝手に終わりにしとるだけやん!w
2021/04/05(月) 04:28:41.70ID:gsx4ZFoJ
終わりじゃない理由でもあるの?
2021/04/05(月) 06:19:20.07ID:3jUc8O+L
prepare無視して勝手に終わりにしてるってとこだろ
無視というかただわかってないからだろうけど
2021/04/05(月) 06:33:48.44ID:Ir9xQslo
そう言われてから出すとしたら等価ではないのをまた出しそうでだな
304デフォルトの名無しさん
垢版 |
2021/04/05(月) 08:37:32.95ID:gsx4ZFoJ
その前にprepareが何なのか言えよ
ただ実行する以外に何が違うのか書いてないのに
あとつけで違うとか言うなよ
2021/04/05(月) 08:49:07.73ID:Ir9xQslo
わかってないこと多すぎなのになぜもそう偉そうなのか
2021/04/05(月) 09:09:31.93ID:Ir9xQslo
>>304
prepareはprepareだろう。その意味意図がわからないのはちょっとなあ
知らないのにそんなに偉そうなのは恥以外の何物でもない、恥の上塗りだな
>>296がそう意図してるのかは不明だが、>>296のでできるのは>>298だけじゃないからな
親切なヒントやったぞ。さあ、どうぞ
2021/04/05(月) 10:59:23.34ID:gsx4ZFoJ
>>306
じゃあそれ以外の意図があるならそれを書いてくれ

task1関数、task2関数、task3関数 の一行目に
prepare関数を実行すれば終わりだろ?
2021/04/05(月) 11:01:51.92ID:gsx4ZFoJ
複数のタスクを指定したときにprepareを一回しか実行しないというのであれば
all関数の最初に一回だけ書いてもいいし
フラグを使って一回だけ実行するようにしてもいい(たった一行で実現可能)
動かしたい通りに書けば良い
2021/04/05(月) 11:04:18.21ID:i9PX2oQn
気持ち悪いスレだなあ
2021/04/05(月) 11:04:54.93ID:gsx4ZFoJ
leftpad事件と同じ匂いを感じててしまうな
われわれ(俺除くw)はこんな簡単なコードも書けなくなってしまったのか?
2021/04/05(月) 11:22:30.40ID:i9PX2oQn
>>284
棲み分けられるか正直疑問だし、御高説垂れにくい初心者スレ的なのはどうだろうか
2021/04/05(月) 11:52:33.18ID:qeGrbie0
>>308
そんなクソコードに頼らずとも使えるのがmakeなんやで!w
2021/04/05(月) 12:42:09.26ID:gsx4ZFoJ
>>312
makeはすぐ複雑化するよ

http://quruli.ivory.ne.jp/document/make_3.79.1/make-jp_16.html
C. 複雑なMakefileの例
ここにGNU makeプログラムのmakefileがあり、それは比較的複雑なものです。
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も示されています。
2021/04/05(月) 12:52:05.95ID:4wNso/hW
Makefileが複雑化するのはビルドする工程が複雑化しているという別の問題の顕在化でしかないでしょ

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

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

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

つまり>>314に書いてあるタスクの殆どはmakeを使う必要がないってこと
2021/04/05(月) 13:28:19.87ID:qeGrbie0
>>317
見辛いシェルスクリプトコードならファイルにしたらええのに。w
2021/04/05(月) 14:41:15.13ID:VlUSW8N+
そもそもシェルスクリプトでファイル間の依存関係を定義するのに疲れたから make が生まれたと思うんですけど...

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

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

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

Makefileみればわかるって?それはソース見ればわかるって言ってるようなもんだし
依存関係を見たいんじゃなくて、makeで直接実行することを目的としたタスクの一覧が見たいんだよ
2021/04/05(月) 16:03:10.00ID:r6jGhjiZ
>>300-302から自ら>>304と馬鹿な自分を自己紹介しておいてw
何でそうも偉ぶりたいのか。まともな神経あったらそんな態度は取らないわなあ
さすがだな
2021/04/05(月) 16:07:12.70ID:rGWHafb6
>>322
「ただ実行する以外に何が違うのか書いてない」に
対してレスはなにかありましたか?
それが答えだよ。
2021/04/05(月) 16:13:51.85ID:r6jGhjiZ
そのレスはコーダーと呼ばれる人種っぽいレスだな
いや、普通の日本語の文もそうだが読み取る能力が欠けてるだけだな
それは矮小化した自分に都合の良い条件でしか考えられないからだな
プロジェクトwwとか関係ないよ、ソース読めないといってるのと同じだな今回は
2021/04/05(月) 16:14:36.43ID:rGWHafb6
そんなレスは誰も求めてないよ
2021/04/05(月) 16:17:39.09ID:r6jGhjiZ
懲りずに
矮小化した自分に都合の良い条件
かよwそれこそ誰も求めてないぞ
2021/04/05(月) 17:28:04.19ID:qeGrbie0
>>321
ターゲットを調べたければ、sedでも使ったらすぐにわかるやん。w
2021/04/05(月) 20:09:00.48ID:nAjTTeFT
気持ち悪い煽りだな
2021/04/05(月) 20:33:09.06ID:Oftt9CcS
ルビキチ臭
2021/04/05(月) 21:07:57.60ID:rGWHafb6
>>327
ターゲットじゃなくてタスクを見たいんだってw
例えばシェルスクリプトなら--helpして分かりやすいusageが
表示されるように作るだろ?

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

thor list,
thor タスク名

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

タスク定義の仕方も決まっているので、保守しやすい。
シェルスクリプトでは、各人で書き方を変えるから、保守できない
2021/04/05(月) 21:21:58.48ID:VlUSW8N+
こいつがまともなレスしてるの初めて見たぞ... 明日も雨か?
2021/04/05(月) 21:22:55.94ID:qeGrbie0
>>330
自分で書く話なら、helpターゲットをつくったらええがな。w
実際、そういうmakefileを、おまえは見たことがなくても、ワイは見たことがあるで?
2021/04/05(月) 22:30:31.71ID:Oftt9CcS
あいつは何を言いたい何をしたいんだかな
何をしたいのかは「勝ちたい/負けたなくない」wwなのは明白だったか
2021/04/05(月) 22:47:11.83ID:rGWHafb6
>>333
だから結局そうなるから
Makefileに利点がないんだって
中身が複雑になる。そして利点がない。
2021/04/05(月) 22:48:23.80ID:rGWHafb6
>>331
thorのコードのほうが複雑になる

シンプルにしておけと言われるのに
なぜか複雑になる
2021/04/05(月) 22:56:26.91ID:Oftt9CcS
だから結局そうなるってwこいつの頭の中身はどうなってんだよ、ほんとに
利点を争ってるwのはそこじゃないだろうにな
「勝ちたい/負けたなくない」wwすぎて誤魔化しがカオス
2021/04/05(月) 22:59:22.09ID:Oftt9CcS
まあ、チャンピオンはこうだからチャンピオンなわけで、誰も勝てないわな
さすがチャンピオン
適当に諦めて試合放棄してもいいよ、挑戦者
2021/04/05(月) 23:00:22.41ID:rGWHafb6
それなら勝ち負けじゃなくてmakeの利点・欠点の話をすればいいじゃん
俺はずっとmakeの話をしてるんだが、お前は俺の話しかしてないじゃん
2021/04/05(月) 23:02:35.31ID:rGWHafb6
もちろんシェルスクリプトのスレだから
makeよりもシェルスクリプトの方が良いっていう話ね
あと今更言わなくてもわかると思うけど、タスクランナーとして使う場合
2021/04/05(月) 23:03:21.85ID:Oftt9CcS
お前に無駄な挑戦はしないww観客がヤジるくらい許せよ、チャンピオンなんだから
てか「勝ちたい/負けたなくない」wwはお前だけだぞ、言っておくが
すんなり「それなら勝ち負けじゃなくて」って言葉出るのな、さすがチャンピオン
2021/04/05(月) 23:03:56.47ID:VlUSW8N+
タスクランナーとして使う場合の話だったのか、それなら好きなのを使えばいいよ...
2021/04/05(月) 23:20:17.04ID:i9PX2oQn
ほんそれ
原理主義者ってこえーわ
2021/04/05(月) 23:23:23.69ID:rGWHafb6
>>341
自覚してないと思うんだけど、お前のそのレス、またシェルスクリプトの話にはなってない

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

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

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

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

補足しておくな

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

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

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

task:

↑これだけなんだよ

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

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

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

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

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

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

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

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

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

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

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

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


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

だからなんなんだろう?

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

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

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

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

>>358
すでにされてることを何で繰り返さなければならないのか
お前のルールなんて知らんwオレオレルール押し付けすぎだろう
2021/04/06(火) 01:12:56.30ID:+n99AGjS
シェルスクリプトかMakefileのコードは?
2021/04/06(火) 01:13:32.15ID:+n99AGjS
反論がないからもう一度書くね

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

task:

↑これだけなんだよ

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

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

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

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

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

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

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

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

まあ、それがプログラムとしてはふつうなんやけど、makeに比べると、makefileがルールとして記述するだけやから、そりゃあかなわんわなあ。w
2021/04/06(火) 01:39:22.54ID:bGyEcdYQ
億倍ww
シレっと煽るねえ(もしくはウィット入れるねえ)
だが、チャンピオンには通じないぞ、マジでそう受け取るぞw
2021/04/06(火) 02:36:53.08ID:Zjnr+Ca7
>>316
gnuのtsortは-fで視点グリグリできないからあかんね、珍しくBSDの方が便利なコマンド
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 # ヘルプ表示

(やる前から同じように書けるはずだって気づかないもんですかねぇ)
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
2021/04/06(火) 05:42:39.64ID:MTiaA6bM
>>367
> だが、チャンピオンには通じないぞ、マジでそう受け取るぞw
安心しろ。億倍はネタだとわかってるぞ
でも数行増えてしまうと考えてるんだろう
実際には0倍だっただけどな
2021/04/06(火) 07:06:03.54ID:dc8Xc+ex
>例えばシェルスクリプトなら--helpして分かりやすいusageが
--helpじゃないのか
シェルスクリプトに拘ってるのにスタイルは簡単に捨てるのか
make help
は、それもスタイルだからな。何でもアリなら、何でもアリでええやん
2021/04/06(火) 07:18:08.96ID:MTiaA6bM
こう変えるだけで変更できる簡単なツッコミはいらんて

for target; do "${target#--}"; done
2021/04/06(火) 07:34:25.05ID:dc8Xc+ex
言われたら対応してるだけだな
--target1
は、許すんだな。まさかそんな小手先で来ると思わなかったぞw
何でもアリに変わりないやん
2021/04/06(火) 07:48:24.00ID:dc8Xc+ex
自分の目的なら色々自分スタイルでいいと自ら自己紹介してるのに、他の人がするのは絶対許さないというカオスぶり(というより単に自己中かw)
やっぱりカオスだな、技術的なことwは無駄だなと思わせるだけだなっていう
2021/04/06(火) 08:23:20.52ID:MTiaA6bM
お前単に自分が気に食わないって言ってるだけじゃんw
2021/04/06(火) 08:38:17.44ID:dc8Xc+ex
「一貫性のないのや何もわかってない理解してなさそうなのに」偉そうに振る舞うのに「一貫性のないのや何もわかってない理解してなさそうなのに」部分にヤジ入れてる感想入れてるwだけだな
自分が気に食わないってしか捉えられないお前の思考が浅い(すぐ上のでも顕著なようにw全てに言える)だけだな
まあ単にそう貶めたいだけなんだろうけど、チャンピオンとしては
2021/04/06(火) 08:41:47.63ID:MTiaA6bM
一貫性がないとかいう主張の中身が、お前が気にいるかどうかでしかない
例えば、git helpでgit --helpと同じヘルプが表示される
2021/04/06(火) 08:47:35.34ID:dc8Xc+ex
--helpってお前が言い出してるんだけどな
--helptってお前自身そう思ってたくせに
そういう一貫性だよ、お前自身のな

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

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

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

戦うwwwさすがチャンピオン。>>377って言ってるのに、いつも戦ってるチャンピオンは、ホントにもうw
2021/04/06(火) 08:55:42.05ID:dc8Xc+ex
(短時間、連投来たなあ。さすがいつも戦ってるチャンピオンw)
2021/04/06(火) 08:58:18.00ID:MTiaA6bM
やはりレスの相手はコードではなく俺
2021/04/06(火) 09:04:16.76ID:dc8Xc+ex
>>382
>--target1
>は、許すんだな
は?
そういう見え透いたカオスなこと言うんだから、チャンピオンは
なんかhelp(プログラムでのコマンドがある場合)ではしゃいでるwようだけど、自己都合でしかないよw

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

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

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

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

もちろんお前(に限らず)がそうしようがお前の勝手だから問題だとは思わんよ
他人のやり方にアレコレダメ出しするお前はどう答えるのか当然先に聴きたくなるのは当たり前じゃん
馬鹿な墓穴掘り質問だから尚更wいつもの浅知恵レスだから尚更尚更、質問したくなるじゃん
2021/04/06(火) 09:20:32.67ID:dc8Xc+ex
(また変な浅知恵、何とか貶めたいだけwのをわざわざ探してきてんな)
2021/04/06(火) 09:20:36.35ID:MTiaA6bM
あ、ごめん。先に「質問に質問で返す人の心理について」について読んじゃったw
2021/04/06(火) 09:20:55.48ID:MTiaA6bM
ではもう一回聞くね

それでコードに問題あるの?問題ないの?
その解決策は自分で思いつけないの?
いいからコードの話をしなよw
2021/04/06(火) 09:21:53.66ID:dc8Xc+ex
戦うチャンピオン、スカってるぞ。頑張れw
2021/04/06(火) 09:23:49.17ID:MTiaA6bM
※ コードの話をしろよといった次のレスがやはり俺の話
2021/04/06(火) 09:25:00.64ID:dc8Xc+ex
え?答えないの?ww
また何度も繰り返す、困った時のフレーズですか?
2021/04/06(火) 09:28:37.03ID:MTiaA6bM
コードに問題はないよ

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

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

コードに問題なければいいなら、Makefileで問題なければいいってことになるだろうに
自分だけは例外は許されへんな
2021/04/06(火) 09:33:48.52ID:MTiaA6bM
> 答えてるんですけど

次のレスは、どのレスで答えてるかを書くだけでいいよ
2021/04/06(火) 09:34:52.15ID:dc8Xc+ex
何でそんなに偉そうなんだかなwww
>>391
>もちろんお前(に限らず)がそうしようがお前の勝手だから問題だとは思わんよ
2021/04/06(火) 09:34:55.28ID:MTiaA6bM
まだ?
2021/04/06(火) 09:35:55.88ID:MTiaA6bM
>>401
コードに問題があるか、コードに問題ないか、答えてないよね
コードに問題あるかどうかは言わずに、
それでいいよって言ってるだけだよ
2021/04/06(火) 09:36:46.41ID:MTiaA6bM
コードに問題がないなら>>369のmake.shでいいじゃんなw
2021/04/06(火) 09:37:44.50ID:MTiaA6bM
コードに問題がある or 問題がない・・・これはコードの問題
お前がそれでいいと思うならそうなんだろうな・・・これはコードではなく俺の話
2021/04/06(火) 09:38:03.38ID:MTiaA6bM
訂正

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

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

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

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

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

シェルスクリプトのコードに問題ないなら
シェルスクリプトのコードでいいでしょ?
2021/04/06(火) 09:53:53.30ID:MTiaA6bM
>>412
だから俺の話じゃなくて、コードの話をしたら?
Makefileの利点の話をしたいんでしょ?
2021/04/06(火) 09:56:33.41ID:7tHYoHIo
浅知恵はすぐ働くくせに、少しは頭をちゃんと使おうな
コードに問題なければ と言い出したのはなぜか自問してみ

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

それだけのことだと思うが?
2021/04/06(火) 09:58:01.09ID:7tHYoHIo
>>414
すでに出てる
理解できないお前には無理のようだが。金くれるならじっくり教えてやるぞw
2021/04/06(火) 09:58:49.67ID:MTiaA6bM
すでに出てるものは全て否定したんで
その結果>>369のシェルスクリプトのコードになったんだよ
話の流れを理解してないようだね
2021/04/06(火) 10:01:54.70ID:TYYwd7pV
>>369
シェルスクリプトのオプションの話をしてたはずなのに、ただのターゲットに変えるとか、コスいことすんな!w

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

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

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

>>418
否定してると思い込んでるのはお前だけだぞ。浅知恵でのでしかないからなw
2021/04/06(火) 10:03:14.47ID:MTiaA6bM
>>419
いえ、シェルスクリプトには問題ないとのことです。はい。
その話は終わりました。
2021/04/06(火) 10:03:46.44ID:7tHYoHIo
>>419
>おまえ、忘れてるやろ?w
いつものしょっちゅうやってることだけどなww
2021/04/06(火) 10:04:01.45ID:MTiaA6bM
> なぜなら、お前が拘ってるのは他人の(Makefile使うな)に対してだろうに
何の話ですか?そんな話はどのレスでもしてませんよ
2021/04/06(火) 10:05:07.04ID:7tHYoHIo
ほらほら「あくまでも自分の都合の良い言質が欲しいだけ」だろwww
2021/04/06(火) 10:05:07.70ID:MTiaA6bM
>>419
> ちなみにもともとは、makefileでは「タスク表示」ができない、って不当なクレームがあっただけの話やったもよう。

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

ね、
>おまえ、忘れてるやろ?w
いつものしょっちゅうやってることだけどなww
2021/04/06(火) 10:09:04.06ID:7tHYoHIo
止まれ、アホみたいにながーい要因が無くなった(忘却された)ようで終わりだな
2021/04/06(火) 10:09:12.04ID:MTiaA6bM
> Makefileいいよって言っている人に突っかかってたくせに

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

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

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

先にシェルスクリプトのコードが否定されたわけですが
そのシェルスクリプトのコードは問題ないと同意が取れたんですが?
2021/04/06(火) 10:12:37.38ID:7tHYoHIo
>>430
あなたはいらっしゃらないようですよ、もう彼にはw
2021/04/06(火) 10:14:01.22ID:TYYwd7pV
あと、makeの-nとか-qとかのオプションを、シェルスクリプトで簡単にやる方法も頼むわ。
2021/04/06(火) 10:15:02.84ID:7tHYoHIo
>>431
また見え透いた自分の都合の良いのを出す(ある意味状態を模造)るんじゃないよ
2021/04/06(火) 10:15:34.36ID:MTiaA6bM
>>370
> 並列実行させたくなければ、makeは-j 1するだけで充分合理的に実行されるんやで?
POSIXじゃないので実行できない場合があります

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

並列実行したくないなら & を取るようにしましょう
2021/04/06(火) 10:16:47.41ID:TYYwd7pV
>>431
で、>>430はどうなん?w
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を呼び出すっていいましたね
2021/04/06(火) 10:20:46.70ID:MTiaA6bM
>>436
xargsの話ですか?
2021/04/06(火) 10:24:39.26ID:TYYwd7pV
>>435
> POSIXじゃないので実行できない場合があります
-jオプションの話を出したのはおまえちゃうの?w
まあ、ヤな環境は、捨てるか逃げるかしたらええで。

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

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

おまえはシェルスクリプトを使う、ワイはmakeを使う。
もうそれでええな。
2021/04/06(火) 10:34:37.59ID:7tHYoHIo
>>440
全然関係ないけど、マジ関西人ですか?
2021/04/06(火) 11:18:25.64ID:TYYwd7pV
>>441
そうやで!w
なんや?
2021/04/06(火) 11:27:15.77ID:WaPRNDqz
>>442
なるほど
使い勝手がいいからちょこちょこ(リアルでもw)使うエセ関西人やけど、
「やったらな」ってムズいなと感じ、もしかしたらとちょっと興味が出ただけです
お答えありがとうございましたw
2021/04/06(火) 19:56:38.86ID:TgvwVymv
くだらないスレだな
2021/04/06(火) 22:33:28.43ID:ceQksYZ9
と、くだらないレスしたがり
446デフォルトの名無しさん
垢版 |
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"
2021/04/10(土) 21:47:45.62ID:AcLZ31++
クソな名前出すな
2021/04/11(日) 13:12:18.88ID:kxus16p0
revはちゃんと文字単位でひっくり返してくれるんだ?
へぇー
2021/04/11(日) 13:26:48.64ID:kxus16p0
>>250
デスクトップ向けlinuxだと4KiBくらい貯めるのかな
改行のありなしやら入出力がターミナルかやら(test -t)で決めてるみたい?
tr -d \\nで改行絞った小さなテキストが延々と出てこなかったりするな
何が起きてるのか正直分からん
2021/04/11(日) 17:47:40.37ID:+rFBum4X
Standard C Library の FILE の挙動
Cでプログラム書いてみればわかるよ
2021/04/14(水) 19:37:11.29ID:35zwdl55
> ・csh/tcshでのシェルスクリプトは*まったく推奨しません*

マジだった。ちょっと興味本位でやってみたら
変数に改行を入れようとしただけで力尽きるとは思わなかったわw
2021/04/15(木) 03:22:43.97ID:06Qz2l+r
>>2の最後の行、ゆうなって馬鹿みたいだから正しい言葉遣いに直してほしいなぁと思うのは私だけ?
2021/04/15(木) 05:04:20.88ID:5nOuM6c9
言うなをゆうなって綴るの関西弁かな
2021/04/15(木) 07:26:46.96ID:kVBfEodl
言うをゆうと発音するのは標準語
言うをゆうと書くのはただのバカ
2021/04/15(木) 10:26:01.70ID:CT+ncMKm
半分ネタやろ。
どうでもええわ。

どうしてもイヤなら、次スレを自分でたてて直せ。
2021/04/15(木) 11:21:03.44ID:cwo7XkJi
>>449
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/setbuf.3.html
これ。書いてある通りそのままの動作だろう。4Kとかデフォルトは C Library による
コマンドで制御できるのは>>248のstdbuf
stdbufのソースは、FILEのこれらは外から制御なんてそもそも考えてないのでトリッキーなことして面白い
2021/04/15(木) 11:49:33.19ID:CT+ncMKm
$SHELLOPTSに「interactive-comments」と入ってるんだけど、これは何?
man bashには記述がない。。。
2021/04/15(木) 12:00:32.18ID:cwo7XkJi
man bashにもあるやん
# 以降はコメント/無視するだって
2021/04/15(木) 12:38:40.16ID:wukWzou0
"いい"も口語なんでauto。ちゃんとposix使ってください
2021/04/15(木) 13:42:52.38ID:EYZytY4L
>>456
あざっす
システムプログラミングアレルギー(manで2/3出てきたらそっ閉じ)なもんで…

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

そもそもリダイレクトはフォークする必要無いよね?バグみたいなもん?
なおパイプラインはフォークしてナンボなので合理的な設計だと思ってます
オプションlastpipe提供が現実的な妥協点かなと
465462
垢版 |
2021/04/15(木) 14:33:04.56ID:Hr/L3ezh
です
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 をすることになる
2021/04/15(木) 14:56:50.94ID:Hr/L3ezh
>>466
環境変数という手があったか
(いざ困るまでは)もちろんバッファはあった方が良いので、exportするスクリプトを書くと親からうっかりsourceしてしまいそうで…

env/インライン代入 パイプライン
にしといた方が安全そうですかね?
2021/04/15(木) 15:03:30.09ID:Hr/L3ezh
そもそもsourceしまくるのがお行儀悪いから、そっちを控えるべしなのかな?
何でもシェル関数にしてそれをソースしまくるパッケージを入れてしまって、bash -xオプション付けると何か操作する度に画面が数ページ流れてうんざりした経験が…
2021/04/15(木) 15:41:44.39ID:CT+ncMKm
>>458
ども。
探し直したよ。
あー、$SHELLOPTSではハイフンだけど、manページだとアンダーバーになってんな。。。
2021/04/15(木) 18:10:56.52ID:ddLCV2xW
>>468
マジに質問したいんだけど
sourceを何をするときに使うコマンドだと思ってる?
2021/04/15(木) 19:33:19.08ID:hKlH1+Q2
>>467
>env/インライン代入 パイプライン
stdbufを使うのと変わらないんじゃない
使うの局所化したいんだったら ( ) でサブシェルにするとかかな
472デフォルトの名無しさん
垢版 |
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
473デフォルトの名無しさん
垢版 |
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"
2021/04/17(土) 19:55:27.64ID:HVVFTxep
きたねーコードであらすな
475terai
垢版 |
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"と表示されるようになるのか教えてください。よろしくお願いいたします。
2021/04/27(火) 21:13:37.71ID:veDN2Ote
複雑な問題は複数のより単純な問題に分割すればいいんじゃないかな
まずは expect だけ実行して何が出力されるかみるところから始めなよ
477デフォルトの名無しさん
垢版 |
2021/04/27(火) 22:41:50.05ID:1A6wmpHM
batの問題じゃないの
2021/04/28(水) 06:11:06.05ID:M5uDUSOh
"|grep "bk-$(日付).tar"
tmpフォルダには、"bk-日付.tar"という名前のファイルが確かに置いてあります

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

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

PuTTY, TeraTerm, VSCode のRemote SSH などを使えば?
2021/04/28(水) 07:31:16.23ID:QZeYlOuK
>>480
>Linux(CentOS7)からsshで192.168.1.50(windows)に接続して
って書いてるじゃん
>>478もわかってなさそうだぞ
482terai
垢版 |
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
にしたらうまくいきました。ご迷惑をおかけしました。
483478
垢版 |
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
2021/04/28(水) 11:50:29.51ID:Ttx7vHwT
sshを使うなら、ええかげんにexpectなんかせんでもええようにしたほうがええんちゃう?
鍵ファイルを使えば。
485478
垢版 |
2021/04/28(水) 12:15:20.00ID:M5uDUSOh
Ruby にも、expect モジュールがある
2021/04/28(水) 12:59:54.72ID:bPhU0BTO
>>484
それは思う
セキュリティ的にも運用的にも楽だし
2021/04/28(水) 16:16:23.22ID:mi6bhbk3
だよな
488デフォルトの名無しさん
垢版 |
2021/04/28(水) 18:13:04.67ID:xybfukyI
ファイルの中に書いたマーカーの中に別のファイルを挿入するにはどうしたらいい?
例えばこんな感じのファイルがあったとして、<marker>〜</marker>の中身を
別のファイルに入れ替えたい。posixコマンドだけで

aaa
bbb
<marker>
ccc
ddd
</marker>
eee
fff
2021/04/28(水) 18:34:58.14ID:a9uMhLuq
awkだけでなんとでも書けそう
2021/04/28(水) 18:39:28.46ID:goIH39T4
だよな
釣りか?
491デフォルトの名無しさん
垢版 |
2021/04/28(水) 18:46:45.34ID:xybfukyI
C言語でもどんな言語でも書けるというだけのことなら
私も知ってますが・・・
2021/04/28(水) 18:50:26.24ID:snsrMSzN
csplit
cat head anotherfile rest
2021/04/28(水) 18:55:44.80ID:snsrMSzN
ただ行単位で分割なので適当にタグ前後に改行挿入などよしなに
2021/04/28(水) 19:02:11.38ID:snsrMSzN
csplitで2回割って3つに、真ん中を捨てcatを想定したが、regexで割れるので<marker>...</marker>を指定して一回で割った方が素直かもしらん
ファイル内に複数回マークアップが現れる時も、マークアップ+1個に割れるのでスケーラブル
495デフォルトの名無しさん
垢版 |
2021/04/28(水) 19:11:21.62ID:xybfukyI
ファイルに複数回現れるのは想定してませんでしたが
その場合は全部置き換えたいです

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

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

これは普通の状態で音が出るようになってないと使えない(というか分からない)機能だな。
ていうか、この機能って需要あるのか? どういう時に使うんだ? (耳は聞こえるけど目が見えない人向け?)
501デフォルトの名無しさん
垢版 |
2021/05/01(土) 16:29:28.92ID:djtwQ/hU
システム言語英語にしてるから気づかなかった
2021/05/01(土) 16:33:54.50ID:8vBq+4lu
目が見えないなら読み上げとか使うだろうし
ただのユーモアのような気がする
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
まあ、本気でやるならスクリプトを書くところやけど、ちょろっと待ったり確認したりするだけなら?
2021/05/01(土) 17:24:56.48ID:qPtffzbe
まあBEEPだと鳴るにしても、あんまり便利じゃないから、bellってスクリプトつくって、mpg123で小さなサウンドファイル鳴らしてたなーw
時間のかかる処理動かすときに、;bellとかやってたわw
505デフォルトの名無しさん
垢版 |
2021/05/01(土) 20:54:25.86ID:mMPVMQKF
>>500
日本語マニュアルは古いからな
Ubuntu 20.04のbashのマニュアルなんか
英語版は当然bashのバージョンと同じ5.0(2018年)のマニュアルが入ってるが
日本語版だと4.2(2010年)のやつだからな

あとpingに音がなる機能は便利だぞ
pingで音を鳴らしながら断線チェックするんだよ
断線しかかってるケーブルがあれば触った時に音がなったり止まったりするだろ
一人がディスプレイの前にいて「あ!そのケーブル触ったときに繋がりました!」
なんて叫ぶ必要がなくなるから、一人でも作業できる
2021/05/01(土) 21:24:12.83ID:j1QPmhQJ
>>805
その最後の為にってのが本当かもね
https://ftp.arl.army.mil/~mike/ping.html
同じこと書いてる。当時は-aは無かったようだが
2021/05/01(土) 21:43:09.83ID:j1QPmhQJ
>>506
>>505 の間違い
army.mil って、米軍(組織の一部)のサイトか
軍人か。pingって名付けるのも発想も納得だな
508デフォルトの名無しさん
垢版 |
2021/05/01(土) 22:42:41.06ID:mMPVMQKF
軍人は卓球が好きだったんか?
2021/05/01(土) 22:53:01.56ID:/E4OYG0J
https://gigazine.net/amp/20200809-story-of-ping
もあるな。

しかし、Navyならわかるが、Armyなの?w
2021/05/01(土) 22:56:49.66ID:oDxNWiQE
軍関係者、それも技術者研究者ならそんなナワバリとか無いんじゃね
陸軍でも海軍のそういうのは知ってはいるだろう一般知識的な
事故死で亡くなってるのね。世界的貢献度が高いし有名だから残してもいるのかな
2021/05/01(土) 22:59:35.67ID:oDxNWiQE
>>508
全然関係ないぞ、ソナーのって書いてるじゃん?
冷戦時潜水艦戦な小説読めばわかるぞ
まあ、ボケなんだろうけど
2021/05/02(日) 00:08:11.78ID:r2Ed4Ypi
>>505
ナルほどナルほどw確かに便利だねw
昔、ネットワークエンジニアやってた時を思い出してほのぼのしてしまったw
2021/05/02(日) 00:20:14.06ID:AuvpVVY/
>>508
それはping-pong。
ちなみにping-pongにしようとしたが商標の関係でpongだけになったパターンが。
2021/05/02(日) 01:01:49.26ID:AuvpVVY/
BSD系のpingは応答があるとき鳴るのとないとき鳴るのと2つオプションがある。
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)
2021/05/09(日) 18:41:45.38ID:SrZZvaGV
チラシの裏に書くのがおすすめだよ
2021/05/09(日) 18:46:46.40ID:POHrmQr6
だな
普段あんなの視界外なのからは何宣伝してんのとも思えなくもない
2021/05/09(日) 18:58:58.35ID:QngfRO5p
やぶ医者 語源 でぐぐったら一番最初にこれが出てきてワロタw
https://www.kanken.or.jp/kanken/kankantown/trivia/trivia2.html

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

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

その後のUbuntuでもPOSIX縛りではないからな
まあPOSIXでも書けるならPOSIX準拠にするだろうけど、ああいうプロダクトでは
2021/05/10(月) 19:19:20.01ID:jJW0aId3
Ubuntuで何があったんだっけ?
2021/05/10(月) 19:47:37.47ID:hErX5Z2R
しばらくbashだったがdashに変えた。bashのPOSIXモードで動くように書いてたのに動かないやんけっていう
bashism問題に当たった最初のそれなりのスクリプトの数があるプロダクトがUbuntuじゃないのかな
もしくはちゃんと文書化して残したプロダクトかもだが
2021/05/10(月) 19:56:07.55ID:wjJJgxye
必要ないからだろ
bash必要ならインストール
2021/05/10(月) 19:58:31.16ID:hErX5Z2R
GNU/Linuxだからログインシェル用には必ず入っていそうだが
2021/05/10(月) 20:11:08.73ID:hErX5Z2R
>>523,524 がそもそも何か勘違いしてるだけだな
(>>528も。普段はインタラクティブでdashなんて使ってるのか?)

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

GNU/Linuxはログインシェルはどのディストリでもbashだろうな
変わったディストリはあるかもしれないが
FreeBSDはtcsh、OpenBSDはkshみたいだな。macOSはzshか。BSD系は色々(歴史的に)ありそうだな
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オンリーのシェルじゃないってのが問題
2021/05/11(火) 07:58:52.53ID:FhvqefgH
トレースしてるだけ
2021/05/11(火) 12:39:30.70ID:PU80Jyjy
極論だが古典的なシステムでは /bin/sh は POSIX 準拠でさえないんだから
POSIX 準拠厨はシェバンに #!/bin/dash って書くべき
2021/05/11(火) 12:44:51.27ID:1enRFFJU
>>535
POSIX準拠厨はPOSIXに準拠するなっていってんの?
2021/05/11(火) 13:12:35.75ID:ZJle8Vfo
dash用スクリプトを書くのにbashのデバッグ機能は必須(というほど大したもんでもないが…)
2021/05/11(火) 13:27:42.49ID:rqNaE/tz
>>535
今時の /bin/sh の最低限度がPOSIXなんだよ
POSIX以前の /bin/sh が現役(古いどころではないOSを無理に今でも使ってるではなく、現代的なOSでという意味での)なのはどこにあるの?
2021/05/11(火) 14:27:39.20ID:nf224V10
dashならPOSIX準拠、と信じてしまうのも、経緯的によろしくなさそうやけどなあ。

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

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

Alpine Linuxのbusyboxは 805.6KB
この中にシェルだけではなくcpやrmやawkなどの
よく使うコマンドが大量に詰め込まれてる
544デフォルトの名無しさん
垢版 |
2021/05/12(水) 00:44:00.91ID:w4TAZAbA
Alpineのbashは742.3k、dashは106.3kだな
それからdashを使うのは環境が極小だからと言うよりも
bashがPOSIXに準拠してないからだ
545デフォルトの名無しさん
垢版 |
2021/05/12(水) 00:46:26.43ID:w4TAZAbA
極小環境で現役なもの = 組み込み
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 だの書いた方がいいんじゃないか?
547デフォルトの名無しさん
垢版 |
2021/05/12(水) 00:47:51.03ID:w4TAZAbA
>>546
> /bin/sh が POSIX 準拠していない bash の環境もあるんだから
だから、それはシェルスクリプトの問題じゃない
bashを使ってるシステム側の問題
548デフォルトの名無しさん
垢版 |
2021/05/12(水) 00:48:09.14ID:w4TAZAbA
#!/bin/sh はシェルスクリプトに書くものだってわかってる?
549デフォルトの名無しさん
垢版 |
2021/05/12(水) 00:49:26.60ID:w4TAZAbA
POSIXシェルで書いてる人は、dashで動かすなんて想定してないからなw
2021/05/12(水) 00:50:03.00ID:1N3VwigT
>>545
いや、今どき組込システムで bash じゃなくて dash 使わざるを得ない程メモリが
逼迫しているか?って話よ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

???

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

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

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

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

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

readlink -f /bin/sh
/bin/dash

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

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

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

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

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

これを人が読めるように戻すにはどうしたらよいでしょうか?
またshellのコマンドはプログラム言語は何で書かれているのでしょうか?
2021/06/06(日) 19:25:46.16ID:a60f9MS4
$ objdump -d -j .text /usr/bin/cp
2021/06/06(日) 19:47:31.05ID:czQb8XNZ
>>667
> shellのコマンドはプログラム言語は何で書かれているのでしょうか
だいたい全部と言っていいほど、Cだな
ほぼ全部OSSなんだから、全てのコマンドのソースがネットに普通に置いてある
670デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:48:12.73ID:P8Y1M++D
>>669
それはLinuxだろ
2021/06/06(日) 19:50:10.61ID:czQb8XNZ
>>670
BSDもだけど。macOSもな
672デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:53:49.73ID:P8Y1M++D
なんかずれてるな
673デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:55:06.72ID:P8Y1M++D
オープンソースとそうでないものがあって、そもそもはオープンソースでない方が元。
2021/06/06(日) 19:55:15.47ID:czQb8XNZ
お前が何を噛みついてるのかわからん
お前がズレてるんだろうがぁ
2021/06/06(日) 19:59:04.19ID:czQb8XNZ
>>673
イミフ。何を言いたいの?
shellのコマンド(ex cd・cp・find ...etc)=一般的なコマンドは、>>669の通りだけど
OSSでないそうでないものって何?
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を作ってるサイトとかに書いてある
2021/06/06(日) 20:03:14.27ID:wmjhjcQW
>>674
世界で一番最初に作られたcpを見つけだせ!
とかいいたんじゃね?www
2021/06/06(日) 20:04:40.72ID:wmjhjcQW
しかしオープンソースじゃないcpってあるんだろうか?w
unixのソースコードも公開されてたよね?
2021/06/06(日) 20:05:20.51ID:czQb8XNZ
>>677
それでも、イミフだわあwOSSやんww
最初の(?)UNIXもソース提供だったな。それもネットに丸ごと今でもあったりするな
2021/06/06(日) 20:11:51.24ID:a60f9MS4
System V とか Microsoft Xenix とか BSDI のコマンドとかだったりして
681デフォルトの名無しさん
垢版 |
2021/06/06(日) 20:24:40.79ID:JMlL8BLG
>669 676
ありがとうございます。GitHubでソースコード拝見しましたが
C言語難しいですね。
682デフォルトの名無しさん
垢版 |
2021/06/06(日) 22:11:42.25ID:aDY6ROlo
標準出力の速度を制限したり、通信速度を表示するコマンドってないでしょうか?
2021/06/06(日) 23:47:07.17ID:2q78RNEI
https://mevius.5ch.net/test/read.cgi/unix/1533154936/435
https://mao.5ch.net/test/read.cgi/linux/1555068129/41
2021/06/06(日) 23:58:07.43ID:///+rfU8
https://www.google.com/search?q=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E9%81%85%E5%BB%B6+%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF

コマンドとしてはないやろう。
2021/06/07(月) 02:17:17.72ID:pO0RV8yO
Pipe Viewer とか
http://www.ivarch.com/programs/pv.shtml
686デフォルトの名無しさん
垢版 |
2021/06/07(月) 11:24:53.90ID:4bgMFjRA
>>685
ありがとうございました!
687デフォルトの名無しさん
垢版 |
2021/06/08(火) 14:08:09.66ID:OYNrrHpJ
誰かいます?質問いいですか?
688デフォルトの名無しさん
垢版 |
2021/06/08(火) 16:02:21.82ID:CHrXnr0w
ff fb 20
689デフォルトの名無しさん
垢版 |
2021/06/08(火) 19:32:55.59ID:VAaMDIwe
.bashrcのaliasでnohupしたいんだがどう書けばいいの?

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

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

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

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

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

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

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

上司「なんでこんなコードにしたの?」
馬鹿「知りません。5ちゃんねるでこれが正しいって聞きました!」
2021/06/14(月) 21:29:27.91ID:0x3Kpqg0
>>699
なんのためのsudoなの?w
起動側のワイルドカード処理ではダメなケースが多かろう。
2021/06/14(月) 21:32:42.19ID:0x3Kpqg0
>>700
ほっとけよ。
それでもべつにええがな。

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


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

>>699
アホ

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

>>692
こだわりがあって避けたいのでない限りそれで良い
一般に使える、記述量が少ないあるいは分かりやすいやり方は特にない
あともう分かってるだろうがこのスレ終わってるからわざわざここで質問するな
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)とは、
単語における一定の配列での連結の総称である。言語の類型によっては、
単語に準ずる形態素や表意性を持つ文字がこの役割を担うこともある。
この連結によって、慣習的に用例と意味が固定しており、字面から意味を推測できないことも多い。
2021/06/14(月) 21:51:20.88ID:XErzM4Zs
↑ 本題とは関係ない変なこだわりっぷりはキチガイ
2021/06/14(月) 22:01:38.26ID:KZOl1vP3
本題の答え *がワイルドカード
あとは書いたように動く
イディオムなんてない
2021/06/14(月) 22:07:17.88ID:RVbOy7mU
>>701
sudoはsudo cmdのcmdの実行をroot権限にするだけ
echo *.confもechoにしてみたらいろんなの渡されてびっくりだよ
shellはあらかじめ余計な処理をする
shellを実行してるのはuser
2021/06/14(月) 22:19:23.20ID:XErzM4Zs
>あらかじめ余計な処理
余計といえば余計だが、その余計なおかげでechoなどは何もしなくてもいいんだけど
POSIXに展開はルールは明文化されてるから一度読めばいいと思う
2021/06/14(月) 22:38:14.31ID:0x3Kpqg0
>>703
> >>693
> どれに任せるかって、質問者が想定してんのはフツーにシェルだろ

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

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

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


>>706
> 本題の答え
おもろいなぁキミ笑
2021/06/14(月) 22:42:35.98ID:0x3Kpqg0
>>707
sudoであえてshを実行する意味がわかってないやろ?
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
2021/06/14(月) 22:43:39.18ID:TBcjiJdx
>>709
なんでなんの関係もないお前が反応してんの
もしかしてID:KZOl1vP3と同一人物でID切り替えながら荒らしてんの?
2021/06/14(月) 22:45:44.34ID:lTAIWsCW
>>712
その文が何なのかは知りませんが、まあそんな感じです
ごく普通の用法ですよね?
2021/06/14(月) 22:51:30.90ID:XErzM4Zs
>>712
別にいいだろうがw
>>703の冒頭の余計なこと書いてるんだし。あんなの書く癖に>>713なんて書いちゃうんだな
やっぱり小心者故の虚勢だったかと思うぞw

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

いやこんなにも論理的に破綻していてかつイディオムという語の意味を理解してない奴が同じタイミングで二人もいるって恐怖でしかないんだが
2021/06/14(月) 22:58:00.42ID:XErzM4Zs
別に居ても不思議じゃないけどw
2021/06/15(火) 03:36:25.29ID:fYgQamCV
>>713
ふつうに考えて、荒らしはおまえの方だな。w

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

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

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

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

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

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

まあ、質問者の「イディオムだと思って使う」の意味次第ではあるか。
個人的には、理屈がわかってればそのように「思って」は使わない。
2021/06/15(火) 12:32:19.46ID:Uk8DlJ/9
またID切り替えて恥晒し続けるのか

昨日は他スレでも同じようなやつがいたな
2021/06/15(火) 14:22:06.77ID:fYgQamCV
>>726
自分の敵は全部同一人物扱いか。w
2021/06/15(火) 14:48:09.92ID:D4jRQBdQ
>>721
権限も引き継ぐから何もやってないのと同じ
2021/06/15(火) 15:23:52.83ID:uDm4jDy6
>>726
XXな人が使うイディオム
2021/06/16(水) 08:06:02.87ID:drc75L4c
微妙に関係しそうだから恥をしのんで
()のサブシェルで手軽にサブシェルのID得る方法ってないかな?
パラメタ展開をエイリアスで遅延テクは、エイリアスが行頭に来る必要があるので、おもむろに書ける()の利点が無くなるかなと
2021/06/16(水) 09:57:22.10ID:up1ZHWjO
echo $$
ではダメなの?
2021/06/16(水) 10:13:45.13ID:drc75L4c
>>731
()の中の$$は親シェルのpidを返すのよ
それこそsh -cに(適当にエスケープした)文字列としてecho $$を渡せって話だけど、折角分かりやすい()構文があるのだから、その範囲内で何かワークアラウンドできないなと
733デフォルトの名無しさん
垢版 |
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
2021/06/17(木) 18:27:37.79ID:xgZUa/OO
sed じゃないけど cut で

$ cut -d, -f2- dat.csv
2021/06/17(木) 19:04:27.30ID:vGCQo8/9
sed -r -i 's/\,.*$/\,/' a.csv
2021/06/17(木) 19:44:55.11ID:xgZUa/OO
>>734
間違えちゃった…(テヘッ
2021/06/17(木) 21:58:28.56ID:T6UVeHQo
なんでもいいけど、-iはよせよw
2021/06/17(木) 22:03:25.59ID:T6UVeHQo
あ、あともう一つ突っ込み。
-rもいらないだろ?なんで使った?
バックスラもいらないでしょ
2021/06/17(木) 23:43:32.54ID:dfr4yCUQ
>>730,732
サブシェルのPIDはbashの4以降(確か。3にはない)なら、$BASHPIDで得られる
>>732が何言ってるのかわからんけど、他に有用性があるのは sh -c 'echo $PPID'
2021/06/17(木) 23:49:44.80ID:dfr4yCUQ
>>739
> >>732が何言ってるのかわからんけど
ああ、本来サブシェルでやりたいこと書きたいことを sh -c 'この中に' 書くってことか
sh は起動するけど、sh -c 'echo $PPID' はそれだけ、$BASHPID と(ほぼ)同等ね、いちおう
2021/06/18(金) 01:05:57.70ID:fLSgA5jz
>>733
grep でいいんじゃね

grep -Eo '^\w+,' hoge.dat
742デフォルトの名無しさん
垢版 |
2021/06/23(水) 00:40:02.57ID:IzFohus8
>>675
UNIXを知ってますか?
2021/06/23(水) 15:18:18.24ID:IrcINDyC
世間的に気にしてるヤツはそんなに居ない
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
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
746デフォルトの名無しさん
垢版 |
2021/06/25(金) 23:22:45.67ID:8lh6XF2h
シェルスクリプトの話じゃねえ
2021/06/26(土) 00:28:57.99ID:HkMm3Nsz
pythonとかJavaは沢山ある癖に、シェルスクリプト学べるサイトは一つもないのな…
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 "$", "," }
2021/06/26(土) 13:09:52.71ID:pd6KxWqx
>>747
UNIX & Linux コマンド・シェルスクリプト リファレンス
https://shellscript.sunone.me/
このサイトはどうだ?
リファレンス名乗ってるけど、シェルスクリプトの基本から
解説してるぞ。
2021/06/26(土) 15:02:58.18ID:HkMm3Nsz
書き方間違えた。。
シェルスクリプト学べる講座みたいな意味です。超初心者向けはあるけど、本格的に教えてくれるのないよね?
2021/06/26(土) 15:12:45.40ID:pd6KxWqx
>>750
本格的、ってどういうもの?
シェル芸みたいなものってことか?
ま、それは確かにないだろうなあ。
ほとんどが秘伝というか口伝みたいなものだから、講座作れるほど網羅している
人ってのがなかなかいないしなあw
752デフォルトの名無しさん
垢版 |
2021/06/26(土) 15:20:25.76ID:15vAhO8I
python使えたらシェルスクリプト要らんのでは
2021/06/26(土) 15:26:57.82ID:pd6KxWqx
>>752
ま、なにするかによるけど、例えばファイルをリネームしたりコピーしたり、
ディレクトリ捜査/操作したりするようなのなら、pythonとかで書くのは
かなーりめんどくさいよ?w
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を検索
2021/06/26(土) 16:46:27.14ID:fSNbZd7z
man bash-builtins
/検索語句
Nキー:次
Bキー:前
Qキー:終了
2021/06/26(土) 16:58:17.32ID:Y3/GrXsT
>>752
インストールされてない/したくない環境もあるやろ。
2021/06/26(土) 19:39:26.99ID:6sjjJ5as
本なら、ある。
UNIXシェルスクリプトコマンドブック 第3版、 山下哲典、2015

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

fileutils モジュールの、DryRun で、実際には実行せずに確認できる。
削除なら、FileUtils::DryRun.rm
2021/06/26(土) 20:08:24.78ID:eKFjOqkk
>>755
何のためのレスかわからんけど、h 押してみ
2021/06/26(土) 23:12:46.20ID:Y3/GrXsT
>>758
初心者は、manやinfoの扱いに困ることはありがち。
infoは、ワイも未だに困ることがあるで。💦
2021/06/27(日) 03:00:03.59ID:JLxNdtth
h 押すだけで使い方を覚えなくてすむから良いね
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
2021/06/27(日) 13:34:55.40ID:eeXftvTT
>>761
(( ))とかもdashにはないだろう。
…つかなんのためにやってんの?これ?w
763デフォルトの名無しさん
垢版 |
2021/06/28(月) 09:24:33.50ID:7rguVsVy
>>747
名著「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」
2021/06/28(月) 15:58:41.95ID:PrwZxveA
functionはdashにはないので関数定義で
function 関数名 () { }
と書けない。関数をつくるときはfunctionを省く。
2021/07/04(日) 23:04:42.22ID:B2MxyBfM
Windows10ではC:\Windows\Microsoft.NET\Framework\<バージョン>以下にvbc.exeが標準インストールされてるけど
Windows11のInsider Preview版でも入ってる?
2021/07/07(水) 15:15:00.04ID:y8n+ZYbw
シェルスクリプトの引数として文字列を渡すとき、空白等を含むものはダブルクォーテーションで包んで渡してます
このダブルクォーテーションを省略できたら楽なのですが、行末 (セミコロン) まで丸々一つの文字列と見なす方法ありますか
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
が必要
2021/07/07(水) 17:59:42.48ID:S2V3/enC
pwshにはズバリstop persing operator --%があるね
2021/07/07(水) 18:50:47.92ID:S2V3/enC
;で止めるのはexprやパラメータ置換で;以降を切り出しておいて、ラップするコマンドの処理が済んだ後でeval に渡せばいいかな
&等他の制御構造も使いたいとなるとキリがないけど
下手に通常コマンドのように見せかけるのは混乱の元にもなるので、割り切った方がいい
2021/07/07(水) 19:10:07.39ID:2/exV/Wq
たかが''で括る手間を省く為に、あまりアナーキーなことをするのは…
2021/07/07(水) 19:41:57.72ID:JjiOZstZ
だよな
2021/07/07(水) 21:59:30.78ID:rfVJ+RI1
これ動くんだ…
2021/07/07(水) 22:09:19.52ID:lJn1zakl
インラインコメントのつもりで付けた#以降が読まれる可能性があるけど、普通スクリプト中のエイリアスは無効だから大丈夫なのね
774デフォルトの名無しさん
垢版 |
2021/07/10(土) 17:17:24.24ID:QtAhxdi9
w3mブラウザを使っています。
w3mを起動した後の自動処理ってシェルでどのように書けばいいでしょうか??

毎回タブを作ってURL01とURL02を開くなどをやりたいのですが
bashrcにaliasやfunctionを書くことも考えましたが、w3m起動後の処理はできないので困っております。
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 を開く
2021/07/10(土) 23:45:50.65ID:/14ZuXuK
TTY操作ってんならシェルスクリプトではなくexpectスクリプトでしょ
Linux/Unix/プログラム各板見たがexpectスレはないみたいで恐縮ではあるが
2021/07/11(日) 02:11:09.53ID:lZiRxAj0
Ruby にも、expect ある
2021/07/11(日) 06:05:30.31ID:KqeUxmyI
間に擬似端末を挟む方法で w3m や lynx を自動化したことならあるけど
w3m には自動化のためのインターフェースがあるみたいだよ。
その名を "Local CGI" という。
残念ながら man には書かれていないが、普通にダウンロードすれば
doc-jp/MANUAL.html に書いてある。
サンプルコードは Bonus/ にある。
ご所望のことが全部できるかは判らないが
他の方法よりは確実な動作を期待できそうだ。
779デフォルトの名無しさん
垢版 |
2021/07/12(月) 18:24:55.56ID:f04FcsMT
レス遅くなってすいません。

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

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

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

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

標準入力受け付けない:があったりするのだろうか
2021/07/15(木) 16:49:38.15ID:IbROtnW3
もちろんステータス見たい時はイエスマンの:はダメだけど、単に出力全部捨てたいケースね
標準エラーはパイプを通らないし、標準出力は:が食べる
2021/07/15(木) 17:56:15.08ID:CDvGwwEr
全部捨ててるのではなくて
最初に書いた時にSIGPIPEで死んでる
それに無駄にfork/cloneしてる
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
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]:にする、みたいな。
2021/07/19(月) 21:17:27.86ID:1Cvv5Nld
makeスクリプトの中に
sh -ec make
挟むとか
2021/07/20(火) 10:34:00.51ID:KkKHDI5m
>>785
とくに変化はありませんでした。
別のプロセスを間にはさんでも変わらないようです。
2021/07/20(火) 10:34:49.18ID:KkKHDI5m
>>784
自己解決。
MAKELEVEL環境変数を設定。
2021/07/30(金) 18:22:37.15ID:7AkGA5GJ
スクレイピングしたいんですけど何を勉強すればいいですか
不正アクセスに問われたりしないでしょうか?
セキュリティ対策はどのようなことに注意すればよいでしょうか?
2021/07/30(金) 18:25:38.46ID:PFQXQc2n
誤爆だろな
2021/07/30(金) 19:56:33.31ID:pVd7PqHN
他人は誰も何も保証などしないし責任など取ってくれないので法律について自分で調べて安全圏と思える範囲内でやるしかない
2021/08/01(日) 08:18:52.13ID:gdH7Qy0E
なんでわざわざシェルスクリプトでスクレイピングするのか?
792デフォルトの名無しさん
垢版 |
2021/08/01(日) 09:34:42.67ID:4xiWMys0
wgetやcurlとjson
HTMLを加工しデータを抽出するためにsed、grep
不正アクセスのリスクはどこにでもある
相手次第でしかないから
過去に図書館のシステムを作ったエンジニアが
蔵書を調べたいという目的で負荷をかけない範囲でアクセスしてたら
訴えられたってのあったな

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

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

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

getopt/getoptsを書き換えればいいだろう、その部分の話なら
他にもあるんだったら、command not foundもわからないんだったら自力では山が高いとしか思えんけど、自力で頑張れ
2021/08/04(水) 17:01:53.30ID:vF9ccavM
つーか、何が起きるかわからんのに、別シェルのスクリプトをわからんままによく実行できるな。w
メチャクチャに壊されるかもなのに。
2021/08/04(水) 17:57:21.23ID:f2ZFKBK8
zshって真面目にドキュメント読もうとすると
機能多すぎて嫌になるよねw
2021/08/04(水) 17:57:42.62ID:f2ZFKBK8
おや?chromeから書き込めた???
2021/08/04(水) 17:58:08.01ID:f2ZFKBK8
あ、janeからも書き込めたw
禁止解除されたかwww
2021/08/04(水) 17:59:30.91ID:f2ZFKBK8
っていうか普通にzshインストールすりゃいいだけじゃん
2021/08/04(水) 18:18:14.91ID:VUbcTRKP
別にメチャクチャに壊されても構わんのだろう?
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
2021/08/04(水) 19:21:42.69ID:ZkQ7EvI3
>>808
>もらった
んだから普通は知り合いからだろうし、何をするのかもわかってるだろう
知り合いで当たり前のように悪さするような>>803のようなのwはまあ普通はいないわな
あんまよくわかってなさそうで、何をするかはわかってるが途中で失敗した時の弊害とかはわからんかも知れんけど
2021/08/04(水) 19:31:41.64ID:f2ZFKBK8
zshで動くものをbashで動かしたら何が起きるかわからんじゃん
そのzshスクリプトはエラーでちゃんと停止するんか?
想定とは違うディレクトリで中途半端に動いたりしないんか?
2021/08/04(水) 19:36:30.26ID:ZkQ7EvI3
>何をするのかもわかってるだろう
のうちだろ
動作させないと何が問題かわからんし、そもそもどの程度の知識かもわからんし
仮に何かあっても、全く何もわからないのにbashで動くようにしたいという望みを持った勉強代だなw

動作させないと何が問題かわからんのだから、問いに対して動かしてみろと言うのは当たり前の話でしかないだろう
何を言いたいのかわからんぞ
2021/08/04(水) 19:56:41.44ID:oNOmhdBC
どうなるか分からんけどとりあえず動かしたいならdockerコンテナ上で試せばいい
2021/08/04(水) 20:04:22.89ID:vF9ccavM
>>810
結局、わからんのやないか!
アホなの?w

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

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

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

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

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

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

kshからのが多そうね。bashが最初でzshでも採用ってなかったかなあ
2021/08/05(木) 18:09:04.60ID:r/zZzNU4
>>825
んな話はしていない。
おまえが妄想を混ぜただけ。
読解力ゼロ。w
2021/08/05(木) 18:11:34.02ID:zI5dwTpx
>>827
マジでなのか
しつこいなw繰り返すだけのを、内容無いのを、よくできるなあ
何が面白い(自分にとってな)と思ってやってるの?会話としてでもなさげで
2021/08/05(木) 19:53:25.65ID:r/zZzNU4
>>828
おまえがな!w
2021/08/05(木) 21:42:19.84ID:2EEp5i6b
ばーかばーか
2021/08/05(木) 22:23:46.98ID:zI5dwTpx
>>829
会話にならん、なってないぞwイミフすぎ
何が面白い(自分にとってな)と思ってやってるのかだけしかもう興味がなかったけど、それを知るのも無理そうだなw
まあ終わりだな
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
2021/08/05(木) 23:45:20.11ID:r/zZzNU4
>>831
しゃあない。
おまえは読解力ゼロやからな。w
2021/08/06(金) 04:00:19.09ID:rcBy4jaU
>>832
setとか関係ないだろ
どのコマンドでも一緒だ
2021/08/06(金) 14:52:24.37ID:j92KspJx
>>834 ???
bash -c '
a="1 2 3"
printf "/%s/" $a
'
dash -c '
a="1 2 3"
printf "/%s/" $a
'
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/


まーーーーーーーーーったく同じ
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
こうなるのはおかしいだろってことだよ。

話わかってるか?
2021/08/06(金) 17:26:48.38ID:rcBy4jaU
消えな。いちいちデマ流すな。

dash -c '
set -- "a b c" "d e f"
set -- $1 "$@"
echo $1
'
a
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 時オプションセットのバグかなあ
2021/08/06(金) 19:38:55.34ID:rcBy4jaU
自分のミスを素直に認められるようになろうな
2021/08/06(金) 21:35:38.59ID:mgQwZ+tq
俺は ID:j92KspJx でないからな
2021/08/06(金) 23:44:34.47ID:j92KspJx
ミスといえば >>832>>834 の流れを読まずに
>>835 だけを見て意味不明な返信 (>>836) をしてたミス≠ヘどうするんだろうな。
2021/08/07(土) 01:06:35.02ID:m9mcPIVQ
お前もある意味勘違い(他の環境でなり試せばわかること)で騒いでいたんだから、
何をなんかその嫌らしいことすんなよ
2021/08/07(土) 01:06:57.62ID:m9mcPIVQ
俺は ID:mgQwZ+tq なw
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互換にするにはというお話でした
2021/08/07(土) 03:07:17.12ID:UOc5M9xg
zshでemulate bachfileってやったら
バッチファイルモードになったYO!
2021/08/07(土) 08:27:51.67ID:m9mcPIVQ
なる。 zsh|sh|ksh|csh だけか
以外ではエラーにならずに zsh が指定されたとみなすか

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

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

あー、というかこれbash対応じゃなくて
bourne対応じゃね?bourne=shだし
2021/08/07(土) 08:50:44.33ID:UOc5M9xg
bshのパターンも有るか。でもjshはzshだな
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互換でとかの) が確かそんな感じで判断しますのようなのがあったな、そういえばってので
それと同じかもっと手抜きなのかもね
2021/08/07(土) 10:53:52.05ID:231wocV5
ボーンシェル
コーンシェル
ゾーンシェル

ぞーーーーーん!
2021/08/07(土) 12:55:43.98ID:UOc5M9xg
トリビア

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

その名も
2021/08/07(土) 18:45:34.65ID:RMo9hPMi
シェルじゃなくてシエル?

あ、これは1991年だった。
2021/08/09(月) 01:48:03.65ID:Ln+AsnId
キヤノン
キユーピー
シヤチハタ
富士フイルム
エドウイン
2021/08/09(月) 03:21:27.64ID:iQ+Egq/N
中川しようこ
2021/08/09(月) 12:43:08.30ID:GX8oEfXz
ビックカメラ
2021/08/10(火) 04:05:37.98ID:dBGoRJhg
>>858
オランダ産やんけ
2021/08/10(火) 22:03:06.30ID:h61oVuOW
カステラ
ゲーテ
2021/08/15(日) 22:01:32.56ID:iDzFR5O3
新しいシェルを作りたいのですが
どのアルファベットが空いてますか?
866デフォルトの名無しさん
垢版 |
2021/08/15(日) 22:19:10.80ID:G/xk0WlY
iとo
2021/08/15(日) 23:21:43.56ID:ZsODeO33
bshとbashがあるくらいなんやから、一切気にしなきゃええんちゃう?w

勝てば官軍!
勝てばね!
ふつうは、戦える立場になれないけど!
2021/08/16(月) 13:46:35.37ID:umL41p0T
ishは止めれ
2021/08/16(月) 23:50:00.46ID:sZNsU9Vp
https://ja.wikipedia.org/wiki/Ish
2021/08/17(火) 00:52:16.82ID:/lTg0IsM
じゃあoshで
2021/08/17(火) 00:52:32.42ID:/lTg0IsM
おいっしゅー!
2021/08/17(火) 01:20:24.26ID:5M+zf85m
Ош
873デフォルトの名無しさん
垢版 |
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 は我々に教えてくれます
874デフォルトの名無しさん
垢版 |
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 は我々に教えてくれます
875デフォルトの名無しさん
垢版 |
2021/08/31(火) 18:02:21.42ID:UqDTQOtm
awkでデータの中にスペースを入れるにはどうしたらいいんでしょうか?
876デフォルトの名無しさん
垢版 |
2021/08/31(火) 18:14:12.67ID:UqDTQOtm
"a b" "c d"

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

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

なんてできるけど、ダブルクォートで囲まれた内部でダブルクォートが
使われる場合には。。。
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"
2021/09/03(金) 13:05:02.74ID:prpSRVT9
うわでた
2021/09/18(土) 18:19:12.65ID:a1LlWfun
頭のおかしい人に以下のようなことを言われました

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

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


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

どこでそんなルールが決まっているのでしょうか?
2021/09/18(土) 18:28:53.74ID:6JilEPez
本人に聞けよ
2021/09/18(土) 18:42:49.46ID:jUwIv+ht
随分偉そうな質問者だこと
2021/09/18(土) 20:04:20.39ID:ra+RGGfj
スクレイピングはサイト運営からすればボットと同じ迷惑行為。警告を無視して続ければ営業妨害に認定される可能性もある。
マルチポストはいわゆるネットマナーに反する行為。質問者がマルチポストを繰り返せばその質問者が「頭のおかしい人」と看做されるだろう。
2021/09/19(日) 10:51:23.48ID:xR+u8nco
技術的に無能だが一般常識にも無能なのはたまに居るな
2021/09/19(日) 10:54:58.61ID:ZpH8FzBH
シェルショッカーとリッチー大佐のお二人ですなw
2021/09/21(火) 03:27:47.67ID:brXTSPi5
あと Ruby の基地外な
rubikitch のことじゃないよ
887デフォルトの名無しさん
垢版 |
2021/09/22(水) 14:28:08.32ID:Te29kBsr
ニュースグループならクロスポストってのが出来たんだけどな
888デフォルトの名無しさん
垢版 |
2021/09/22(水) 14:42:56.06ID:RtQe+ZM1
>>876
a_b_c_dをa_bとc_dにしたいの?
アンスコ→半角スペース
2021/10/02(土) 09:12:44.17ID:AShvd7nN
bash sample1.sh && sample2.sh
でsample.shがexitとかfalse的な感じだったらsample2.shは実行しない
という処理をするにはどうしたらいいのでしょうか・・?
2021/10/02(土) 09:30:28.85ID:AShvd7nN
補足です >>889
そもそもやりたいことはsample2.shの冒頭に
if 条件; then
echo "o"
fi
みたいな条件式が出てくるのですが
その条件は他のsample3.shでもsample4.shでも重複して出てくるので
分けたいなと思いました
そういう書き方があるのかな、と
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
}
2021/10/02(土) 11:42:50.26ID:rSA8/7/e
プロセスの終了ステータスと同じ思想
0を返すなら正常
0以外を返すなら異常
2021/10/02(土) 12:39:57.86ID:AShvd7nN
>>892
なるほど
python行ったり来たりするのでなんか頭こんがりそうです;
2021/10/02(土) 14:45:07.98ID:lWVjrMOX
>>891
逆ではない。それで良いのだ。
成功したら0を返すというUNIX等での昔からの慣習に従っているだけ。
if は動かしたコマンドや関数の終了ステータスが0なら成功したと認識して then の後を実行しようとするように作られている。
2021/10/02(土) 14:47:33.71ID:lWVjrMOX
ってリロード忘れて書いたら既に答えが書かれて話が終わっていたorz
2021/10/02(土) 15:12:31.16ID:HPoADLry
>>893
PythonならTrue/Falseやろ。
ムダに混乱すな。w
2021/10/02(土) 15:39:19.39ID:yaQQxYBO
シェルスクリプト内で return true とか書ければいいんだが。

引数なしの return はその直前のコマンドの戻り値を戻すので
true ; return
とか
return $(true)
って感じか?
2021/10/02(土) 15:52:06.48ID:yaQQxYBO
true=0 ; false=1 って定義しておいて return $true もあるか
2021/10/02(土) 16:16:47.40ID:qz0ghb/n
>>893
grepコマンドのexit statusを調べるんだ
それでもう忘れなくなる
2021/10/02(土) 16:38:14.15ID:HPoADLry
>>897
やめろ。w
逆に混乱のもとや。
どうしてもっつーなら、EXIT_SUCCESS/EXIT_FAILUREか?

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

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

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

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

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

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

プログラムによってはあえて、1なら成功半分失敗半分、2なら超失敗、みたいにしてもええ。
2021/10/03(日) 01:12:15.52ID:xAO5mPIE
>>907
\0が定義されてないの?

nullはnullであって0じゃないけど
\0は0でしょう?
2021/10/03(日) 01:52:00.50ID:prztZm/y
>>909
Cでは、文字コードが定義されてない。
エスケープシーケンスは定義されとるが、その数値としての値が定義されてるかどうかは別の話や。

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

堅実にはありえないような、愚かな夢想やがな。w
2021/10/03(日) 21:33:19.87ID:lRGZaQA9
Makefileのコマンド部分のインデントにタブ以外つかえないの地味にツライです
2021/10/03(日) 23:29:34.04ID:53YOJQpZ
>>908
俺が勘違いしているとお前がいうならそれでいいよ

じゃあ新しい話

return 0 が C言語とシェルスクリプトで意味が真逆で紛らわしいんだがどうする?
2021/10/04(月) 00:19:02.66ID:zDusbFKv
>>912
アホにはムリ!
あきらめろ!
2021/10/04(月) 00:38:06.79ID:68bdvZVH
郷に入っては郷に従え
2021/10/04(月) 04:16:49.89ID:hDmlyFvp
>return 0 が C言語とシェルスクリプトで意味が真逆
え?
2021/10/04(月) 11:18:50.12ID:k4THeifQ
main()のreturnに関してはshと一緒だが
returnに限らずifや論理演算で使うときの0/0以外は意味が真逆って話ですかね

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

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

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

testコマンドとか知らんのか?
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でなんか書いたことあるなら当然知っているだろう
2021/10/04(月) 16:47:03.61ID:jGq6SyTd
>>920
¥マークをバックスラッシュにしたらできました
>>921
一度格納するのですね できました

どちらもできました
ありがとうございました。
2021/10/04(月) 17:25:08.90ID:seuesddr
[ ] がコマンドだって知らない人がいるのかな?

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

echo $((2 > 1))
1

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

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

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

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

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

と、わかりやすそうなの探してきたぞ,
https://en.wikipedia.org/wiki/Exit_status
をよく読んでみ
2021/10/04(月) 19:13:01.03ID:seuesddr
>>929
何がいいたいのかさっぱり

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

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

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

Booleanなのに true とか 1 と比較するのはどうなの、というのは個人の好みだが、こうも書ける。関係ないけど
bool=true or fasle
if $bool; then
...
よりシェルスクリプト基本に添ってると思うけどなw そのある意味オレオレよりは
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が何のために作られたか、シェルスクリプトも何のために作られたか、それぐらいわかってはいるだろうから、この短文だけで「読める」だろう(自分勝手な理解を置いておけば)と思いたい
2021/10/04(月) 19:49:22.53ID:seuesddr
>>935
だからシェルスクリプトでいう真(1)かどうか?を
コマンドで判定してるんだろ
2021/10/04(月) 19:50:42.83ID:seuesddr
> Booleanなのに true とか 1 と比較するのはどうなの、というのは個人の好みだが、

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

echo $((2 > 1))
1

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

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

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

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

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

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

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

本当に無知のくせにただただめんどくさいヤツだったとは
まあ、あとは自力で頑張れ。その使ってるナニかは自分で調べるためにもあるんだからな
2021/10/04(月) 21:34:45.41ID:MQzfkP4R
終了ステータスは
(エラーが) [ 0:false:有りませんでした | 0以外:true:有りました ]
だと思ってたんだが
2021/10/04(月) 23:57:42.15ID:zDusbFKv
>>951
そう決まっているわけではない。
仕様次第。

https://linuxjm.osdn.jp/html/GNU_grep/man1/grep.1.html
2021/10/05(火) 05:07:50.98ID:h//Q5yAA
終了ステータスは、真偽値じゃなくて数値だからね
127 はコマンドが見つからないとか、いろんな意味がある
2021/10/05(火) 11:37:08.32ID:BsTkn0yK
>>953
これ、アプリが127を返すようだと区別できないな。
ビットはあまりがちなんだから、ちゃんと整理しといてほしかった。
2021/10/05(火) 15:18:38.51ID:Vzh0q/ov
cみたいな新参言語と比べるなよ?
2021/10/05(火) 15:22:23.47ID:Vzh0q/ov
と思ったらcのが早いのか…
当時ナウかったalgolの影響大きすぎて錯覚する(fiとかesacとか)
2021/10/05(火) 15:28:38.07ID:k2GS0F1f
algolは死んだしcを新参と笑えるバリバリ現役言語はlisp、fortran、cobolくらいでは
2021/10/05(火) 17:09:15.80ID:dp5on/du
このスレきもちわる
2021/10/05(火) 18:12:02.21ID:33c4JJMi
病気なんじゃね?w
960デフォルトの名無しさん
垢版 |
2021/10/05(火) 18:52:58.49ID:JbR3YU6O
科学臭
2021/10/05(火) 19:11:37.04ID:33c4JJMi
宗教よりはマシやろw
2021/10/05(火) 19:50:39.12ID:RLO9CO91
>>957
JCL
SQL
regexp
2021/10/05(火) 21:10:53.59ID:33c4JJMi
regexpは表現やろ?
964デフォルトの名無しさん
垢版 |
2021/10/05(火) 22:05:00.71ID:I9nBHPaT
忘れられがちなPL/I
2021/10/06(水) 10:50:03.14ID:1RiK8cCJ
>>963
3型文法の形式言語です
Turing完全ではないので一般的にはプログラミング言語とは言いません
2021/10/06(水) 13:05:49.45ID:RFU2koBA
>>963
「expression」の和訳の問題だから。
967デフォルトの名無しさん
垢版 |
2021/10/09(土) 22:37:14.17ID:IfT7mukr
俺もUNIXプログラミング環境持ってるけど、真と偽をtrueとそれ以外(false)って感じで書いてある。シェルスクリプトで真偽と言うとこれだよな。一般的な真偽値とはまた別で。
それにifは真かそれ以外かしか見れないんだから真偽値で言う偽なんざいらねーし。
2021/10/10(日) 00:30:49.33ID:xmO2FPMa
またよくわかってないやつが
2021/10/10(日) 00:35:16.90ID:6jcVzzbi
>>967
クソワロタ
こんなおっさんいるよね
970デフォルトの名無しさん
垢版 |
2021/10/10(日) 12:09:43.32ID:ZbbT3pWR
>>969
Unixプログラミング環境、今となっては結構レアな本だと思ってたけどみんな持ってるのか。
特に邦訳版から読んでそれ以降使い込まなかった人はシェルスクリプトの真偽はゼロかそれ以外って覚えてても不思議はないと思うな。
2021/10/10(日) 17:16:50.58ID:Liv3MhTX
不思議もなにも、それしかないからな。
勝手に意味付けしようと思い込むヤツが勝手にややこしくできあがってるだけで。
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じゃないから
973デフォルトの名無しさん
垢版 |
2021/10/11(月) 09:50:35.87ID:j+pkxrpN
>>972
うーん、失敗したら真を返すプログラムも書きたいから、スクリプト側では成否と言う概念や言葉を使うより真偽の方がやりやすいんじゃないの?
2021/10/11(月) 17:46:38.27ID:FYumYboV
>>972
いや、それもexit status。
man bash(COMMAND EXECUTION)にもはっきりそう書いてある。

プログラムとパイプライン各段、終了ステータスを出すほうと受けるほうで混乱すんなよ。
2021/10/11(月) 17:47:38.44ID:FYumYboV
>>973
真偽も成否も忘れろ。
0か0以外かの判定でしかない。
2021/10/11(月) 20:08:45.72ID:AmMau6EN
>>973
失敗したら真を返すってC言語の場合だとどうかきたいの?

https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%BC%E3%83%AA%E3%82%A2%E3%83%B3%E5%9E%8B#C99
> C99ではブーリアン型を格納したりするための型が作られ、その型のためのキーワード _Bool が追加された。
977デフォルトの名無しさん
垢版 |
2021/10/11(月) 22:58:31.30ID:Fcy0jrOe
>>976
Wikipediaで言うと

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

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

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

後者は0以外だが特に決まってない
特定の値、例えば1に依存したいならこのマクロは使ってはいけない
2021/10/11(月) 23:35:05.68ID:0Us0xwCf
>>973
マクロ名が成否なんで
2021/10/12(火) 00:23:03.15ID:4emiI4KE
>>978
「C API」とか言うヤツがどこまでわかってんだか。w
2021/10/12(火) 00:47:23.22ID:lvIpixgN
ルビーの国へさっさとお帰り
982デフォルトの名無しさん
垢版 |
2021/10/12(火) 02:14:19.27ID:jMkI4z1q
C/C++の関数は成功で1を返すのが多いと思う
strcmpみたいなのは例外

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

ところがシェルのコマンドとして観た場合 !0 は失敗で成功が 0
初心者はここで混乱する
2021/10/12(火) 02:50:11.86ID:qBBV2SpK
>>982
失敗の理由を返したくなったから
0以外で複数の値を取れるようにした
と覚えましょう
2021/10/12(火) 04:02:37.92ID:4emiI4KE
>>982
またええかげんなことを。。。

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

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

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

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

つーか、ええから黙って覚えろ!
2021/10/12(火) 09:48:27.17ID:EPRomWCK
>>984
呆れるよな
全く真面目に勉強しようとせずに、勝手に理解したつもりとか
2021/10/12(火) 10:39:00.32ID:l2L6GWVJ
だからC言語で真偽値を返したいって言ってるんだろ!
987デフォルトの名無しさん
垢版 |
2021/10/12(火) 10:52:14.50ID:OF6dTiE4
関数とプログラムの返り値を一緒にするなよバカ
2021/10/12(火) 13:27:15.11ID:4emiI4KE
>>986
じゃあシェルスクリプトのスレに来んなよ!w
2021/10/12(火) 13:39:53.56ID:FcrICImt
>>982
まあ、これなんだよね(笑)
要はシェルスクリプトだけは成功やノーエラーは0でないとだめよん、と覚えておきゃいいだけよ。

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

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

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

あと、ifの後に書くのは条件「式」だよ。そういう屁理屈こねたいなら、値ってのは式のうち、てくらいの常識はわきまえておいてねw
2021/10/12(火) 16:33:25.35ID:4emiI4KE
>>992
アホか。「式」とかイキってんな。w

まずシェルのmanページを通読してこいよ?な?
2021/10/12(火) 16:35:06.18ID:FcrICImt
>>93
アホか。「コマンドライン」とかイキってんな。w

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

シェルスクリプト総合 その37
https://mevius.5ch.net/test/read.cgi/tech/1633441770/
2021/10/12(火) 17:52:21.03ID:elEZT6pO
はい、おしまい

真偽値と終了ステータスの区別もつかないのはアホ
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を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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