!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。
スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)
2018/09/22(土) 11:53:21.38ID:BBiLRgnj0456デフォルトの名無しさん (ワッチョイ 9ab3-gRbH)
2018/11/02(金) 09:19:53.88ID:Rb6mIS4M0 foo() { printf 'foo %s\n' "$(tail -n 1 -)"; }
bar() { printf 'bar %s\n' "$(head -n 1 -)"; }
ってして seq 1000 | ./pee.sh としたら実行する度に foo の値
が違ってるな…どちからの子プロセスが実行完了したら while
も終了するから仕方ないんだろうけど。trap '' PIPE ってすると
I/O error になるし
bar() { printf 'bar %s\n' "$(head -n 1 -)"; }
ってして seq 1000 | ./pee.sh としたら実行する度に foo の値
が違ってるな…どちからの子プロセスが実行完了したら while
も終了するから仕方ないんだろうけど。trap '' PIPE ってすると
I/O error になるし
457デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/02(金) 09:45:49.16ID:0QIYfvOaa458デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 09:56:03.14ID:bE/8yEKV0 >>457
正解。組み込みマシンも対象としている
正解。組み込みマシンも対象としている
459デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 09:59:54.78ID:bE/8yEKV0 限定的ながら変数で渡すっていうのが出来てしまったので晒す。多分使わない
#!/bin/sh
main() {
index=0
( ( (
while IFS= read -r line; do
index=$((index+1))
dumpvar_and_call "even"
dumpvar_and_call "odd" >&3
done | eval "$(cat -)" >&4) 3>&1 ) | eval "$(cat -)" ) 4>&1
}
dumpvar_and_call() { set; echo "$1"; }
even() {
if [ $((line % 2)) = 0 ]; then
echo "index:$index even $line"
sleep 1
fi
}
odd() {
if [ $((line % 2)) = 1 ]; then
echo "index:$index odd $line"
fi
}
main<<HERE
3
6
7
4
2
8
HERE
#!/bin/sh
main() {
index=0
( ( (
while IFS= read -r line; do
index=$((index+1))
dumpvar_and_call "even"
dumpvar_and_call "odd" >&3
done | eval "$(cat -)" >&4) 3>&1 ) | eval "$(cat -)" ) 4>&1
}
dumpvar_and_call() { set; echo "$1"; }
even() {
if [ $((line % 2)) = 0 ]; then
echo "index:$index even $line"
sleep 1
fi
}
odd() {
if [ $((line % 2)) = 1 ]; then
echo "index:$index odd $line"
fi
}
main<<HERE
3
6
7
4
2
8
HERE
460デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 10:03:43.36ID:bE/8yEKV0 なんで使わないかというと、変数をパイプで渡すために
setでシェル変数をダンプして、evalしてるんだが、
bashでは読み取り専用変数があってエラーになるから
setの出力をあれこれフィルタすればできると思うが、
変数の中に改行が入ってる場合とか対応が面倒
bashなら変数名に特定のプリフィックスがついたものだけ
ダンプできたとは思うが他のシェルではそうは行かない
また、行ごとに変数すべてをsetしてevalとか
パフォーマンス悪そうだし。
setでシェル変数をダンプして、evalしてるんだが、
bashでは読み取り専用変数があってエラーになるから
setの出力をあれこれフィルタすればできると思うが、
変数の中に改行が入ってる場合とか対応が面倒
bashなら変数名に特定のプリフィックスがついたものだけ
ダンプできたとは思うが他のシェルではそうは行かない
また、行ごとに変数すべてをsetしてevalとか
パフォーマンス悪そうだし。
461デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/02(金) 10:11:28.72ID:GFVwJxnL0 >>457
そんな環境でPosix縛りだとしたら、プロジェクト自体が間違ってる。
そんな環境でPosix縛りだとしたら、プロジェクト自体が間違ってる。
462デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 10:16:42.75ID:bE/8yEKV0 > そんな環境でPosix縛りだとしたら
実はPOSIXよりも状況が悪いw
使える機能がPOSIX未満なんだよ。
つまり一部の機能しか実装されていない
実はPOSIXよりも状況が悪いw
使える機能がPOSIX未満なんだよ。
つまり一部の機能しか実装されていない
463デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/02(金) 11:47:49.42ID:tmRne/9W0 ただの愚痴だけど
POSIXユーティリティにネットワーク通信が含まれてないのってマジで致命的欠陥だと思う。
POSIX原理主義とか,たしかに素晴らしい考えだとは思うけど,ネットワーク通信なくして現在のコンピュータを管理・運用するのは不可能っていうか
もしできてもすごくつまらないでしょう。
POSIXユーティリティにネットワーク通信が含まれてないのってマジで致命的欠陥だと思う。
POSIX原理主義とか,たしかに素晴らしい考えだとは思うけど,ネットワーク通信なくして現在のコンピュータを管理・運用するのは不可能っていうか
もしできてもすごくつまらないでしょう。
464デフォルトの名無しさん (オッペケ Srbb-t4vu)
2018/11/02(金) 12:35:03.14ID:e7WVTJJGr なんでバカって大げさに言いたがるんやw
致命的てwww
致命的てwww
465デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/02(金) 13:04:44.69ID:0QIYfvOaa >>464
大袈裟に言うなよ
大袈裟に言うなよ
466デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/02(金) 19:08:56.10ID:a5BSTCMR0 なぜか悔しがって意味不明なバカ>>465
どないなっとんねんおまえらwww
どないなっとんねんおまえらwww
467デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/02(金) 23:14:17.14ID:KoqyjIsr0 アンリカバブルな低学歴知恵遅れだからしょうがない
468デフォルトの名無しさん (ワッチョイ 769f-MyS3)
2018/11/03(土) 05:20:12.41ID:vg8hCxXN0 大げさだなあ
469デフォルトの名無しさん (ブーイモ MMba-MC7i)
2018/11/03(土) 06:43:33.72ID:9hr0em1cM 日常的に誇大妄想が激しいんだろ
470デフォルトの名無しさん (ワッチョイ b69f-8AGB)
2018/11/03(土) 17:50:12.58ID:GQ9FpTGT0 MicroPythonを実装した方が良さそう
組込にも対応してるから
組込にも対応してるから
471デフォルトの名無しさん (ワッチョイ bebe-YdG1)
2018/11/04(日) 08:48:54.81ID:S8h/cDRc0 コマンドを作っていてすこし疑問に思ったことなんだけど
--helpオプションで出力される文章って太字や着色なんかで装飾してもいいのかな。
「いいのかな」っていうか、そういうことしてるコマンドをほとんどみかけないので
もしかしたら「--helpオプションで出力される文章は装飾しないように」っていう規約がどこかにあるのかな と思ってさ。
--helpオプションで出力される文章って太字や着色なんかで装飾してもいいのかな。
「いいのかな」っていうか、そういうことしてるコマンドをほとんどみかけないので
もしかしたら「--helpオプションで出力される文章は装飾しないように」っていう規約がどこかにあるのかな と思ってさ。
472デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 10:11:04.15ID:Nn4ZdlZB0 >>471
それはいいアイデアだな。
コマンドの出力とは違ってヘルプを入力するプログラムなんて
無いだろうし、カラー専用でもいいくらいなんじゃないか?
そう考えると、manとかinfoもカラーにするべきなんだろうな
今どきカラー使えないとかまず無いし
色ももう16色に拘る必要もないだろう
最低でも256色、24bitカラーも普通に使っていいだろう
それはいいアイデアだな。
コマンドの出力とは違ってヘルプを入力するプログラムなんて
無いだろうし、カラー専用でもいいくらいなんじゃないか?
そう考えると、manとかinfoもカラーにするべきなんだろうな
今どきカラー使えないとかまず無いし
色ももう16色に拘る必要もないだろう
最低でも256色、24bitカラーも普通に使っていいだろう
473デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/04(日) 10:12:08.50ID:iTJ8u5Nd0 >>471
どこかにあったとしその素性のわからん規約におまえが従う必要ないやんアホなん?
どこかにあったとしその素性のわからん規約におまえが従う必要ないやんアホなん?
474デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/04(日) 11:08:19.99ID:Ok+6IZd3a 慣習は先人の知恵が詰まってる場合もある
自分勝手に振る舞う自称合理的よりよっぽど賢い質問だと思う
AIXはmanが黄色とか太字とかで修飾されてた気がするな
自分勝手に振る舞う自称合理的よりよっぽど賢い質問だと思う
AIXはmanが黄色とか太字とかで修飾されてた気がするな
475デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 11:17:07.51ID:Nn4ZdlZB0476デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 11:18:53.69ID:Nn4ZdlZB0 ↑ふざけとんのか
BASH(1) General Commands Manual BASH(1)
名名前前
bash - GNU Bourne-Again SHell
書書式式
bash [options] [file]
著著作作権権
Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.
説説明明
bash は、標準入力やファイルから読み込んだコマンドを実行する、 sh 互換のコマンド言語インタプリタです。 bash に
は、Korn シェルや C シェル ksh や csh) の便利な機能も採り入れられています。
bash は IEEE POSIX specification (IEEE Standard 1003.1) の Shell and Utilities に準拠する実装を目指していま
す。 bash はデフォルトで POSIX 準拠に設定することもできます。
オオププシショョンン
BASH(1) General Commands Manual BASH(1)
名名前前
bash - GNU Bourne-Again SHell
書書式式
bash [options] [file]
著著作作権権
Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.
説説明明
bash は、標準入力やファイルから読み込んだコマンドを実行する、 sh 互換のコマンド言語インタプリタです。 bash に
は、Korn シェルや C シェル ksh や csh) の便利な機能も採り入れられています。
bash は IEEE POSIX specification (IEEE Standard 1003.1) の Shell and Utilities に準拠する実装を目指していま
す。 bash はデフォルトで POSIX 準拠に設定することもできます。
オオププシショョンン
477デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 11:25:16.76ID:Nn4ZdlZB0478デフォルトの名無しさん (ワッチョイ bebe-YdG1)
2018/11/04(日) 11:56:45.43ID:S8h/cDRc0 >>472
24bitカラーはまだマズいと思う。
多くのXデスクトップ環境で利用されてる端末エミュレータ
(GNOME TerminalとかLXTerminalとか)は
LibVTEベースなのよ。
そしてLibVTEの安定板は24bitカラーには対応してない。
24bitカラーはまだマズいと思う。
多くのXデスクトップ環境で利用されてる端末エミュレータ
(GNOME TerminalとかLXTerminalとか)は
LibVTEベースなのよ。
そしてLibVTEの安定板は24bitカラーには対応してない。
479デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/04(日) 12:58:38.32ID:MKH8Qowh0 そういうのを根本的に対応できるようにするなら
roffが対応する部分になるからな
このスレでやってることは
池沼の塗り絵
roffが対応する部分になるからな
このスレでやってることは
池沼の塗り絵
480デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 13:16:39.02ID:Nn4ZdlZB0 >>478
WSLは対応したのに?
WSL その41 - Windowsのコンソールが24bitカラーをサポート・Bashからカラフルな出力が可能に
https://kledgeb.blogspot.com/2016/09/wsl-41-windows24bitbash.html
WSLは対応したのに?
WSL その41 - Windowsのコンソールが24bitカラーをサポート・Bashからカラフルな出力が可能に
https://kledgeb.blogspot.com/2016/09/wsl-41-windows24bitbash.html
481デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/04(日) 16:48:40.44ID:V6s3/sLe0 >>480
ま,まぁ? 24bitカラーなんて端末エミュレータの本来の機能じゃないし? (震え声)
ま,まぁ? 24bitカラーなんて端末エミュレータの本来の機能じゃないし? (震え声)
482デフォルトの名無しさん (ワッチョイ 769f-MyS3)
2018/11/04(日) 20:50:30.36ID:eEexL0w40483デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 20:58:33.34ID:Nn4ZdlZB0484デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/04(日) 23:47:16.17ID:EATzJZ5p0 そして寒い寒いマシン室に押し込められる可哀想な
おじさん達のことは誰も考えてくれないんだよな。
おじさん達のことは誰も考えてくれないんだよな。
485デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/05(月) 00:50:02.70ID:8mReqxsGa かわいそう
486デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/05(月) 01:09:40.53ID:LRv++2Wv0 マシン室が
487デフォルトの名無しさん (ワッチョイ 9a1d-MyS3)
2018/11/06(火) 16:17:47.15ID:Vcs848wz0 ... | sort -k 2.2 や
... | uniq -c
のような、パイプ挟んでもオプション使えるシェルスクリプトが書けません
これはどうやればいいのでしょうか?
... | uniq -c
のような、パイプ挟んでもオプション使えるシェルスクリプトが書けません
これはどうやればいいのでしょうか?
488デフォルトの名無しさん (ブーイモ MM7f-4S5W)
2018/11/06(火) 16:19:39.11ID:cucsRggBM 理解不能
489デフォルトの名無しさん (ワッチョイ 9a1d-MyS3)
2018/11/06(火) 16:27:38.20ID:Vcs848wz0 ... | perl -0777 -ne 'print grep(m{ココ1}i, split("(?=ココ2)", $_));'
例えばこのような文脈で動作させていたものを
パイプ移行をシェルスクリプトに書いておき
変数ココ1 ココ2 に渡して処理したいのです
| split_grep.sh ココ1 ココ2
このように動作させたいのですが
$1 $2 ... などを見ても 参照できてなくて困っています
例えばこのような文脈で動作させていたものを
パイプ移行をシェルスクリプトに書いておき
変数ココ1 ココ2 に渡して処理したいのです
| split_grep.sh ココ1 ココ2
このように動作させたいのですが
$1 $2 ... などを見ても 参照できてなくて困っています
490デフォルトの名無しさん (ブーイモ MM7f-4S5W)
2018/11/06(火) 16:53:48.26ID:7Ll1zO1lM ' だからじゃねえか?適切に " を使え。
491デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/06(火) 18:09:54.51ID:dlj8br7m0 --helpオプションで出力される手引きの装飾についてだが
less(1)ユーティリティは太字とにしてるね。
less(1)ユーティリティは太字とにしてるね。
492デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/06(火) 23:18:09.57ID:9jHKU1L00 シェルスクリプトは20年動くとか言ってるやつがいるけど、
あれ嘘だなぁ。
各シェルの実装は互換性がない部分があるし、
同じシェルでもバージョンが変わると微妙に動きが変わる
POSIXという仕様があってもそれを完全に実装しているとは
限らないしバグもある。
20年前のJavaScriptと同じようなレベルだ。
そのJavaScriptも20年前のものが今でも動いているからねw
今のJavaScriptは本当にどれもで同じように動くようになったけど20年前は大変だった。
どのシェルでも同じように動くシェルスクリプトを書くのは今でも大変だよ
一度互換性テストでもやって準拠度100%を達成を競わせたほうが良いだろう
あれ嘘だなぁ。
各シェルの実装は互換性がない部分があるし、
同じシェルでもバージョンが変わると微妙に動きが変わる
POSIXという仕様があってもそれを完全に実装しているとは
限らないしバグもある。
20年前のJavaScriptと同じようなレベルだ。
そのJavaScriptも20年前のものが今でも動いているからねw
今のJavaScriptは本当にどれもで同じように動くようになったけど20年前は大変だった。
どのシェルでも同じように動くシェルスクリプトを書くのは今でも大変だよ
一度互換性テストでもやって準拠度100%を達成を競わせたほうが良いだろう
493デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/07(水) 03:53:59.64ID:XzpCa+6s0 「POSIXという一つの規格」がなぜそんなに強力だと思うのか分からない。
Pythonの公式文書やECMAが規格するJavaScriptと同等の立場でしょう。
もちろん,俺がシェルスクリプトを書くときは,俺がPythonやJavaScriptを書くときと同じく
POSIXという共通規格に従うようにしているが,それは今後20年動かす為じゃない。
Pythonの公式文書やECMAが規格するJavaScriptと同等の立場でしょう。
もちろん,俺がシェルスクリプトを書くときは,俺がPythonやJavaScriptを書くときと同じく
POSIXという共通規格に従うようにしているが,それは今後20年動かす為じゃない。
494デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/07(水) 09:26:49.70ID:66xysPr5r cronから実行しているシェル(スクリプト)があるんだけど
2重実行されると問題があるので
そのシェルをくるむ親シェルを作って
そこで事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる
でも最近もともと実行してるシェルを複数回ループで実行したい要件が出てきた
単純に親シェルでループさせることを考えたけど
pkillしてもループで再実行されてkill出来ずに2重実行される問題が出てくる
シェルを親子孫の3階層にして新しく間に挟む子シェルでループさせ
親シェルのpkillではこの子と孫とコマンドをkillするといいと思うんだけど
階層が深くなって嫌だなと思うんだけど何かいい案ない?
ちなみに孫シェルでループってのも考えたけど
cron以外ではループさせたくない場合が多いので
そこには手を加えずシンプルなままとしたいため考慮から外しました
2重実行されると問題があるので
そのシェルをくるむ親シェルを作って
そこで事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる
でも最近もともと実行してるシェルを複数回ループで実行したい要件が出てきた
単純に親シェルでループさせることを考えたけど
pkillしてもループで再実行されてkill出来ずに2重実行される問題が出てくる
シェルを親子孫の3階層にして新しく間に挟む子シェルでループさせ
親シェルのpkillではこの子と孫とコマンドをkillするといいと思うんだけど
階層が深くなって嫌だなと思うんだけど何かいい案ない?
ちなみに孫シェルでループってのも考えたけど
cron以外ではループさせたくない場合が多いので
そこには手を加えずシンプルなままとしたいため考慮から外しました
495デフォルトの名無しさん (ブーイモ MM26-4S5W)
2018/11/07(水) 09:42:23.92ID:+ld6QnEyM pkillとか野蛮な方法じゃなくて、ちゃんとロックして、ロック取れなければ死ねばいいのでは?
496デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 09:48:09.44ID:bimd4khFa もしflockコマンドがあればそれで可能な筈。
497デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 09:48:23.84ID:v2POOMdv0 どこまでの子プロセスとか残る可能性がとか条件が全然わからんが、シェルスクリプトを2重実行しないようにだけなら、その冒頭で、
[ -f /var/run/hogehogeshellscript.pid ] && kill -0 $(cat /var/run/hogehogeshellscript.pid) && exit 0
printf "%d" $$ > /var/run/hogehogeshellscript.pid
後始末で
rm -f /var/run/hogehogeshellscript.pid
が常套手段だな、俺は。「事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる」なんて、バグって残る場合しか考えられない(そんな動いているの殺していいの??)
[ -f /var/run/hogehogeshellscript.pid ] && kill -0 $(cat /var/run/hogehogeshellscript.pid) && exit 0
printf "%d" $$ > /var/run/hogehogeshellscript.pid
後始末で
rm -f /var/run/hogehogeshellscript.pid
が常套手段だな、俺は。「事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる」なんて、バグって残る場合しか考えられない(そんな動いているの殺していいの??)
498デフォルトの名無しさん (ワッチョイ 9a7f-yep2)
2018/11/07(水) 09:55:36.16ID:zUpUn5UV0 そもそも考え方自体が理解しがたい
こんなクソなことやり出すやつとは仕事したくない
こんなクソなことやり出すやつとは仕事したくない
499デフォルトの名無しさん (ブーイモ MM26-4S5W)
2018/11/07(水) 09:56:12.27ID:+ld6QnEyM500デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 10:01:20.98ID:v2POOMdv0501デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:16:33.73ID:UCphLCxy0 バグの言い訳をシェルスクリプトのせいにするなよ
シェルスクリプト以外でもやり方は一緒だろ
それともシェルスクリプトでは不可能で
他の言語なら可能な方法があるとでも言うのか?
> そんな超短時間で多重起動されうるもんなんて、シェルスクリプトなんて書かない
シェルスクリプト以外でいいんで、どうやるのか答えてみて
シェルスクリプト以外でもやり方は一緒だろ
それともシェルスクリプトでは不可能で
他の言語なら可能な方法があるとでも言うのか?
> そんな超短時間で多重起動されうるもんなんて、シェルスクリプトなんて書かない
シェルスクリプト以外でいいんで、どうやるのか答えてみて
502デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:40:25.66ID:v2POOMdv0 バグの言い訳??
そんなタイミングにシビアなのは普通にCなりで書くけど?なんか知らんがシェルスクリプトで処理スピードに必死なヤツもいるけど、そんなに時間にシビアなら普通にCでするだろう(一部でも)
てか、デーモンだろな。別にシェルスクリプトでデーモン書いてもいいけど、小回りが利くのはやっぱCなりの方だな
そんなタイミングにシビアなのは普通にCなりで書くけど?なんか知らんがシェルスクリプトで処理スピードに必死なヤツもいるけど、そんなに時間にシビアなら普通にCでするだろう(一部でも)
てか、デーモンだろな。別にシェルスクリプトでデーモン書いてもいいけど、小回りが利くのはやっぱCなりの方だな
503デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:41:10.13ID:UCphLCxy0 いや、だから、C言語でいいんで、多重起動しない方法書いてみてって、
どうせそれがシェルスクリプトでも使えるだろ
どうせそれがシェルスクリプトでも使えるだろ
504デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:48:02.80ID:v2POOMdv0 何に絡んでいるのかわからん
粒度が全然違うことなぞCで何か書いたことがあるのならわかるだろう。>>499がその粒度の話だからな
粒度が全然違うことなぞCで何か書いたことがあるのならわかるだろう。>>499がその粒度の話だからな
505デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:50:35.19ID:UCphLCxy0 絡んでいない。C言語で多重起動しない方法は
シェルスクリプトでも使えると言ってる
だからシェルスクリプトで書かない理由にはならない
シェルスクリプトでも使えると言ってる
だからシェルスクリプトで書かない理由にはならない
506デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:52:41.86ID:v2POOMdv0 だから、粒度って言ってるじゃん。わからんのだな。話にならんな
507デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/07(水) 11:55:02.47ID:oFuFuwyAa 結論の出ない子供同士の戦い
ファイッ
ファイッ
508デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:55:08.02ID:UCphLCxy0 > 粒度って言ってるじゃん
なんの説明にも反論にもなってない
粒度が違っても関係ない話だろ(他の人には「粒度」といい方で伝わってるはずw)
なんの説明にも反論にもなってない
粒度が違っても関係ない話だろ(他の人には「粒度」といい方で伝わってるはずw)
509デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:56:38.86ID:v2POOMdv0 うるせっw
どうもシェルスクリプト大好き(後は私怨かなあとw)な絡みで、それ視点でしかなのでうやむやにしてんだけどね。言ったってたぶん聞かない人だから
どうもシェルスクリプト大好き(後は私怨かなあとw)な絡みで、それ視点でしかなのでうやむやにしてんだけどね。言ったってたぶん聞かない人だから
510デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:59:05.62ID:v2POOMdv0511デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:06:12.02ID:UCphLCxy0 > 余計なことがない方が粒度が細かい
粒度の使い方を待ちってるだけじゃないか
で、デーモンにしないと多重起動は防げないって話をしてんのか?
デーモンにすれば多重起動を防げる理由は?
ほらな、突っ込まれるとこの程度、答えられないんだよw
粒度の使い方を待ちってるだけじゃないか
で、デーモンにしないと多重起動は防げないって話をしてんのか?
デーモンにすれば多重起動を防げる理由は?
ほらな、突っ込まれるとこの程度、答えられないんだよw
512デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 12:07:51.60ID:8DqZdVO16 すまん 口を挟むけど
「
1.
シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
可搬な方法ではほとんど制御できない。
一方でCはそもそもOSがそれで書かれているように、上記の事柄を比較的簡単に実現できる。
2.
ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
3.
よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
だから無意味
」
↑こういう理解でいいか?
「
1.
シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
可搬な方法ではほとんど制御できない。
一方でCはそもそもOSがそれで書かれているように、上記の事柄を比較的簡単に実現できる。
2.
ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
3.
よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
だから無意味
」
↑こういう理解でいいか?
513デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:09:17.82ID:v2POOMdv0 >>511
>粒度の使い方を待ちってる(間違ってる)だけじゃないか
はあ?
>デーモンにすれば多重起動を防げる理由は
はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
>粒度の使い方を待ちってる(間違ってる)だけじゃないか
はあ?
>デーモンにすれば多重起動を防げる理由は
はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
514デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:16:34.30ID:v2POOMdv0 >>512
別に無意味とは言わないよ。俺は書かないというだけで。なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。それならCでのほうがスッキリ小回りが利くしという
後は、超短時間で多重起動されうるもんなんてよりCで書くなという、そんな起動頻度のあるのは、スクリプトではしない
別に無意味とは言わないよ。俺は書かないというだけで。なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。それならCでのほうがスッキリ小回りが利くしという
後は、超短時間で多重起動されうるもんなんてよりCで書くなという、そんな起動頻度のあるのは、スクリプトではしない
515デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:21:30.58ID:UCphLCxy0 >>512
> シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
> 可搬な方法ではほとんど制御できない。
それはプロセスの多重起動を防ぐ方法と関係ない
> ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
コマンドの制御時間やファイルの扱いとかなんの話をしてるのか
>>497はアルゴリズムの間違いなのでロックファイルがどうとか関係ない
(どうせC言語で作っても同じ間違いをするだろう)
> よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
今はプロセスの多重起動の話でしか無いので、多重起動が出来ないならば運用に耐えられる
それがシェルスクリプトできないわけがない。
> シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
> 可搬な方法ではほとんど制御できない。
それはプロセスの多重起動を防ぐ方法と関係ない
> ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
コマンドの制御時間やファイルの扱いとかなんの話をしてるのか
>>497はアルゴリズムの間違いなのでロックファイルがどうとか関係ない
(どうせC言語で作っても同じ間違いをするだろう)
> よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
今はプロセスの多重起動の話でしか無いので、多重起動が出来ないならば運用に耐えられる
それがシェルスクリプトできないわけがない。
516デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:24:39.53ID:UCphLCxy0 >>513
> はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
デーモンが一つ動けば十分だとかそういう話をしてるんじゃない。
プロセスの多重起動を防ぐにはどうするかの話で、、
それはデーモンにしないと出来ないことではないだろ
>>514
> なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。
だから、なんでシェルスクリプトにこだわってるのか?
こっちはお前が、プロセスの多重起動を防ぐ正しい方法を知らないんだろうなって思ってるんだよ。
だからC言語でいいから書いてみろと。
同じアルゴリズムはシェルスクリプトでも使えるから、シェルスクリプトかどうかの話じゃないって言ってんの
で、C言語でプロセスの多重起動を防ぐ正しい方法を書けないんだろう?
出てないってことそういうことだ。シェルスクリプトだからと嘘をつくな
> はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
デーモンが一つ動けば十分だとかそういう話をしてるんじゃない。
プロセスの多重起動を防ぐにはどうするかの話で、、
それはデーモンにしないと出来ないことではないだろ
>>514
> なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。
だから、なんでシェルスクリプトにこだわってるのか?
こっちはお前が、プロセスの多重起動を防ぐ正しい方法を知らないんだろうなって思ってるんだよ。
だからC言語でいいから書いてみろと。
同じアルゴリズムはシェルスクリプトでも使えるから、シェルスクリプトかどうかの話じゃないって言ってんの
で、C言語でプロセスの多重起動を防ぐ正しい方法を書けないんだろう?
出てないってことそういうことだ。シェルスクリプトだからと嘘をつくな
517デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:24:57.98ID:v2POOMdv0518デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:26:20.56ID:v2POOMdv0 >>516
ただのイチャモンやん。また、無茶苦茶やな。なにを問題にしているのかイミフ。いちゃもんのためのいちゃもんやなあ
ただのイチャモンやん。また、無茶苦茶やな。なにを問題にしているのかイミフ。いちゃもんのためのいちゃもんやなあ
519デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:29:45.81ID:UCphLCxy0520デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:31:32.56ID:UCphLCxy0 あ、>>517って俺の書き込みか
わかるように書けよw
わかるように書けよw
521デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:33:40.01ID:v2POOMdv0 >>519
うーむ、だから粒度の問題と言っているんだけど。なにがアルゴリズムに問題があるの?cronで起動する大きな粒度では問題ないと思うけど
あるとしたら、起動終了間近とか??それは別の話だろうしな???
うーむ、だから粒度の問題と言っているんだけど。なにがアルゴリズムに問題があるの?cronで起動する大きな粒度では問題ないと思うけど
あるとしたら、起動終了間近とか??それは別の話だろうしな???
522デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:35:54.84ID:v2POOMdv0523デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:39:53.83ID:v2POOMdv0524デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 12:40:36.54ID:8DqZdVO16 >>515
俺は「プロセスの多重起動を防ぐ」というのを
「プロセスを一つ立ち上がっていることを感知する」
という仕組みを作ることだと思っていて、その方法の一つに
「プロセスが起動するときに特定のファイルを生成し
そして終了するときそのファイルを削除する
(そして そのファイルの有無によって多重起動を判断する)」
というものがある という認識。
「特定のファイル」はロックファイルと呼ばれる。
で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
最初に起動したプロセスがロックファイルを生成し終える前に
二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
(結果として二重起動する)
ということだと思っている。
このときに関わってくるのはファイルIOとかその辺のカーネル領域に片足突っ込んだ話なので
Cではできるがシェルスクリプトでは難しいということだと考えたんだけど
違いますかね。
俺は「プロセスの多重起動を防ぐ」というのを
「プロセスを一つ立ち上がっていることを感知する」
という仕組みを作ることだと思っていて、その方法の一つに
「プロセスが起動するときに特定のファイルを生成し
そして終了するときそのファイルを削除する
(そして そのファイルの有無によって多重起動を判断する)」
というものがある という認識。
「特定のファイル」はロックファイルと呼ばれる。
で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
最初に起動したプロセスがロックファイルを生成し終える前に
二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
(結果として二重起動する)
ということだと思っている。
このときに関わってくるのはファイルIOとかその辺のカーネル領域に片足突っ込んだ話なので
Cではできるがシェルスクリプトでは難しいということだと考えたんだけど
違いますかね。
525デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 12:43:18.47ID:bimd4khFa flockコマンド使えって。シェル単体ではそこまでやってくれるやつは多分ないだろうし。
526デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:47:11.27ID:v2POOMdv0527デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/07(水) 12:56:45.06ID:sVRrLKNr0528デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/07(水) 12:58:34.71ID:sVRrLKNr0 >>525
POSIXにないんでしょ、多分
POSIXにないんでしょ、多分
529デフォルトの名無しさん (ブーイモ MM26-4S5W)
2018/11/07(水) 13:04:03.69ID:jS/U4UFDM flockがあればそれでいいけど、なくてもmkdirとかln -sで正しいロックが書けるよ
530デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 13:04:59.10ID:bimd4khFa ロックファイルの有無だけでやる場合は open() で O_EXCL 指定してファイル作ろうとしないと駄目で、シェルスクリプトからこれがやれるかどうかはシェル次第になる。
そういう外部コマンド作って呼び出せば確実だが、それがありなら fcntl() や flock() 等を使ったもう少し信頼性の高そうなロックをした方が良いように思う。
ロックファイルだけでロックする場合はもう一つ強制終了させられた時にファイルが消せずに残る問題がある。
これはファイルのタイムスタンプを見て古ければ動いていないとみなす方法である程度回避可能だが、その場合は動いているプロセスが定期的にファイルを touch する等して更新する必要がある。
しかしそれでも SIGSTOP により停止していただけだったら役に立たない。
そういう外部コマンド作って呼び出せば確実だが、それがありなら fcntl() や flock() 等を使ったもう少し信頼性の高そうなロックをした方が良いように思う。
ロックファイルだけでロックする場合はもう一つ強制終了させられた時にファイルが消せずに残る問題がある。
これはファイルのタイムスタンプを見て古ければ動いていないとみなす方法である程度回避可能だが、その場合は動いているプロセスが定期的にファイルを touch する等して更新する必要がある。
しかしそれでも SIGSTOP により停止していただけだったら役に立たない。
531デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 13:05:12.80ID:8DqZdVO16 https://qiita.com/richmikan@github/items/6ca1ec3b354ae2f5505d
「シェルスクリプト 排他制御」でググったらこんな記事があったよ。
「シェルスクリプト 排他制御」でググったらこんな記事があったよ。
532デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 13:06:37.34ID:bimd4khFa >>529
ああ。それでもできるか。
ああ。それでもできるか。
533デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 13:22:04.61ID:v2POOMdv0 なるほど、OS内でキッチリ一元管理しているナニカに頼ればいいのか&あるのか
534デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:40:10.94ID:UCphLCxy0 >>524
> で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
> 最初に起動したプロセスがロックファイルを生成し終える前に
> 二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
> (結果として二重起動する)
正しくない
正しいロックファイルアルゴリズムであれば、素早く二つのプロセスを立ち上げても問題ない
あんたが書いたそれはは典型的な間違ったロックファイルアルゴリズム(そして>>497も同様)
アルゴリズム自体の問題なのでシェルスクリプトかどうかは関係ない
直接的な解答ではなくて関連した話題になるが、多重起動防止以外でも重要だから読んどけ
https://www.ibm.com/developerworks/jp/linux/library/l-sprace/index.html
> 単純な解決方法は、open()をフラグO_WRONLY | O_CREAT | O_EXCLで使うことです
https://www.ipa.go.jp/security/fy20/reports/tech1-tg/2_05.html
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
> で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
> 最初に起動したプロセスがロックファイルを生成し終える前に
> 二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
> (結果として二重起動する)
正しくない
正しいロックファイルアルゴリズムであれば、素早く二つのプロセスを立ち上げても問題ない
あんたが書いたそれはは典型的な間違ったロックファイルアルゴリズム(そして>>497も同様)
アルゴリズム自体の問題なのでシェルスクリプトかどうかは関係ない
直接的な解答ではなくて関連した話題になるが、多重起動防止以外でも重要だから読んどけ
https://www.ibm.com/developerworks/jp/linux/library/l-sprace/index.html
> 単純な解決方法は、open()をフラグO_WRONLY | O_CREAT | O_EXCLで使うことです
https://www.ipa.go.jp/security/fy20/reports/tech1-tg/2_05.html
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
535デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:43:12.68ID:UCphLCxy0 もう少し引用する範囲を広げる
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
> これを POSIX シェルで行うには、set -C を使う。set -C は noclobber オプションを有効にする。
> noclobber が有効な場合、> によるリダイレクトでの open には O_EXCL が指定される。
> これを使ってテンポラリファイルの生成に挑戦し、失敗したときは終了するには以下のようにする。
> また、ここでは TMPDIR が指定された場合には使うようにしている。
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
> これを POSIX シェルで行うには、set -C を使う。set -C は noclobber オプションを有効にする。
> noclobber が有効な場合、> によるリダイレクトでの open には O_EXCL が指定される。
> これを使ってテンポラリファイルの生成に挑戦し、失敗したときは終了するには以下のようにする。
> また、ここでは TMPDIR が指定された場合には使うようにしている。
536デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:44:46.92ID:UCphLCxy0537デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 13:45:31.17ID:v2POOMdv0 ほんと場合によってってって無いやつだな。原理主義者か?
538デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 13:49:03.61ID:8DqZdVO16539デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:57:13.33ID:UCphLCxy0 ロックの確認とロックかけるのをアトミックにやらないとか
まともにロック処理やったことがない証拠だよ
これは初心者は誰でもやる典型的な間違いだからな
基本を知らずに独自の思いつきで実装するからそうなる
言われれ初めて気づく。だが一回言われればこうやれば
解決できるのかと深く記憶する話だから、単純に知識が欠けてるということ
だから他の言語でもどうせ同じなんだろということ。
まともにロック処理やったことがない証拠だよ
これは初心者は誰でもやる典型的な間違いだからな
基本を知らずに独自の思いつきで実装するからそうなる
言われれ初めて気づく。だが一回言われればこうやれば
解決できるのかと深く記憶する話だから、単純に知識が欠けてるということ
だから他の言語でもどうせ同じなんだろということ。
540デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 15:22:16.58ID:8DqZdVO16 ksh --helpは出力される手引きが装飾されてるね
541デフォルトの名無しさん (ブーイモ MM7f-bq42)
2018/11/07(水) 15:56:27.81ID:A+xcJusCM 最初っから主張の根拠を提示すれば良かったのに
何だかんだで下らないレスが続くの止めて欲しい
何だかんだで下らないレスが続くの止めて欲しい
542デフォルトの名無しさん (アウアウエー Sa52-lVsa)
2018/11/07(水) 17:41:34.46ID:P+AQGnBFa echo "echo \"Hello, world\!\""
これ実行したら
echo "Hello, world!"
にならない
echo "Hello, world\!"
なぜか!だけ手前についてしまう
これ実行したら
echo "Hello, world!"
にならない
echo "Hello, world\!"
なぜか!だけ手前についてしまう
543デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/07(水) 18:45:58.27ID:XzpCa+6s0544デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/07(水) 18:49:27.43ID:XzpCa+6s0 間違えてた。
「echo "echo \"Hello, world!\""」にして。
スクリプトの中ではPOSIX互換のインタラクティブシェルは
履歴展開をしないので上手くいく。
「echo "echo \"Hello, world!\""」にして。
スクリプトの中ではPOSIX互換のインタラクティブシェルは
履歴展開をしないので上手くいく。
545デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 19:24:02.67ID:UCphLCxy0 そういやkshで思い出したけど、
ksh88ってもしかして比較的最近(今も?)使われてたりする?
ksh88っていうぐらいだから1988年だろ?ksh93っていうぐらいだから1993年だろ?
流石にksh88はなんて30年前の化石使われてないだろ?と思ったけど
Solaris 11 でこんなこと書かれてたんだよね。意外と最近まで使われていたのかなぁ?と
https://docs.oracle.com/cd/E26924_01/html/E25934/userenv-1.html
> シェルの変更 - デフォルトのシェル /bin/sh が ksh93 にリンクされるようになりました。
> レガシー Bourne シェルは /usr/sunos/bin/sh として使用可能です。
> 旧バージョンの ksh88 は、shell/ksh88 パッケージの /usr/sunos/bin/ksh として使用可能になっています。
Solaris 11が最新版って言っても2011年11月9日リリースなので2日後に7年前のOSになるけど
(でもサポートはSolaris 10が2021年までなのか・・・)
そしてksh93の機能でこんな事書いてたんで、$(( )) が使えないシェルはksh88だったんだなって思ったところ
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/com.ibm.aix.osdevice/korn_shell_enhanced.htm
ksh88ってもしかして比較的最近(今も?)使われてたりする?
ksh88っていうぐらいだから1988年だろ?ksh93っていうぐらいだから1993年だろ?
流石にksh88はなんて30年前の化石使われてないだろ?と思ったけど
Solaris 11 でこんなこと書かれてたんだよね。意外と最近まで使われていたのかなぁ?と
https://docs.oracle.com/cd/E26924_01/html/E25934/userenv-1.html
> シェルの変更 - デフォルトのシェル /bin/sh が ksh93 にリンクされるようになりました。
> レガシー Bourne シェルは /usr/sunos/bin/sh として使用可能です。
> 旧バージョンの ksh88 は、shell/ksh88 パッケージの /usr/sunos/bin/ksh として使用可能になっています。
Solaris 11が最新版って言っても2011年11月9日リリースなので2日後に7年前のOSになるけど
(でもサポートはSolaris 10が2021年までなのか・・・)
そしてksh93の機能でこんな事書いてたんで、$(( )) が使えないシェルはksh88だったんだなって思ったところ
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/com.ibm.aix.osdevice/korn_shell_enhanced.htm
546デフォルトの名無しさん (アウアウエー Sa52-lVsa)
2018/11/07(水) 20:49:34.06ID:nHlOtVrla547デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/07(水) 20:55:26.75ID:XzpCa+6s0548デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/07(水) 21:01:40.12ID:XzpCa+6s0 >>546
「echo "echo \"Hello, world"'!'"\""」とかどうだろう。
参考: https://www.gnu.org/software/bash/manual/html_node/History-Interaction.html#History-Interaction
History expansions are introduced by the appearance of the history expansion character, which is ‘!’ by default. Only ‘\’ and ‘'’ may be used to escape the history expansion character,
but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string.
「echo "echo \"Hello, world"'!'"\""」とかどうだろう。
参考: https://www.gnu.org/software/bash/manual/html_node/History-Interaction.html#History-Interaction
History expansions are introduced by the appearance of the history expansion character, which is ‘!’ by default. Only ‘\’ and ‘'’ may be used to escape the history expansion character,
but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string.
549デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 21:21:50.95ID:UCphLCxy0 >>547
ksh・・・お前が諸悪の根源だったか
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743
> % posh -u -c 'echo "$@"'
> posh: @: parameter not set
poshはpdkshからフォークしている
> posh (0.0.1) unstable; urgency=low
> * Initial release. (copied from pdksh 5.2.14-6). closes: bug#150431.
そしてシンプルな(笑)解決方法をありがとう
(if書くのはもっと面倒だった)
もっとバッドノウハウあったら教えてくれ!
ksh・・・お前が諸悪の根源だったか
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743
> % posh -u -c 'echo "$@"'
> posh: @: parameter not set
poshはpdkshからフォークしている
> posh (0.0.1) unstable; urgency=low
> * Initial release. (copied from pdksh 5.2.14-6). closes: bug#150431.
そしてシンプルな(笑)解決方法をありがとう
(if書くのはもっと面倒だった)
もっとバッドノウハウあったら教えてくれ!
550デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/07(水) 22:18:01.95ID:XzpCa+6s0 >>549
あー。分かってると思うがこれは俺が考えた方法じゃない。
古いGNU grepでegrepコマンドを
https://git.savannah.gnu.org/cgit/grep.git/tree/src/Makefile.am?h=v2.5.1#n23
↑こうやって作ってたのを見掛けてさ。
これはすごい方法だと思って自分のシェルスクリプトに取り入れた。
でもPOSIX 2013でset -uが有効のときでも空の変数$@および変数$*がエラーにならない
っていうことが決定されたのでもう不必要。
http://pubs.opengroup.org/onlinepubs/9699919799.2013edition/utilities/V3_chap02.html#tag_18_25_18
あー。分かってると思うがこれは俺が考えた方法じゃない。
古いGNU grepでegrepコマンドを
https://git.savannah.gnu.org/cgit/grep.git/tree/src/Makefile.am?h=v2.5.1#n23
↑こうやって作ってたのを見掛けてさ。
これはすごい方法だと思って自分のシェルスクリプトに取り入れた。
でもPOSIX 2013でset -uが有効のときでも空の変数$@および変数$*がエラーにならない
っていうことが決定されたのでもう不必要。
http://pubs.opengroup.org/onlinepubs/9699919799.2013edition/utilities/V3_chap02.html#tag_18_25_18
551デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 00:40:04.66ID:rJTiWJ810 >>550
modernishでも言及されてた。時代遅れのワークアラウンドだってw
でも現存するシェルに蘇っておるのじゃよ
昔の人には有名な回避策なのかな?
https://github.com/modernish/modernish/blob/master/README.md
> BUG_PARONEARG: When IFS is empty on bash 3.x and 4.x (i.e. field splitting is off),
> ${1+"$@"} is counted as a single argument instead of each positional parameter as
> separate arguments. To avoid this bug, simply use "$@" instead. (${1+"$@"}
> is an obsolete workaround for a fatal shell bug, FTL_UPP.)
modernishでも言及されてた。時代遅れのワークアラウンドだってw
でも現存するシェルに蘇っておるのじゃよ
昔の人には有名な回避策なのかな?
https://github.com/modernish/modernish/blob/master/README.md
> BUG_PARONEARG: When IFS is empty on bash 3.x and 4.x (i.e. field splitting is off),
> ${1+"$@"} is counted as a single argument instead of each positional parameter as
> separate arguments. To avoid this bug, simply use "$@" instead. (${1+"$@"}
> is an obsolete workaround for a fatal shell bug, FTL_UPP.)
552デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/08(木) 06:54:13.32ID:RnVV1kHy0 modernishおもしろいね。
modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_05
ここには確かに開き丸括弧を前置してもいいとあるけど一般的には省略されるでしょ。
なにかこれも旧時代のシェルの不具合への回避策なのかな。
それこそGNU Bash 3.xで動かない,とか。
modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_05
ここには確かに開き丸括弧を前置してもいいとあるけど一般的には省略されるでしょ。
なにかこれも旧時代のシェルの不具合への回避策なのかな。
それこそGNU Bash 3.xで動かない,とか。
553デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 21:39:50.16ID:rJTiWJ810 >>552
やっとmodernishに興味を持ってくれた人がw
まあ俺もバグ情報とか参考になるなって程度にしか見てないんだけど
> modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
それ見た時、何この文法?modernishでそこまで拡張できるの?って驚いたw
単なる普通の文法だったわけだけど
> それこそGNU Bash 3.xで動かない,とか。
少なくともbash 2.03では開き括弧なくて動くよ
やっとmodernishに興味を持ってくれた人がw
まあ俺もバグ情報とか参考になるなって程度にしか見てないんだけど
> modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
それ見た時、何この文法?modernishでそこまで拡張できるの?って驚いたw
単なる普通の文法だったわけだけど
> それこそGNU Bash 3.xで動かない,とか。
少なくともbash 2.03では開き括弧なくて動くよ
554デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 21:43:11.48ID:rJTiWJ810 話変わるけど、 foo | bar みたいなコマンドで
fooからたくさん出力されるけど、barの処理が遅いってとき
fooからの出力ってブロックされるのかな?
なんか20〜30行ぐらいでブロックされるような
出力の停止、遅延が起きてる気がする
メモリにバッファリングするだろうから、それが溢れないような処置として
そういう仕様は理解できるけど、どこかに書いてあるのかな?
シェルの仕様っぽい気がするけど、OSも絡んでいそうな気もする
fooからたくさん出力されるけど、barの処理が遅いってとき
fooからの出力ってブロックされるのかな?
なんか20〜30行ぐらいでブロックされるような
出力の停止、遅延が起きてる気がする
メモリにバッファリングするだろうから、それが溢れないような処置として
そういう仕様は理解できるけど、どこかに書いてあるのかな?
シェルの仕様っぽい気がするけど、OSも絡んでいそうな気もする
555デフォルトの名無しさん (ワッチョイ 418a-ANGR)
2018/11/08(木) 21:57:11.56ID:M53t5TPP0 >>554
タネンバウム先生の本は読んでるんだよね?
タネンバウム先生の本は読んでるんだよね?
556デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 21:59:18.34ID:rJTiWJ810 >>555
読んでないよ。どれ読めばいい?
読んでないよ。どれ読めばいい?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市内閣、支持率横ばい75% (日経・テレ東 世論調査) ★3 [少考さん★]
- 【窪田順生氏】「高市政権人気の裏には多数の“弱者感を抱えた男”の存在がある」弱者感を抱えた男は人知れずマイルド右翼に… [おっさん友の会★]
- 【調査】クレジットカード、1人何枚持つのが「平均的」?★3 [ひぃぃ★]
- 【テレビ】池上彰氏 報道の自由度が高い国の特徴「どんどん政府を批判する。政治家は受け入れる」 一方独裁国家は… [冬月記者★]
- 【国防】防空ミサイル(中SAM) 輸出検討へ 政府、フィリピンと非公式協議 [シャチ★]
- 「ヘイトスピーチをやめろ」 各地の「移民反対デモ」に抗議活動 [蚤の市★]
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ174
- 悲報】福山雅治さん逮捕
- (*´ω`*)( ・᷄ὢ・᷅ )壁際だ
- 高市がマクロンを無視してる動画がなぜか外人によって「マクロンざまぁ」的な論調で大拡散中、マクロンはそんなに嫌われてるのかよw [469534301]
- 【画像】彼女「目玉焼きハンバーグを作ったよ♥」ケンモメンならどうする? [242521385]
- フィフィ「「歌唱強制中断」騒動、この時期に中国でライブ公演しようとするアーティストの方にも問題があるのでは?」 [377482965]
