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

1名無しさん@お腹いっぱい。2018/08/02(木) 05:22:16.82
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
 最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
 (左上の「Shell & Utilities」 から参照することができます。)
・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。
  http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/

28名無しさん@お腹いっぱい。2018/08/27(月) 15:17:33.08
サーバーのサービスではなく、
ユーザは自分1人だよね。cronも動いているけど。
それなら、ミリ秒単位で処理開始がぶつかることなんて想定しなくてもよいのでは。
人命がかかっているような処理なら別だけど。

29名無しさん@お腹いっぱい。2018/08/28(火) 06:51:31.61
>>28
確かにそうですが方法が確立し実装してしまえば
動画を視聴してチェックと言う作業からほぼ解放されるので
もうちょっとやってみます

>>27
実装を試して相談したいことがあった場合検討してみます

30名無しさん@お腹いっぱい。2018/08/28(火) 15:13:22.37
ずっと楽をするために今努力して作りこむってのは間違っていない

まあ出来ないと思うときは妥協は必要だが

31名無しさん@お腹いっぱい。2018/08/28(火) 15:25:38.94
>>26
ファイルに対応する「ロックファイル」を作って、その存在確認をするのが定石だったみたい
既にロックファイルが存在していたら、別のプロセスがファイルを使っていると見做す
その際ロックファイルの存在確認と作成を「同時」(アトミック)に行うのが大事だそうで

そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編)
https://heartbeats.jp/hbblog/2013/10/atomic03.html

こんな感じかな

lockfile="${outputfile}".lock
if ln -s -- $$ "${lockfile}" 2>/dev/null; then
(
unlock() { rm -- "${lockfile}"; }
trap "unlock" EXIT HUP INT QUIT SEGV TERM

wget -c -O "${outputfile}" "${url}"
) &
fi

32名無しさん@お腹いっぱい。2018/08/29(水) 09:19:34.39
$ yotei.py 201808290900
って感じでスクリプトの引数に今日の年月日0900(date +%Y%m%d0900)を入れて実行したいです。
cronで実行したいのですが、date +%Y%m%d0900の出力をyotei.pyの引数に入れるには、1行でどうやって書いたらいいですか?

33名無しさん@お腹いっぱい。2018/08/29(水) 09:26:24.72
$ yotei.py namae 201808290900
だったので、2番目の引数にdate +%Y%m%d0900の出力を入れたいです。

34名無しさん@お腹いっぱい。2018/08/29(水) 09:54:06.25
すぐ思いついたのはシェルスクリプトを1個増やして以下のようにする

export ymd0900=`date +%Y%m%d0900`
yotei.py namae $ymd0900

それをcronから呼ぶ

35名無しさん@お腹いっぱい。2018/08/29(水) 10:03:21.87
>>33
https://ja.wikipedia.org/wiki/Crontab
よくあるミス でそのもののようなのあるけど

36名無しさん@お腹いっぱい。2018/08/29(水) 10:16:33.10
>>34
>>35
どうもありがとうございます!
ファイルを増やしたくなかったので1行でやりたかったんですが、ウィキペディアのその項目のとおり、エスケープ\を入れる事で1行で出来ました!

yotei.py 名前 $(date +\%Y\%m\%d0900)

37名無しさん@お腹いっぱい。2018/08/30(木) 20:22:06.89
サマータイム導入に気をつけろよ
ローカルタイム使ってると同じ日時が
2回でてくることになるぜ

38名無しさん@お腹いっぱい。2018/08/31(金) 06:31:36.33
EUじゃサマータイムは廃止だっていうのにマジで日本はこれから導入するのか?
趣味でプログラム作ってるだけなのに余計な処理増えるのはホント困る…。

39名無しさん@お腹いっぱい。2018/09/09(日) 01:40:34.50
>>22
youtube-dlならニコニコにも対応してるしタイトルとIDそのままで保存できるよ
但しここ数年の動画はDL速度が極端に遅い上に途中で必ず落ちる
[download] 5.6% of 202.83MiB at 98.22KiB/s ETA 33:15[download] Got server HTTP error: Downloaded 12014750 bytes, expected 212678720 bytes. Retrying (attempt 1 of 10)...
ERROR: unable to download video data: HTTP Error 403: Forbidden
永続リトライ設定でもこうなるししmpvでも再生中断するからな
昔のflvなんかは高速だけど年代で仕様が違う辺りエロサイトより酷い

40名無しさん@お腹いっぱい。2018/09/09(日) 08:27:37.92
東京オリンピックまでにサマータイム導入
てのはどう考えても物理的に不可能だから
話は立ち消えになるだろうけど、将来、
導入されないとも限らない
ローカルタイムを出力するときは必ず
timezoneを付けておいたほうがいい

