シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。
前スレ: シェルスクリプト総合 その36
https://mevius.5ch.net/test/read.cgi/tech/1614212414/
関連スレ
・【Bash】Windows Subsystem for Linux【WSL】11
https://mao.5ch.net/test/read.cgi/linux/1627507889/
・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/
シェルスクリプト総合 その37
■ このスレッドは過去ログ倉庫に格納されています
2021/10/05(火) 22:49:30.91ID:KsbWuyFp
331デフォルトの名無しさん
2021/12/14(火) 19:18:27.78ID:/wewuKga All changes to variables in an arithmetic expression shall be in effect after the arithmetic expansion, as in the parameter expansion "${x=value}".
If the shell variable x contains a value that forms a valid integer constant, optionally including a leading <plus-sign> or <hyphen-minus>, then the arithmetic expansions "$((x))" and "$(($x))" shall return the same value.
As an extension, the shell may recognize arithmetic expressions beyond those listed. The shell may use a signed integer type with a rank larger than the rank of signed long. The shell may use a real-floating type instead of signed long as long as it does not affect the results in cases where there is no overflow. If the expression is invalid, or the contents of a shell variable used in the expression are not recognized by the shell, the expansion fails and the shell shall write a diagnostic message to standard error indicating the failure.
どこにあるのか、言ってみ
If the shell variable x contains a value that forms a valid integer constant, optionally including a leading <plus-sign> or <hyphen-minus>, then the arithmetic expansions "$((x))" and "$(($x))" shall return the same value.
As an extension, the shell may recognize arithmetic expressions beyond those listed. The shell may use a signed integer type with a rank larger than the rank of signed long. The shell may use a real-floating type instead of signed long as long as it does not affect the results in cases where there is no overflow. If the expression is invalid, or the contents of a shell variable used in the expression are not recognized by the shell, the expansion fails and the shell shall write a diagnostic message to standard error indicating the failure.
どこにあるのか、言ってみ
332デフォルトの名無しさん
2021/12/14(火) 19:19:31.70ID:0juEz1uN >>327
そうやって、わざわざ相手にしてちゃんと調べてやる人がおるからやろ。w
そうやって、わざわざ相手にしてちゃんと調べてやる人がおるからやろ。w
333デフォルトの名無しさん
2021/12/14(火) 19:20:48.60ID:0juEz1uN あ、違うんか。
またいちびっとるとは思わんかった。
またいちびっとるとは思わんかった。
334デフォルトの名無しさん
2021/12/14(火) 19:21:00.40ID:/wewuKga 英語めないんでしょ?
2.6.4 算術式の展開
算術展開は、算術式を評価してその値を代入するためのメカニズムである。算術展開のフォーマットは以下のとおりです。
$((式))
式は二重引用符で囲まれているかのように扱われますが、式の中の二重引用符は特別に扱われません。シェルは、パラメータの展開、コマンドの置換、
引用符の除去のために、式のすべてのトークンを展開する。
次に、シェルはこれを算術式として扱い、式の値を代入する。算術式は、以下の例外を除き、
「算術の精度と演算」で示された規則に従って処理されなければならない。
符号付き長整数の算術演算のみが必要である。
ISO C規格の6.4.4.1項で規定されている
10進数定数、8進数定数、16進数定数のみを定数として認識する必要があります。
sizeof()演算子、前置および後置の "++"および"--"演算子は必須ではありません。
選択、反復、およびジャンプ文はサポートされていません。
算術式の中の変数に対するすべての変更は、"${x=value}"というパラメータ展開のように、
算術式の展開の後に効力を持つものとします。
シェルの変数xが、有効な整数定数を構成する値を含み、オプションとして先頭に<プラス記号>または
<ハイフン-マイナス>を含む場合、算術展開の"$((x)) "と"$(($x)) "は同じ値を返すものとします。
拡張機能として、シェルはここに挙げた以外の算術式を
認識することができます。シェルは、signed long のランクよりも大きいランクの符号付き整数型を使用することができます。
シェルは、オーバーフローが発生しない場合の結果に影響しない限り、signed long の代わりに real-floating 型を使用してもよい。式が無効な場合、または
式で使用されているシェル変数の内容がシェルによって認識されない場合、展開は失敗し、シェルは失敗を示す診断メッセージを標準エラーに書き込まなければならない。
2.6.4 算術式の展開
算術展開は、算術式を評価してその値を代入するためのメカニズムである。算術展開のフォーマットは以下のとおりです。
$((式))
式は二重引用符で囲まれているかのように扱われますが、式の中の二重引用符は特別に扱われません。シェルは、パラメータの展開、コマンドの置換、
引用符の除去のために、式のすべてのトークンを展開する。
次に、シェルはこれを算術式として扱い、式の値を代入する。算術式は、以下の例外を除き、
「算術の精度と演算」で示された規則に従って処理されなければならない。
符号付き長整数の算術演算のみが必要である。
ISO C規格の6.4.4.1項で規定されている
10進数定数、8進数定数、16進数定数のみを定数として認識する必要があります。
sizeof()演算子、前置および後置の "++"および"--"演算子は必須ではありません。
選択、反復、およびジャンプ文はサポートされていません。
算術式の中の変数に対するすべての変更は、"${x=value}"というパラメータ展開のように、
算術式の展開の後に効力を持つものとします。
シェルの変数xが、有効な整数定数を構成する値を含み、オプションとして先頭に<プラス記号>または
<ハイフン-マイナス>を含む場合、算術展開の"$((x)) "と"$(($x)) "は同じ値を返すものとします。
拡張機能として、シェルはここに挙げた以外の算術式を
認識することができます。シェルは、signed long のランクよりも大きいランクの符号付き整数型を使用することができます。
シェルは、オーバーフローが発生しない場合の結果に影響しない限り、signed long の代わりに real-floating 型を使用してもよい。式が無効な場合、または
式で使用されているシェル変数の内容がシェルによって認識されない場合、展開は失敗し、シェルは失敗を示す診断メッセージを標準エラーに書き込まなければならない。
335デフォルトの名無しさん
2021/12/14(火) 19:21:38.22ID:/wewuKga いちいち嘘を付く理由がわからんね
336デフォルトの名無しさん
2021/12/14(火) 19:22:29.34ID:sz49PmUD337デフォルトの名無しさん
2021/12/14(火) 19:23:44.74ID:/wewuKga 書いてないものをよく読めっていってごまかしてるのは
自分の間違いを認められないからなのかな?
自分の間違いを認められないからなのかな?
338デフォルトの名無しさん
2021/12/14(火) 19:24:02.73ID:sz49PmUD339デフォルトの名無しさん
2021/12/14(火) 19:25:13.06ID:/wewuKga だからどこにも書いてないと言ってる
なんで反論してるの?
なんで反論してるの?
340デフォルトの名無しさん
2021/12/14(火) 19:26:13.37ID:/wewuKga > シェルの変数xが、有効な整数定数を構成する値を含み、オプションとして先頭に<プラス記号>または
> <ハイフン-マイナス>を含む場合、算術展開の"$((x)) "と"$(($x)) "は同じ値を返すものとします。
ここよく読めばわかるが、書いてないと言ってる。
他に言い返す言葉はある?
> <ハイフン-マイナス>を含む場合、算術展開の"$((x)) "と"$(($x)) "は同じ値を返すものとします。
ここよく読めばわかるが、書いてないと言ってる。
他に言い返す言葉はある?
341デフォルトの名無しさん
2021/12/14(火) 19:27:50.35ID:/wewuKga やっぱりだまっちゃったかw
342デフォルトの名無しさん
2021/12/14(火) 19:29:37.68ID:sz49PmUD343デフォルトの名無しさん
2021/12/14(火) 19:31:39.59ID:/wewuKga >>342
なんで内容を端折るんだ?
たった3行だろ
全部読めよ
理解してないまま回答してるんだから
そりゃ嘘つき呼ばわりされてもしょうがない
name=value
: $(($name = 123))
echo $value
これってPOSIX準拠?
なんで内容を端折るんだ?
たった3行だろ
全部読めよ
理解してないまま回答してるんだから
そりゃ嘘つき呼ばわりされてもしょうがない
name=value
: $(($name = 123))
echo $value
これってPOSIX準拠?
344デフォルトの名無しさん
2021/12/14(火) 19:32:41.80ID:/wewuKga 英語読めない。規格書を読めないって
バカにされていた○○主義者ってのがいたなぁ
バカにされていた○○主義者ってのがいたなぁ
345デフォルトの名無しさん
2021/12/14(火) 19:34:10.98ID:sz49PmUD346デフォルトの名無しさん
2021/12/14(火) 19:34:30.12ID:/wewuKga 書いてないことを自分の都合のいいように解釈して突っ走るところもそっくりだ
347デフォルトの名無しさん
2021/12/14(火) 19:34:50.92ID:sz49PmUD348デフォルトの名無しさん
2021/12/14(火) 19:34:51.68ID:/wewuKga349デフォルトの名無しさん
2021/12/14(火) 19:35:59.31ID:/wewuKga name=value
: $(($name = 123))
echo $value
これよんで、
> 問題にしてるのは
> $(($name = 123))
> これ
> name = 123
> これ
> =
> これ
> ってことでいいんだな?
なんて質問するのも頭が悪い
: $(($name = 123))
echo $value
これよんで、
> 問題にしてるのは
> $(($name = 123))
> これ
> name = 123
> これ
> =
> これ
> ってことでいいんだな?
なんて質問するのも頭が悪い
350デフォルトの名無しさん
2021/12/14(火) 19:36:18.40ID:sz49PmUD >>346,348
いつもの 誤魔化 しかよ
つくづくだな
お前はどこがPOSIX準拠じゃないと思ってるねん?
name=value
: $(($name = 123))
echo $value
全部か?w
いつもの 誤魔化 しかよ
つくづくだな
お前はどこがPOSIX準拠じゃないと思ってるねん?
name=value
: $(($name = 123))
echo $value
全部か?w
351デフォルトの名無しさん
2021/12/14(火) 19:37:27.42ID:/wewuKga352デフォルトの名無しさん
2021/12/14(火) 19:38:15.35ID:/wewuKga ホントなんでこんなバカなんだろうな
353デフォルトの名無しさん
2021/12/14(火) 19:38:33.15ID:/wewuKga 英語というか、規格書の読み方をっ勉強したほうがいいぞ
354デフォルトの名無しさん
2021/12/14(火) 19:42:47.04ID:sz49PmUD >>351,352,353
>POSIXにはname変数の中身が整数定数でないときに
>どうなるかの挙動が書いてない
なに言ってるの? name = 123 この部分だろ?
name変数の中身が整数定数 なんて関係ないぞ
コンピューターサイエンスw的に、型が無い言語なら当たり前的にもな
お前は仕様書、規格書読むのに必要な知識が足りなさすぎだがな、
よく言うよほんと自己紹介好きw
>POSIXにはname変数の中身が整数定数でないときに
>どうなるかの挙動が書いてない
なに言ってるの? name = 123 この部分だろ?
name変数の中身が整数定数 なんて関係ないぞ
コンピューターサイエンスw的に、型が無い言語なら当たり前的にもな
お前は仕様書、規格書読むのに必要な知識が足りなさすぎだがな、
よく言うよほんと自己紹介好きw
355デフォルトの名無しさん
2021/12/14(火) 19:44:03.99ID:/wewuKga > なに言ってるの? name = 123 この部分だろ?
name = 123 と書いたのはおまえ
↓どこにも書いてない。目が悪い?それとも頭?
name=value
: $(($name = 123))
echo $value
name = 123 と書いたのはおまえ
↓どこにも書いてない。目が悪い?それとも頭?
name=value
: $(($name = 123))
echo $value
356デフォルトの名無しさん
2021/12/14(火) 19:44:44.42ID:/wewuKga > If the shell variable x contains a value that forms a valid integer constant,
読めないんだろうなぁ
はい、翻訳
シェルの変数xが、有効な整数定数を構成する値を含み、
読めないんだろうなぁ
はい、翻訳
シェルの変数xが、有効な整数定数を構成する値を含み、
357デフォルトの名無しさん
2021/12/14(火) 19:45:07.43ID:6VIYonG0 $nameをvalueに変えるparameter expansionは最初に行われるでしょ
> The shell shall expand all tokens in the expression for parameter expansion, command substitution, and quote removal.
その後は普通にvalue = 123が実行されるだけ
> The shell shall expand all tokens in the expression for parameter expansion, command substitution, and quote removal.
その後は普通にvalue = 123が実行されるだけ
358デフォルトの名無しさん
2021/12/14(火) 19:45:36.95ID:/wewuKga 「その後は普通にvalue = 123が実行されるだけ」と書いていない
359デフォルトの名無しさん
2021/12/14(火) 19:45:41.12ID:sz49PmUD >>355
じゃあ、お前の言う
>POSIXにはname変数の中身が整数定数でないときに
>どうなるかの挙動が書いてない
ってどこの部分やねん
お前は他人の文の意味を読めなさすぎ、のくせによく言うよを繰り返しすぎだな
じゃあ、お前の言う
>POSIXにはname変数の中身が整数定数でないときに
>どうなるかの挙動が書いてない
ってどこの部分やねん
お前は他人の文の意味を読めなさすぎ、のくせによく言うよを繰り返しすぎだな
360デフォルトの名無しさん
2021/12/14(火) 19:51:21.66ID:sz49PmUD361デフォルトの名無しさん
2021/12/14(火) 19:57:45.01ID:/wewuKga362デフォルトの名無しさん
2021/12/14(火) 20:15:07.62ID:/wewuKga POSIX準拠じゃないのはこれか
name="1+2"
echo $(( name ))
name="1+2"
echo $(( name ))
363デフォルトの名無しさん
2021/12/14(火) 20:16:20.29ID:/wewuKga 今までの流れからすればこう書いたほうがいいね
name="var=1+2"
echo $(( name ))
name変数の中身が整数定数でないときに
どうなるかの挙動は書いてない
name="var=1+2"
echo $(( name ))
name変数の中身が整数定数でないときに
どうなるかの挙動は書いてない
364デフォルトの名無しさん
2021/12/14(火) 20:32:34.85ID:2RbqpbYV シェルスクリプトで小数演算
dc ではいけないのか?
dc ではいけないのか?
365デフォルトの名無しさん
2021/12/18(土) 21:47:26.51ID:ThKMmio5 文字の長さに応じていい感じにタブの個数調整してくれる素敵なワンライナーとかない?
366デフォルトの名無しさん
2021/12/19(日) 00:43:08.09ID:1P9anxgU ワンライナーじゃなくてコマンドだろ
だいたいタブ個数調整と言われて
仕様がわからないとなんとも言えん
だいたいタブ個数調整と言われて
仕様がわからないとなんとも言えん
367デフォルトの名無しさん
2021/12/19(日) 04:58:32.60ID:Q8lTA8Fy unexpand
368デフォルトの名無しさん
2021/12/25(土) 20:40:43.43ID:62MjaTIU369デフォルトの名無しさん
2021/12/25(土) 21:25:20.38ID:gsyC6xqY >>368
2バイト文字では試してないけど
タブは8の倍数で位置を揃えるために必要な数が切り替わるので文字列リストの中で最大文字数のものに付与するタブを1として文字数が少なくなるほどタブを増やして行けばいいと分かった
最大文字数が42の場合
0〜7 タブ6つ
8〜15 タブ5つ
16〜23 タブ4つ
24〜31 タブ3つ
32〜39 タブ2つ
40〜47 タブ1つ
……
BINDのzoneファイルにAレコード大量追加したかっただけだから
ifで分岐させてなんとかしたけどもっと上手いことできるなら頼む
2バイト文字では試してないけど
タブは8の倍数で位置を揃えるために必要な数が切り替わるので文字列リストの中で最大文字数のものに付与するタブを1として文字数が少なくなるほどタブを増やして行けばいいと分かった
最大文字数が42の場合
0〜7 タブ6つ
8〜15 タブ5つ
16〜23 タブ4つ
24〜31 タブ3つ
32〜39 タブ2つ
40〜47 タブ1つ
……
BINDのzoneファイルにAレコード大量追加したかっただけだから
ifで分岐させてなんとかしたけどもっと上手いことできるなら頼む
370デフォルトの名無しさん
2021/12/25(土) 21:48:29.81ID:sYCPCNUA >>369
これを渡したら
<test.lst>
abc.c0м
defghijk.c0.jρ
123456.nёt
zzz.i0
これを出力して欲しい
<test_.lst>
abc.c0м IN A localhostのIP
defghijk.c0.jρ IN A localhostのIP
123456.nёt IN A localhostのIP
zzz.i0 IN A localhostのIP
↑
スマホからだからあれだがIN A以降は揃ってるつもり
これを渡したら
<test.lst>
abc.c0м
defghijk.c0.jρ
123456.nёt
zzz.i0
これを出力して欲しい
<test_.lst>
abc.c0м IN A localhostのIP
defghijk.c0.jρ IN A localhostのIP
123456.nёt IN A localhostのIP
zzz.i0 IN A localhostのIP
↑
スマホからだからあれだがIN A以降は揃ってるつもり
371デフォルトの名無しさん
2021/12/25(土) 22:27:57.12ID:qPDC9gWr printfのが簡単なんじゃないの?
372デフォルトの名無しさん
2021/12/25(土) 22:32:53.73ID:o6Yb7nqK ifとprintfでやった
373デフォルトの名無しさん
2021/12/26(日) 01:41:37.96ID:7bx5KWMB >>370
スペース区切りの複数単語が1行に入っていて1番目と2番目の間の空白を調整して2番目が全行で同じ位置から始まるようにするってことね。
スペース区切りの複数単語が1行に入っていて1番目と2番目の間の空白を調整して2番目が全行で同じ位置から始まるようにするってことね。
374デフォルトの名無しさん
2021/12/26(日) 01:44:16.01ID:7bx5KWMB あ、ちょっと違うか。2番目以降は固定で決まっているから1番目の単語だけ読ませてその後ろのタブを何個付加するかの問題か。
375デフォルトの名無しさん
2021/12/26(日) 02:10:55.11ID:7bx5KWMB >>370
できた。perl だ。
$ perl -ne 'chomp;push(@s,$_);if($l<length){$l=length} END{$m=int($l/8)+1;for(@s){print$_.("\t" x ($m-int(length($_)/8)))."IN A localhostのIP\n"}}' test.lst
abc.c0м IN A localhostのIP
defghijk.c0.jρ IN A localhostのIP
123456.nёt IN A localhostのIP
zzz.i0 IN A localhostのIP
$
できた。perl だ。
$ perl -ne 'chomp;push(@s,$_);if($l<length){$l=length} END{$m=int($l/8)+1;for(@s){print$_.("\t" x ($m-int(length($_)/8)))."IN A localhostのIP\n"}}' test.lst
abc.c0м IN A localhostのIP
defghijk.c0.jρ IN A localhostのIP
123456.nёt IN A localhostのIP
zzz.i0 IN A localhostのIP
$
376デフォルトの名無しさん
2021/12/26(日) 02:14:02.08ID:7bx5KWMB ただし、UTF-8で複数バイト文字混ざりだと画面上の幅とバイト数が一致しなくて失敗する行が出てくるだろうな。
377デフォルトの名無しさん
2021/12/26(日) 02:30:31.24ID:Opbh/M6O スレタイ読めよ
378デフォルトの名無しさん
2021/12/26(日) 06:24:53.12ID:7bx5KWMB >>377
シェルだけでワンライナーにしろってか?可能な感じはするが、長くなりそうだな。ちょっと君試しに作ってみなよ。
シェルだけでワンライナーにしろってか?可能な感じはするが、長くなりそうだな。ちょっと君試しに作ってみなよ。
379デフォルトの名無しさん
2021/12/26(日) 06:55:50.56ID:Guj/6jti いいかげんワンライナーなんてものからは卒業すべき
あれは実用的ではない
あれは実用的ではない
380デフォルトの名無しさん
2021/12/26(日) 07:00:58.21ID:Guj/6jti だいたい位置揃えならcolumnコマンドを使えばすむ
cat /etc/hosts | column -t
cat /etc/hosts | column -t
381デフォルトの名無しさん
2021/12/26(日) 08:08:53.29ID:7ywlyW9o columnコマンドなんてあったのな
これしゅごい
これしゅごい
382デフォルトの名無しさん
2021/12/26(日) 09:30:37.45ID:JgxQVN1x >>378
スレタイ読めよ
スレタイ読めよ
383デフォルトの名無しさん
2021/12/26(日) 12:47:31.30ID:N3NYq5+A プログラム技術。
384デフォルトの名無しさん
2021/12/26(日) 12:59:08.59ID:VAEhq19p すれたい
385デフォルトの名無しさん
2021/12/26(日) 13:59:45.22ID:0AMzbiZh 第一フィールドは20文字の決め打ちで
awk '{printf "%-20s %s", $1, "IN A 127.0.0.1\n"}' test.lst
awk '{printf "%-20s %s", $1, "IN A 127.0.0.1\n"}' test.lst
386デフォルトの名無しさん
2021/12/26(日) 17:10:00.49ID:NwCcamJz シェルではないね
387デフォルトの名無しさん
2021/12/26(日) 17:57:01.68ID:FJp/KqIP388デフォルトの名無しさん
2021/12/26(日) 20:01:39.02ID:nf0VENp6 columnはPOSIXじゃない!
よってawkで実装しなければいけない!
よってawkで実装しなければいけない!
389デフォルトの名無しさん
2021/12/26(日) 20:07:09.32ID:stZFhmVl >>388
っスレタイ
っスレタイ
390デフォルトの名無しさん
2021/12/26(日) 21:01:43.80ID:NGc68XAG フィルタープログラムはシェルスクリプトには必須だよ
391デフォルトの名無しさん
2021/12/26(日) 23:55:43.97ID:7bx5KWMB >>380>>385
TABになってないじゃん。
TABになってないじゃん。
392デフォルトの名無しさん
2021/12/26(日) 23:56:34.73ID:7bx5KWMB >>387
既存のコマンドで丁度良くTAB入れるやつは何てコマンド?
既存のコマンドで丁度良くTAB入れるやつは何てコマンド?
393デフォルトの名無しさん
2021/12/27(月) 01:45:10.81ID:t9d2fK6k394デフォルトの名無しさん
2021/12/27(月) 01:51:55.20ID:4XXPAYbv395デフォルトの名無しさん
2021/12/27(月) 02:06:52.16ID:4gZrwhe1396デフォルトの名無しさん
2021/12/27(月) 02:53:50.89ID:t9d2fK6k397デフォルトの名無しさん
2021/12/27(月) 05:01:52.38ID:4XXPAYbv > column コマンドでは TAB は出力されないよね。
スペースをタブに変換すりゃいいだろ
スペースをタブに変換すりゃいいだろ
398デフォルトの名無しさん
2021/12/27(月) 05:02:55.30ID:4XXPAYbv シェルスクリプトというのは既存のコマンドを使って
いかに楽をするかっていうのが重要
POSIXにこだわるのはアホ
いかに楽をするかっていうのが重要
POSIXにこだわるのはアホ
400デフォルトの名無しさん
2021/12/27(月) 11:39:49.78ID:4gZrwhe1401デフォルトの名無しさん
2021/12/27(月) 12:51:40.94ID:t9d2fK6k ハイハイ、ご要望通りにいたしましたw
F="%-`wc -L test.lst|cut -f1 -d' '`s";awk '{printf"'$F'\t%s",$1,"IN A 127.0.0.1\n"}' test.lst|unexpand -a
F="%-`wc -L test.lst|cut -f1 -d' '`s";awk '{printf"'$F'\t%s",$1,"IN A 127.0.0.1\n"}' test.lst|unexpand -a
402デフォルトの名無しさん
2021/12/27(月) 22:40:58.39ID:6GChlJ/6 >>401
ありがとう
ありがとう
403デフォルトの名無しさん
2021/12/28(火) 01:16:53.28ID:JDHjDqJz 汚らしいパールのワンライナーに比べたら多少洗練されたようだな
404デフォルトの名無しさん
2021/12/28(火) 12:30:02.74ID:IE5w4ImF405デフォルトの名無しさん
2021/12/28(火) 14:14:41.00ID:l3lJRmOp columnは知ってたけど-Lオプションは知らなかった
406デフォルトの名無しさん
2021/12/28(火) 14:39:23.17ID:GaScW5/W columnに-Lオプションなんてあるの?
407デフォルトの名無しさん
2021/12/28(火) 19:18:04.81ID:53pt8mb/ UNIX哲学
408デフォルトの名無しさん
2021/12/28(火) 23:09:44.65ID:5lZUdhkB POSIX原理主義者「POSIXにはないコマンドをawkで再実装した」
UNIX哲学「車輪の再発明をするな」
POSIX原理主義者「・・・」
UNIX哲学「車輪の再発明をするな」
POSIX原理主義者「・・・」
409デフォルトの名無しさん
2021/12/28(火) 23:13:32.40ID:l3lJRmOp410デフォルトの名無しさん
2021/12/29(水) 00:32:57.69ID:fFVPrxR2 debianのcolumnに比べてredhat系のcolumnのオプションが随分と充実してる
411デフォルトの名無しさん
2021/12/29(水) 01:12:38.97ID:Uqmbe8qT 2カラム目以降に何が来ようとも決してTAB変換されなくするには2カラム目以降を完全に後付けにすれば良い
それとawkの-vで事前に最大文字数入れておいて後でprintfのフォーマットに*使った方が見た目奇麗になるね
awk -v m=`wc -L < test.lst` '{printf "%-*s\t\n", m, $1}' test.lst | unexpand -a | xargs -i echo "{}IN A 127.0.0.1"
それとawkの-vで事前に最大文字数入れておいて後でprintfのフォーマットに*使った方が見た目奇麗になるね
awk -v m=`wc -L < test.lst` '{printf "%-*s\t\n", m, $1}' test.lst | unexpand -a | xargs -i echo "{}IN A 127.0.0.1"
412デフォルトの名無しさん
2021/12/29(水) 02:59:14.48ID:I8/QQkF4 スーパーコンピュータシステムのファイル消失のお詫び
https://www.iimc.kyoto-u.ac.jp/ja/whatsnew/information/detail/211228056999.html
2021年12月14日 17時32分 から 2021年12月16日 12時43分にかけて,
スーパーコンピュータシステムのストレージをバックアップするプログラム(日本ヒューレット・パッカード合同会社製)の
不具合により,スーパーコンピュータシステムの大容量ストレージ(/LARGE0) の一部データを意図せず削除する事故が発生しました.
Lustre ファイルシステムのファイル消失について
https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf
1 ファイル消失の影響範囲
対象ファイルシステム: /LARGE0
ファイル削除期間: 2021 年 12 月 14 日 17 時 32 分〜2021 年 12 月 16 日 12 時 43 分
消失対象ファイル: 2021 年 12 月 3 日 17 時 32 分以降、更新がなかったファイル
消失ファイル容量: 約 77TB
消失ファイル数: 34,011,293 ファイル
影響を受けたグループ: 14 グループ(4 グループが復元不能)
3 ファイル消失が発生した原因
バックアップスクリプトには、find コマンドにより 10 日以上古いログファイルを削除する処
理が含まれています。スクリプトの機能改善と合わせて、find コマンドの削除処理に渡す変数名
を視認性・可読性を高めるため変更いたしましたが、この修正したスクリプトのリリース手順に
考慮不足がありました。
bash は、シェルスクリプトの実行中に適時シェルスクリプトを読み込みます。この挙動によ
る副作用を認識できておらず、実行中のスクリプトが存在している状態でスクリプトの上書きに
よりリリースしてしまったことで、途中から修正したシェルスクリプトの再読み込みが発生し、
結果的に未定義の変数を含む find コマンドが実行されてしまいました。この結果、本来のログ
ディレクトリに保存されたファイルの削除をする処理ではなく、/LARGE0 のファイルを削除し
てしまいました。
https://www.iimc.kyoto-u.ac.jp/ja/whatsnew/information/detail/211228056999.html
2021年12月14日 17時32分 から 2021年12月16日 12時43分にかけて,
スーパーコンピュータシステムのストレージをバックアップするプログラム(日本ヒューレット・パッカード合同会社製)の
不具合により,スーパーコンピュータシステムの大容量ストレージ(/LARGE0) の一部データを意図せず削除する事故が発生しました.
Lustre ファイルシステムのファイル消失について
https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf
1 ファイル消失の影響範囲
対象ファイルシステム: /LARGE0
ファイル削除期間: 2021 年 12 月 14 日 17 時 32 分〜2021 年 12 月 16 日 12 時 43 分
消失対象ファイル: 2021 年 12 月 3 日 17 時 32 分以降、更新がなかったファイル
消失ファイル容量: 約 77TB
消失ファイル数: 34,011,293 ファイル
影響を受けたグループ: 14 グループ(4 グループが復元不能)
3 ファイル消失が発生した原因
バックアップスクリプトには、find コマンドにより 10 日以上古いログファイルを削除する処
理が含まれています。スクリプトの機能改善と合わせて、find コマンドの削除処理に渡す変数名
を視認性・可読性を高めるため変更いたしましたが、この修正したスクリプトのリリース手順に
考慮不足がありました。
bash は、シェルスクリプトの実行中に適時シェルスクリプトを読み込みます。この挙動によ
る副作用を認識できておらず、実行中のスクリプトが存在している状態でスクリプトの上書きに
よりリリースしてしまったことで、途中から修正したシェルスクリプトの再読み込みが発生し、
結果的に未定義の変数を含む find コマンドが実行されてしまいました。この結果、本来のログ
ディレクトリに保存されたファイルの削除をする処理ではなく、/LARGE0 のファイルを削除し
てしまいました。
413デフォルトの名無しさん
2021/12/29(水) 03:16:45.01ID:gf7++b5l あぁ、やはり Lustre はダメだなぁ…
414デフォルトの名無しさん
2021/12/29(水) 03:21:51.59ID:9nMYZ2sv 機器の不具合かのように書いてるけど馬鹿による人災じゃねーか
415デフォルトの名無しさん
2021/12/29(水) 04:05:13.87ID:DIjHY86S シェルスクリプト以外ではほとんど見られない性質ではあるからなあ。
たしかに人災とも言えるけど。
たしかに人災とも言えるけど。
416デフォルトの名無しさん
2021/12/29(水) 04:51:32.06ID:Uqmbe8qT シンボリックリンクで新しいバージョンのプログラムにリンク先切り替える方式にしておけば被害は防げたかも知れないな
417デフォルトの名無しさん
2021/12/29(水) 09:47:12.44ID:aqWkCMvZ xargsは強力だよねー
全然使いこなせねーわ
全然使いこなせねーわ
418デフォルトの名無しさん
2021/12/29(水) 10:35:20.64ID:HbjA8KL2 Linux の場合プログラムは起動時に全てメモリに読み込まれるから
稼働中にプログラムを差し替えても OK って考えて実際に差し替えたら
メモリ上の古いプログラムがファイルシステム上の新しいモジュール
ファイル読もうとして動作不良になったことがあったなあ
稼働中にプログラムを差し替えても OK って考えて実際に差し替えたら
メモリ上の古いプログラムがファイルシステム上の新しいモジュール
ファイル読もうとして動作不良になったことがあったなあ
419デフォルトの名無しさん
2021/12/29(水) 10:53:37.16ID:yFPIHMKS この挙動ってinodeが同じまま書き換えたから起こったんだよね?
inode変わるファイル更新なら起こらないよね?
inode変わるファイル更新なら起こらないよね?
420デフォルトの名無しさん
2021/12/29(水) 11:28:25.09ID:DIjHY86S421デフォルトの名無しさん
2021/12/29(水) 11:33:56.17ID:EOkSZQC4 リリース手順の考慮不足以前にfindを使った削除の運用自体に問題がある
ちゃんと金払ってまともなもの作ってもらわないと
未定義の変数を含むfindコマンドが実行すると
rootディレクトリのファイルが全削除される?
ちゃんと金払ってまともなもの作ってもらわないと
未定義の変数を含むfindコマンドが実行すると
rootディレクトリのファイルが全削除される?
422デフォルトの名無しさん
2021/12/29(水) 13:13:58.03ID:KOMId+4/ findとか関係ねーよ
例えばrmで終わるコマンドがあったとして
xxxxrm / が rm / と解釈されることだってある
例えばrmで終わるコマンドがあったとして
xxxxrm / が rm / と解釈されることだってある
423デフォルトの名無しさん
2021/12/29(水) 13:53:35.50ID:kCXooe0G /LARGE0${undefined}ってこと?
424デフォルトの名無しさん
2021/12/29(水) 15:06:25.94ID:W7/CHwWQ425デフォルトの名無しさん
2021/12/29(水) 15:11:30.51ID:1N8ukzHQ https://zenn.dev/mattn/articles/5af86b61004bdc
やっぱりinodeが変わってればokだったみたい。
mvとか、installとか使って反映しておけば回避できてた模様
やっぱりinodeが変わってればokだったみたい。
mvとか、installとか使って反映しておけば回避できてた模様
426デフォルトの名無しさん
2021/12/29(水) 15:31:39.64ID:V1sEjw5U 門外漢なんで純粋に知りたいんだけどこのbashの実行中の書き換えも書き換えたとこから逐次実行する仕様って歴史的経緯によるもの?もしくは
有効に活用できるケースがたくさんあるから意図して実装している?
有効に活用できるケースがたくさんあるから意図して実装している?
427デフォルトの名無しさん
2021/12/29(水) 16:23:06.17ID:bBNK3YsU Lustre の checkpoint 機能は使ってなかったのかな?
428デフォルトの名無しさん
2021/12/29(水) 17:29:01.73ID:wwN1RbRp Linuxはホットパッチが売りなので。
429デフォルトの名無しさん
2021/12/29(水) 17:40:55.16ID:I8/QQkF4430デフォルトの名無しさん
2021/12/29(水) 17:43:56.77ID:Y+wm1ikU >>422
今回のにそれ関係ある?
今回のにそれ関係ある?
431デフォルトの名無しさん
2021/12/29(水) 18:01:13.94ID:tast0kyj 規模は違えど今回の事例と同様の体験をした人・組織は少なくなさそう
■ このスレッドは過去ログ倉庫に格納されています