41名無しさん@お腹いっぱい。2018/09/09(日) 12:38:12.16
>>40
YAGNI。必要になってから対応するよw

42名無しさん@お腹いっぱい。2018/09/09(日) 19:40:32.45
あっちのスレめっちゃ荒れてるじゃん

43名無しさん@お腹いっぱい。2018/09/10(月) 08:35:40.82
>>40
どうやって対応したらよい?

44名無しさん@お腹いっぱい。2018/09/10(月) 09:38:34.63
>>42
このスレ立てた奴が荒らしに行ってるからな。
あっちの板に嫌がらせで重複スレまで立てるという性格の悪さ。

そういう悪人の立てたこのスレ使ってると、悪人の一味みたいな立ち位置に属することになるぜ。

45名無しさん@お腹いっぱい。2018/09/10(月) 10:02:10.94
>>43
要件による。どうしたらいいかは客にでも聞いてこい

46名無しさん@お腹いっぱい。2018/09/10(月) 16:10:33.13
ゴリホーモの嫌がらせ陰湿やなあ

47名無しさん@お腹いっぱい。2018/09/10(月) 16:45:10.08
なんのためにプログラム板に移動したんんだっけ?
人を増やすため?

48名無しさん@お腹いっぱい。2018/09/10(月) 21:52:59.04
>>47
前スレで荒らしが出たからIDやワッチョイをつけたかったんだけど、
UNIX板ではつけられなかったから。

で、荒らしはIDつくのが嫌で新スレが立った後からこのスレを立て(>>10-15)、
さらには新スレを荒らしに行ってるってのが現状。

49名無しさん@お腹いっぱい。2018/09/11(火) 12:13:26.79
でもIDつくのが嫌だったんでしょう?
IDつくのが嫌じゃなくなったってこと?

50名無しさん@お腹いっぱい。2018/09/11(火) 13:49:11.52
>>49
IDつくと自分が荒らしてることが分かるから嫌だったけど、
向こうのスレについてはスレ自体を敵視しているから、
自分が荒らしてることがバレバレであっても、スレを使いづらくしたい
ってことじゃないかな。

51名無しさん@お腹いっぱい。2018/09/11(火) 15:12:37.72
でもこのスレも使いづらくしてたんでしょう?

52名無しさん@お腹いっぱい。2018/09/11(火) 17:42:07.09
>>51
ム板の本スレは意図的に荒らしてて(だからバレてもOK)、
前スレは天然で荒らしてる面がある(だからバレたくない)
って程度の違いはありそうだね。

53名無しさん@お腹いっぱい。2018/09/12(水) 04:28:30.52
>>52
いやいや、単に荒らしは最初から隠すつもりもなく、
バレようがバレまいが関係ないんだよ。

荒らしにとってはは最初から隠してるわけでもないが、
でもこのスレの住民がその荒らしのIDを見たくて移動したんでしょ?
それでんで、見て何がしたかったのか不明だけどなw

IDが出ていれば荒らされないとでも思った?

54名無しさん@お腹いっぱい。2018/09/12(水) 08:39:27.35
>>53
荒らしさん、こんにちはー

55名無しさん@お腹いっぱい。2018/09/12(水) 13:03:52.35
>>54
はい、こんにちは。
やっと気づいた?w

56名無しさん@お腹いっぱい。2018/09/12(水) 13:57:49.01
IDを何に使うかなんて自明でしょ。
まさか分からないってことはないよな?

57名無しさん@お腹いっぱい。2018/09/13(木) 04:39:22.11
荒らしをNGIDにして見えなくするため、という説がある

確かにNGIDにすると見えなくなるが、
荒らしの書き込みを止めることはできない

荒らしはどんどん自分の意見を書き込むが
それに対しての反論はできない。
なぜなら荒らしの書き込みが見えないから

荒らしとNGIDに入れてない人とのやり取りでスレは埋まっていく
はたから見れば、話についてこれず時々レスするが
荒らしに論破され何も言い返せない構図のできあがり
それ全体の荒らしの濃度が高まる

そしてIDは変わるから毎日の登録作業が増える。
忘れるとついレスをしてしまう

58名無しさん@お腹いっぱい。2018/09/13(木) 09:15:51.30
というわけで、以下のどっちかの運用にするのがよくあるパターンだな。
・このIDは昔から粘着してる奴だから無視するぜってコメントを時々入れつつ無視する
・奇特な人物がいちいち反論するので、スレにいる他のメンバーは、連鎖アボーン設定して安心してその議論全体を無視する

IDがないとこういう回避ができないから、ひたすら我慢することになる。

59名無しさん@お腹いっぱい。2018/09/13(木) 15:25:23.10
連鎖あぼーんって荒らしが誰だれかれ構わずレスしたら
みんな消えちゃうの?

60名無しさん@お腹いっぱい。2018/09/13(木) 15:40:35.15
それを荒らしにわざわざ教えてやる理由はないな。

61名無しさん@お腹いっぱい。2018/09/13(木) 15:45:05.41
お前が荒らしだろ

62名無しさん@お腹いっぱい。2018/09/13(木) 15:45:42.12
バレたかw

63名無しさん@お腹いっぱい。2018/09/13(木) 15:46:13.40
まあ回線切ってIPアドレスを変えればいいだけだしな

64名無しさん@お腹いっぱい。2018/09/13(木) 20:00:10.94
>>59
やってみればいいんじゃね?

65名無しさん@お腹いっぱい。2018/09/13(木) 21:16:50.93
つまりIDやIPアドレスを変えてNG避けする意志のある荒らしってことだから、
IPアドレスも表示させるようにして、
IPアドレスの範囲を使ってNG登録するのもやむなしってことだな。

今でも2つのプロバイダーを使い分けて自演してるって
自分でバラしてたから、NG登録する範囲も2通りは必要だと。

66名無しさん@お腹いっぱい。2018/09/15(土) 09:20:57.31
特定文字列の除外リストを元に除外処理をしたいんだけど
リストとかあきらめてgrepをフィルタファイルとして別するのが一番楽?
やりたいのは以下のようなことなんだけど
シェルスクリプトなのにプログラミング的なことやって
grepのフィルタを組み立てることに違和感を感じてる(面倒とはっきり言えって?)

echo ${DATA_REC} | grep -e AAA -e BBB -e CCC

if [ $? -eq 0 ]
then
continue
fi

# 継続処理

67名無しさん@お腹いっぱい。2018/09/15(土) 09:24:06.05
> grepをフィルタファイルとして別するのが一番楽?

ってのはファイルにgrepのコマンドを書いてreadで読んで
echo ${DATA_REC} ${grep_cmd}
とかにするってことね
grepコマンドが書かれてたら適用
書かれてなかったらスルーって感じ

68名無しさん@お腹いっぱい。2018/09/15(土) 09:26:44.49
ああパイプがうまくいかないから若干判定が必要か・・・

pi@melchior /tmp $ export grep_cmd=" | grep -e AA -e BB"
pi@melchior /tmp $ echo AAA $grep_cmd
AAA | grep -e AA -e BB
pi@melchior /tmp $ echo AAA | $grep_cmd
-bash: |: command not found
pi@melchior /tmp $ export grep_cmd=" grep -e AA -e BB"
pi@melchior /tmp $ echo AAA | $grep_cmd
AAA
pi@melchior /tmp $

69名無しさん@お腹いっぱい。2018/09/15(土) 10:04:14.90
もうベタで書いてしまった・・・
でも順調!すげーよく動いてる!

この件は今後の課題にしよう

70名無しさん@お腹いっぱい。2018/09/15(土) 11:49:54.77
除外する文字列をファイルに入れて
grep -f か grep -v -f でいいような気がする

71名無しさん@お腹いっぱい。2018/09/15(土) 12:13:24.53
>>66
> シェルスクリプトなのにプログラミング的なことやって

シェル芸じゃなくてスクリプトなんだから
プログラミングで当たり前だよw

72712018/09/15(土) 12:37:34.28
>>67
少し考えてみたが、俺もgrepの-fオプションを利用するのが一番楽だと思うな
ただ昔、除外リストの否定とかやりたかったんで書いたことはあるが

73712018/09/15(土) 12:43:55.58
grep -f 使えばいいから不要だが
お手軽に>>66のようなことをするのならこうかな
リストにスペースなどが入っていたらうまくいかんがw
文字列の組み立ての参考として

echo ${DATA_REC} | grep $(printf ' -e %s' $(cat list))

74名無しさん@お腹いっぱい。2018/09/22(土) 07:11:59.06
シェルスクリプトじゃなくてシェルの基礎を訊いてアレだけど
bashの$()と``って使い分けた方がいいの?
端末ではバッククォート多用してるけども

75名無しさん@お腹いっぱい。2018/09/22(土) 09:23:42.74
``は古い書き方。ネストができないという欠点が有る
bashに限らず、$()を使ったほうが良い。欠点は文字が一文字多くなるだけ

76名無しさん@お腹いっぱい。2018/09/22(土) 10:20:58.39
きっちりエスケープすればネストはできるよ。もちろん推奨はせんが

77名無しさん@お腹いっぱい。2018/10/07(日) 11:42:06.75

78名無しさん@お腹いっぱい。2018/10/13(土) 19:33:57.01

新着レスの表示
レスを投稿する