2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名無しさん@お腹いっぱい。:2018/08/02(木) 05:22:16.82 .net
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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/

2 :名無しさん@お腹いっぱい。:2018/08/02(木) 07:30:57.65 .net
その28は以下に移動しました。

シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/

3 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:22:54.47 .net
FAQ

Q. 秘密結社シェルショッカーってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。

Q. USP友の会ってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。

Q. シェル芸ってなんですか?
A. しらん。ヲタ芸みたいなもんやろ。恥ずべきものや。

Q. ユニケージ開発手法ってなんですか?
A. しらん。所でアプリの開発には普通のプログラム言語使ったほうが良いぞ

4 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:24:01.24 .net
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

★A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。

★B. お約束の補足
1. macOS では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls (ハイフン)l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. 可搬性については、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
 を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
 小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
 SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
 SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
 ( 下記 F.3 参照 )

5 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:24:52.02 .net
★C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
 適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
 http://www.speech-lab.org/~hiroki/csh-whynot.euc
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

★D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
 paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
 find は -exec command {} + を推奨。
 他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl

6 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:25:30.27 .net
★E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/
 (↑サイト消滅かも)
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf
2. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
(3. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/ (リンク切れ))

★F. 参考リンク
1. 可搬性関連
 a. autoconf マニュアル 移植性のあるシェルプログラム
  http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell
  http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html
 b. Portability talk [Bash Hackers Wiki] 英文
  Obsolete and deprecated syntax も見る価値有り
  http://wiki.bash-hackers.org/scripting/nonportable
 c. How to make bash scripts work in dash 英文
  http://mywiki.wooledge.org/Bashism
 d. DashAsBinSh 英文
  https://wiki.ubuntu.com/DashAsBinSh
 e. Portable Shell Programming 英文
  http://www.in-ulm.de/~mascheck/various/portability/

7 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:26:16.74 .net
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/
3. Traditional Bourne Shell 関連
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. BourneShell / Where does the Bourne shell live? 英文
  http://mywiki.wooledge.org/BourneShell
 c. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/
4. マニュアル
 a. The Base Specifications Issue 7, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
 b. FreeBSD 日本語マニュアル検索
  http://www.jp.freebsd.org/man-jp/search.html
 c. JM Project (Japanese)
  http://linuxjm.sourceforge.jp/
5. FAQ 等
 a. UNIXの部屋 ( 2011年 )
  http://x68000.q-e-d.net/~68user/unix/
 b. Linux JF (Japanese FAQ) Project
  http://linuxjf.osdn.jp/
 c. Advanced Bash-Scripting Guide 英文
  http://www.tldp.org/LDP/abs/html/
 d. Unix Programming FAQ 日本語訳 ( 2000年 )
  http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/

8 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:26:56.94 .net
6. ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

★G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 http://hibari.2ch.net/test/read.cgi/unix/989659936/
2. 便利なシェルスクリプト見せろ
 http://pc.2ch.net/test/read.cgi/unix/996949546/
3. シェルスクリプト総合 その1
 http://pc5.2ch.net/test/read.cgi/unix/1101820646/
後略。検索して下さい

9 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:40:37.63 .net
★H. 関連スレ(UNIX板/プログラム板)
1. sed
 http://mevius.5ch.net/test/read.cgi/unix/1085730992/
2. 正規表現
 http://mevius.5ch.net/test/read.cgi/unix/1039165754/
3. Regular Expression(正規表現) Part14
 http://mevius.5ch.net/test/read.cgi/tech/1489511075/
4. 【モダン推奨】Perlについての質問箱 50箱目
 http://mevius.5ch.net/test/read.cgi/tech/1327110999/
5. ECMAScript デス 6
 http://mevius.5ch.net/test/read.cgi/tech/1483332914/
6. Ruby 初心者スレッド Part 63
 http://mevius.5ch.net/test/read.cgi/tech/1523954817/
7. Pythonのお勉強 Part57
 http://mevius.5ch.net/test/read.cgi/tech/1529888279/
8. 【node.js】サーバサイドjavascript 5【Nashorn】
 http://mevius.5ch.net/test/read.cgi/tech/1518528093/

★I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。

10 :名無しさん@お腹いっぱい。:2018/08/02(木) 08:59:28.57 .net
このスレは手違いで作成されたものです。

前スレ
http://mevius.5ch.net/test/read.cgi/unix/1525337663/941-
の流れを読むとわかる通り、
ワッチョイをつけられる板に移動しようという話になり、
特に反対も出ず
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
への移動が決まりました。

このスレは利用せず、
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
への移動をお願いします。

11 :名無しさん@お腹いっぱい。:2018/08/02(木) 09:07:59.90 .net
移りたい奴はさっさと移れよ
もうここ来んな

12 :名無しさん@お腹いっぱい。:2018/08/02(木) 09:21:20.82 .net
移りたくない理由って、前スレで自演荒らししてたからってのしか思いつかない。
このスレを使いたい人間ってのが荒らしだとしたら、このスレを捨てるのが適切では?

13 :名無しさん@お腹いっぱい。:2018/08/02(木) 10:08:56.08 .net
お前が今やってることが荒らしだろ
さっさと移れよ

14 :名無しさん@お腹いっぱい。:2018/08/02(木) 10:25:08.21 .net
>>13
移りたくないのであれば、前スレで反論する機会があったのに、
一言も反論せずにいきなりこのスレを建てたんだから、
どう考えてもあなたがスレ荒らしでしょう。

15 :名無しさん@お腹いっぱい。:2018/08/02(木) 10:26:56.73 .net
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
に移動してください

16 :名無しさん@お腹いっぱい。:2018/08/02(木) 11:50:13.77 .net
移りたかった奴らがいつまでも見てんなよ
ここを荒らすな

17 :名無しさん@お腹いっぱい。:2018/08/02(木) 11:51:21.90 .net
ここのことは忘れて移った先で楽しく過ごしてください
もう構わないでね

18 :名無しさん@お腹いっぱい。:2018/08/02(木) 12:36:09.60 .net
>>17
荒らしスレであることを知らずに迷いこむといけませんから、
知らずに書き込んだ可能性がある場合には、重複スレである旨の
注意書きを今後も投稿するつもりです。

荒らしスレであることを承知の上で書き込んでいるケースについては、
私は今後このスレに書きこみません。
他の人がどうするかは私には分かりませんが。

19 :名無しさん@お腹いっぱい。:2018/08/02(木) 13:00:44.80 .net
向こうのスレで、こっちにしつこく誘導しようとしてるなら非難されて仕方ないけど、そんなことしてる奴いないんだろ?
見てないから知らんが

もうここは構ってくれなくていいって
余計なお世話だわ
どんだけ暇人だよ

20 :名無しさん@お腹いっぱい。:2018/08/05(日) 08:04:43.32 .net
fishをログインシェルとして使ってます

zshの場合bindkey "\e[A" history-beginning-search-backward-end
で数文字入力して上矢印キーを押すと直近の履歴から保管されますが
fishでこれをしたい場合どうすればいいのでしょうか?

fishだとデフォルトで右矢印キーがこの動作になるようですが
これを上矢印キーにしたいところです。

21 :名無しさん@お腹いっぱい。:2018/08/05(日) 08:21:50.23 .net
~ > bind|grep search-back
bind \e\eOA history-token-search-backward
bind \e\e\[A history-token-search-backward
bind \eO3A history-token-search-backward
bind \e\[3A history-token-search-backward
bind \e\[1\;3A history-token-search-backward
bind \e\[1\;9A history-token-search-backward
bind \e. history-token-search-backward
bind \eo history-token-search-backward

22 :名無しさん@お腹いっぱい。:2018/08/27(月) 12:16:09.32 .net
wgetを使ってシェルスクリプトでダウンロードツールを作ったんだけど
ナロー回線だから出来るだけ無駄を省きたくて
-cオプションで既存ダウンロード分に追記する形にしてる
でも当然ならがコマンドが2重に発行されたらぐちゃぐちゃになるから
psコマンドでwgetを2重発行しないようにしてるけどちょっと不安
実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
ファイルが壊れたことがあった
ぶっちゃけダウンロードしてるのはニコニコの動画であり
(動画なんで視聴しないと壊れてるのかわからず厄介)
ID_タイトル.mp4とかの形式で保存してるんだけど
問題はマルチバイト文字のタイトルだから
「grep "${id}.*${extention}"」として回避
実際はもうちょっとコマンドの詳細まで見てるけど

こんな場合のベストってダウンロード先のファイル名に
プロセスID(wgetを実行するシェルスクリプトのプロセスID)を含めるようにして
状況に応じてファイル名を変えながらwgetするくらいしかないのかな?
既存ダウンロード分のmvに成功したらwgetするとかで
ファイルをロックする相当の処理を実現するイメージなんだけど

ちなみにナローじゃない回線を使うことがあったり
ダウンロード中に止まることがあるため
複数の動画を同時並行でダウンロードするつくりにしているため
この問題はぜひとも回避したいです

23 :名無しさん@お腹いっぱい。:2018/08/27(月) 12:48:42.73 .net
>>22
>複数の動画を同時並行でダウンロードするつくり
なんでlockファイルで二重起動を防止しないのだろうと思ったら、
同時並列でwgetを実行したいけど、
1つの動画については多重実行されないようにしたい、ということか。

ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
そのファイルをダウンロードしないという仕組みにすればどうだろう。

でもそもそも
> 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。

24 :名無しさん@お腹いっぱい。:2018/08/27(月) 14:07:03.57 .net
>>22
ファイルがオープンされているかを調べれば良いと思う

どうやるのかな
lsof が使えるなら

lsof -a -c '/^wget$/' "${filename}"

25 :名無しさん@お腹いっぱい。:2018/08/27(月) 14:33:46.01 .net
> ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
> wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
> 終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
> そのファイルをダウンロードしないという仕組みにすればどうだろう。

参照ファイルを参照してIDが無いことを確認してID書き込むまでの間に
同じ処理が走ったらチェック抜けてしまうなというのが懸案としてあります

なのでダウンロードしているファイルそのものをロックファイルにして
しかもmvコマンドの成否によって判断したらよいのではと午前中に思いました

> でもそもそも
> > 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
> これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。

今はIDと拡張子でgrep掛けてるので問題ないのです
(直近だと「禁書目録」がpsコマンドで「禁??録」になりプロセスチェックをスルーしていました)
でも先の参照ファイルと同じで
同じ動画に対してほぼ同時にダウンロード処理が走った場合
psコマンドを実行してから実際にwgetコマンドを実行するまでの間に
チェックを抜けてしまうことが考えられるのでどうにかしたいなと思ってます

ちょっと後出しになって申し訳ないですが
ダウンロードの処理はさまざまな状況で実行されることがあり
これからダウンロードするぞってターミナルからコマンドを打つこともありますが
cron登録していて自動でダウンロードが走るようにもしているため
そういう適当な運用でも回避できればと考えています

26 :名無しさん@お腹いっぱい。:2018/08/27(月) 14:36:33.24 .net
>>24
ありがとうございます
試してみたいと思いますが
lsof でチェックしてオープンされていないと判断して継続のwgetがオープンする間に
並行して実行された処理でwgetがオープンしてしまう可能性があるので・・・

シェルでやるには難しい処理でしょうか?

27 :名無しさん@お腹いっぱい。:2018/08/27(月) 14:38:01.66 .net
>>22
>>1-15 あたりをご覧になると分かりとおり、
このスレは荒らしが立てて維持しています。
特段の理由がなければ本スレ
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
の利用をお勧めします。

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

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

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

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

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

31 :名無しさん@お腹いっぱい。:2018/08/28(火) 15:25:38.94 .net
>>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 .net
$ yotei.py 201808290900
って感じでスクリプトの引数に今日の年月日0900(date +%Y%m%d0900)を入れて実行したいです。
cronで実行したいのですが、date +%Y%m%d0900の出力をyotei.pyの引数に入れるには、1行でどうやって書いたらいいですか?

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

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

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

それをcronから呼ぶ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

66 :名無しさん@お腹いっぱい。:2018/09/15(土) 09:20:57.31 .net
特定文字列の除外リストを元に除外処理をしたいんだけど
リストとかあきらめて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 .net
> grepをフィルタファイルとして別するのが一番楽?

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

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

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 .net
もうベタで書いてしまった・・・
でも順調!すげーよく動いてる!

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

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

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

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

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

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

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

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

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

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

77 :名無しさん@お腹いっぱい。:2018/10/07(日) 11:42:06.75 .net
>>74
http://mywiki.wooledge.org/BashFAQ/082

78 :名無しさん@お腹いっぱい。:2018/10/13(土) 19:33:57.01 .net
https://imgur.com/FAF05na.jpg

79 :名無しさん@お腹いっぱい。:2018/11/09(金) 16:05:12.56 .net
test $(date +%w) -eq 5

今日が金曜日なら5が出るんですが、-eq というのはコマンドなのかtestコマンドのオプションなのか、これは何ですか?

80 :名無しさん@お腹いっぱい。:2018/11/09(金) 16:08:05.57 .net
自己レス
-eq はtestコマンドのオプションで、==の事みたいですね

81 :名無しさん@お腹いっぱい。:2018/11/09(金) 16:09:52.77 .net
test コマンドのオプションです。

ところで今日は金曜日ですが5は出ませんよね。
戻り値は0となりますが……何か勘違いしている気がします。

82 :名無しさん@お腹いっぱい。:2018/11/09(金) 16:18:31.36 .net
すみません

test $(date +%w) -eq 5 && echo "今日は金曜日!"

これだと、金曜日だとechoが実行されました

83 :名無しさん@お腹いっぱい。:2018/11/09(金) 16:20:38.51 .net
>>82
自己レス
金曜日かどうか調べて金曜日なら戻り値は0、
で、戻り値が0の場合echoが実行されるって事ですね

84 :名無しさん@お腹いっぱい。:2018/11/09(金) 16:32:51.67 .net
毎月第2月曜日と毎月第2週の月曜日とでは、指す日にちってもしかして異なります?

0 17 8-14 * test $(date +%w) -eq 5 && command
こんな風にcronで毎月第2金曜日とか指定したいんですが、

例えば今月の5日で言うと、5日は1回目の月曜日だけど、月の2週目にあるので疑問に思いました。

0 17 8-14 * test $(date +%w) -eq 1 && command
これだと今週の月曜日には実行するされないですよね?

85 :名無しさん@お腹いっぱい。:2018/11/10(土) 02:31:24.55 .net
読みづらい。testなんて使うな

[ $(date +%w) -eq 5 ] && echo "今日は金曜日!"

86 :名無しさん@お腹いっぱい。:2018/11/10(土) 10:01:16.06 .net
>>85
[ ]ってなんですか?
ググろうにも記号なのでググれないです

87 :名無しさん@お腹いっぱい。:2018/11/10(土) 10:12:06.10 .net
man [

88 :名無しさん@お腹いっぱい。:2018/11/10(土) 18:00:25.18 .net
bash(バージョン 4.4.12(1)-release)でスクリプト書いててちょっと謎が

$ a=1; b=2; [[ ${a}<=${b} ]]; echo $?
こうするとちゃんと終了コードの0が返ってきますが

$ a=1; b=2; [[ ${a} <= ${b} ]]; echo $?
比較演算子の前後にスペースを入れると「条件式に構文エラーがあります」「`${b}' 周辺に構文エラーがあります」と怒られます

$ a=1; b=2; [[ ${a} < ${b} ]]; echo $?
比較演算子をleでなくltにするとまた0が返ります

これって何故なんでしょう?

89 :名無しさん@お腹いっぱい。:2018/11/10(土) 19:37:33.60 .net
>>88
[[ ... ]] で使える演算子に <= は存在しない

それは数の比較ではなく
[[ "1" < "=2" ]]
という文字列の比較になっている

なので <= の右に空白を置くと
[[ "1" < "=" "2" ]]
となりエラー

条件式
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBW

90 :88:2018/11/10(土) 21:37:24.33 .net
>>89
さっそくありがとうございます
そうか、イコールをつけない不等号で上手く動いてるように見えるのは、文字列として辞書順で比較してるからなんですね
どうやら私の頭の中では、二重丸括弧での算術式展開とゴッチャになってたみたいです
何時間も唸ってたのが一撃でスッキリしました。ありがとうございました

91 :名無しさん@お腹いっぱい。:2018/11/10(土) 21:45:21.63 .net
記号のコマンドってドットと[以外にもあるんか?

92 :名無しさん@お腹いっぱい。:2018/11/10(土) 22:29:10.53 .net
>>91
:

93 :名無しさん@お腹いっぱい。:2018/11/11(日) 00:38:12.80 .net
>>87
もしかしてtestと[]はだいたい同じですか?
testを使わない方がいいのはなぜなんでしょうか?

94 :名無しさん@お腹いっぱい。:2018/11/11(日) 19:15:20.55 .net
http://r2.upup.be/wV2qsULdHm

95 :名無しさん@お腹いっぱい。:2018/11/11(日) 23:47:57.65 .net
>>87
それで出てくるのは /usr/bin[ の方のmanじゃないだろうか

96 :名無しさん@お腹いっぱい。:2018/11/15(木) 14:21:20.04 .net
bash の場合。

$ type [
[ is a shell builtin

$ help [
[: [ arg... ]
Evaluate conditional expression.

This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.

97 :名無しさん@お腹いっぱい。:2018/11/21(水) 22:42:24.51 .net
sedで\1を変数名としていっぺんに異なる部分を異なる変数の内容で変換できませんか?

sed -e "s/<\(.*\)>/${\1}/g"
こんなかんじの

98 :名無しさん@お腹いっぱい。:2018/11/29(木) 16:58:28.90 .net
#!/bin/bash
# 変数URL, ETAGには既に適切な値が入ってるとする
OPT=('--header' "'If-None-Match: ${ETAG}'")
curl "${OPT[@]}" "${URL}"

こんなスクリプトを書いたけど、curlと鯖のやりとりを覗くと、リクエストヘッダのIf-None-Matchの行にシングルクォーテーションが付いて

'If-None-Match: (ETAGの値)'

と送られてしまう。で、試しにcurlの行を

echo "curl ${OPT[@]} ${URL}" > /tmp/tempfile
. /tmp/tempfile

と書き換えて実行すると、ちゃんと正常に動く。man bashを読んだりbashの引用符の扱われ方をググってみたりしても、何が何だかさっぱり分からない。
どなたか助けてくれませんか。

99 :名無しさん@お腹いっぱい。:2018/11/29(木) 18:06:56.14 .net
自己レス
curlだからとか関係ないな。変数にシングルクォートで囲ったものが入ってて、それをダブルクォートで囲った配列展開してるんだから、そのパラメーターはそのままシングルクォートつきになって当然。
しかし、ETAGはダブルクオートを含むしhttpリクエストヘッダはスペースを含むから、全体をシングルクォートで囲まなきゃならんのだよな。
やっぱどのタイミングでどのクォートがどう展開されるのか、一段階ずつ追いかけてみるしかないのかな

100 :名無しさん@お腹いっぱい。:2018/11/29(木) 21:56:13.42 .net
なんか混乱しとるなw
まあ、ダブルクォートは、他言語を使っている人からすれば
直感に反する機能だってことに、俺も最近気づいたんだけどな
ただどこがどう違うかを言葉で説明したことがわけじゃない。やってるみるか?

・シェルスクリプトは文字列として展開されて実行されているようでそうではない
・ダブルクォートは文字列を囲う機能ではなく、変数展開の挙動を変えるエスケープの一種
この二つに集約されるかなぁ

> しかし、ETAGはダブルクオートを含むし
これ関係ないんだわ

OPT=('--header' "If-None-Match: ${ETAG}")
だと
OPT=('--header' "If-None-Match: "686897696a7c876b7e"")
こうなってしまい
OPT=('--header'   "If-None-Match: "  686897696a7c876b7e  "")
のように解釈されると思ってしまうが違う。
別に文字列展開されてから、動くわけじゃない

ダブルクォートは「 If-None-Match: ${ETAG} 」の部分を一つの引数として
扱いますよー(ただし中の変数は展開されますよ)という意味。
変数の中にダブルクォートが入っていようが改行が入っていようが関係ない

またダブルクォートはそれだけの機能ではなく $@ が入っている場合に異なる挙動をする
"$@" が入っている場合、一つの引数ではなく複数の引数として扱われる
例えば引数$1〜$5が存在する場合、"$@" は "$1" "$2" "$3" "$4" "$5" と等価
また"foo$@bar" となっていた場合、 "foo$1" "$2" "$3" "$4" "$5bar" と等価
引数が一つなら "foo$1bar" だし、引数がゼロの場合は、書かなかったのと同じとなる("" 空文字にはならない)

このように文字列として囲う機能じゃなくて、中に入ってる文字や変数の解釈の仕方に影響を与える機能

101 :名無しさん@お腹いっぱい。:2018/11/29(木) 22:00:40.89 .net
ちなみに "$@" を複数の引数に展開されたくなければ "$*" を使う

102 :名無しさん@お腹いっぱい。:2018/11/30(金) 06:16:21.18 .net
>>100-101
ありがとう。おかげで、サクッと片付きました。素直に

OPT=('--header' "If-None-Match: ${ETAG}")
curl "${OPT[@]}" "${URL}"

で何の問題もなく動作しました。最初にcurlについて調べてたときにETAGを使う例でシングルクォートが使われてたのに、ずっと脳味噌が引っ張られてたようです。
上の行で変数に入れる時点で、スペースを含む一つの文字列として扱われてるんだから、あとはその中身がなんであるかに関係なく、"$[@]"で展開すればいいわけですね。

ありがとうございました。

103 :名無しさん@お腹いっぱい。:2018/12/25(火) 18:37:21.02 .net
bashでログ出力処理を一括でやるにはどうすれば良いですか?

powesshellだと、Start-Transcript に対応するコマンドを教えてください

104 :名無しさん@お腹いっぱい。:2018/12/26(水) 01:04:21.34 .net
>>103
何がしたいのかよくわからないが
シェルスクリプト内の標準出力と標準エラー出力をファイルに出力するなら
#!/bin/bash
exec >script.log 2>&amp;1
...

105 :名無しさん@お腹いっぱい。:2018/12/26(水) 08:34:29.57 .net
>>104
何したいかよくわからんって、
パワーシェルでいうStart-Transcriptをやりたいの
bashで一行ずつリダイレクトつけないとダメとかダサすぎる

106 :名無しさん@お腹いっぱい。:2018/12/26(水) 08:47:38.26 .net
回答ちゃんと読め

107 :名無しさん@お腹いっぱい。:2018/12/26(水) 09:08:14.92 .net
PowerShellなんぞ興味が無いから知らんという人が多かろう
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい

知ってるがお前の態度が気に入らない(AA略)

108 :名無しさん@お腹いっぱい。:2018/12/26(水) 18:22:57.16 .net
生意気だな

109 :名無しさん@お腹いっぱい。:2018/12/26(水) 18:30:53.30 .net
ドザはどこ行ってもあれだな

110 :名無しさん@お腹いっぱい。:2018/12/26(水) 19:04:39.84 .net
ドザがー ドザがー 

111 :名無しさん@お腹いっぱい。:2019/01/10(木) 14:22:50.61 .net
やっつけ
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません

112 :名無しさん@お腹いっぱい。:2019/01/26(土) 23:47:05.51 .net
FreeBSD の /usr/bin/man で、
  if { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1; then
という記述があるんですが、これって何をしているんでしょう。
・標準エラー出力を捨てている
・3 を 標準入力の指す先 (tty) に設定?
・0 を ↑の3に設定?

3>&1 して 1>&3 なら退避目的かなと思うんですが、これは違うので、
意図がわからないです。

ソースはここです。
https://github.com/freebsd/freebsd/blob/master/usr.bin/man/man.sh#L646

113 :名無しさん@お腹いっぱい。:2019/01/28(月) 19:18:42.39 .net
・MANWIDTH=ttyのときはmanの標準出力1の横幅を取得したい。
・sttyの操作対象端末は標準入力0で、出力先は標準出力1。
・a>&b は dup2(b,a) のことで、左を使うと実体は右になる。
・標準エラー出力2は捨てる。
という前提で、
sizes=$($STTY size 0>&1 2>/dev/null) と書くと、
sttyの標準出力1は$()に取られてるから、manの標準出力1とは別物になって、
正しい端末をsttyできない。
{ sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1 は、1が取られ
てるなら3を中継すれば安全じゃねと書いたものと推測される。
{ sizes=$($STTY size 2>/dev/null); } 0>&1 と書けば十分なはず。

114 :名無しさん@お腹いっぱい。:2019/01/29(火) 01:14:27.65 .net
findした結果を1行づつ配列に代入したい場合にはどうすればよいでしょうか?
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。

array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")

115 :名無しさん@お腹いっぱい。:2019/01/29(火) 12:56:34.68 .net
IFSを改行のみにする

116 :112:2019/01/30(水) 08:38:21.70 .net
>>113
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。

しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。

117 :名無しさん@お腹いっぱい。:2019/02/05(火) 14:26:11.34 .net
少々スレ違いですがお許しください

OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが

バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな

118 :名無しさん@お腹いっぱい。:2019/02/07(木) 03:39:18.86 .net
少々じゃないくらい違うなあ

119 :名無しさん@お腹いっぱい。:2019/02/07(木) 03:40:20.92 .net
しかもマルチかよ

120 :名無しさん@お腹いっぱい。:2019/05/25(土) 14:36:47.91 ID:LVSH0hupc
find -print0した結果を1項目ずつ配列に代入したい場合にはどうすればよいでしょうか?
IFSを\0にしようとしても駄目みたいです。

121 :名無しさん@お腹いっぱい。:2019/07/27(土) 21:39:15.96 .net
ログインシェルでfishを使う時、
https://gist.github.com/mitukiii/4954559
できたらやり方教えてください

$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる

122 :名無しさん@お腹いっぱい。:2019/07/30(火) 12:52:38.09 .net
ここはシェルスクリプトのスレです。
シェルの使い方のスレではありません。
スクリプトの話をしてください

123 :名無しさん@お腹いっぱい。:2019/07/30(火) 22:27:15.09 .net
具体的に何を語ったらいいの

124 :名無しさん@お腹いっぱい。:2019/07/31(水) 19:16:20.41 .net
シェルスクリプトだけで実装した一番高速なFizzBuzzはどんなものかとか

125 :名無しさん@お腹いっぱい。:2019/08/01(木) 10:04:58.33 .net
yash使てる?

126 :名無しさん@お腹いっぱい。:2019/08/01(木) 14:04:09.49 .net
使えてないという報告は一つもない

127 :名無しさん@お腹いっぱい。:2019/08/01(木) 22:41:59.49 .net
「使てる(つこてる)?」は「使っていますか?」という意味の質問であって、使用可能かどうかを聞いてる訳では無いのでは

128 :名無しさん@お腹いっぱい。:2019/08/01(木) 23:04:57.30 .net
真面目君か

129 :名無しさん@お腹いっぱい。:2019/08/05(月) 09:18:07.69 .net
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ

と書かれたテキストファイルを作りたいです

echo -e ほにゃらら"\n"ほんじゃらら > index.txt
seq -f "%g あいう" 0 5 > index.txt

ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです

130 :名無しさん@お腹いっぱい。:2019/08/05(月) 10:32:33.45 .net
awkとかじゃいかんの

131 :名無しさん@お腹いっぱい。:2019/08/05(月) 11:55:34.38 .net
>>130
ありがとうございます
調べてみました

cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
あいう
EOF

seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt

echo さしす >> index.txt

132 :名無しさん@お腹いっぱい。:2019/08/05(月) 11:55:45.48 .net
こうやると

ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす

と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです

133 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:05:17.31 .net
ブレース展開

134 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:11:44.60 .net
一応これでうまくいきました

cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
かきく
EOF

seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
sed -i -e '$d' index.txt
echo さしす >> index.txt

135 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:13:50.09 .net
>>133
自分のやり方はなだったらしそうなのでそのキーワード調べてみます

136 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:28:22.64 .net
えー、難しい...
>>130はこんなもんしか考えてなかったけど

awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'

137 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:28:39.74 .net
>>129
cat <<END >index.txt
ほにゃらら
ほんじゃらら
$(printf 'かきく\n%s あいう\n' $(seq 0 5))
さしすせそ
END

138 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:29:43.26 .net
あ、バックスラッシュが円記号になってしまった...

139 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:30:25.69 .net
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
EOF

printf "かきく\n%s\n" {0..5}あいう >> index.txt

これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない

140 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:32:03.53 .net
被ってしまった
みなさんありがとうございます
質問ぬしの自分は>>139です
135と136のやり方調べてみます

141 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:43:19.31 .net
>>137
catで書き出すファイルの中でprintfをやって、そのrintfの中でseqで連番作るんでね
これだとファイルへの書き込みは1回ですみますね

>>136
これも> index.txtで終えれば1回ですみますね
だけどawk難しいです
がんばって135のやり方理解できるようにします

142 :名無しさん@お腹いっぱい。:2019/08/05(月) 13:06:08.43 .net
>>141
> これだとファイルへの書き込みは1回ですみますね

どんな方法で作るにせよ { } で括れば一回にまとめられるよ

{
printf '%s\n' 'ほにゃらら'
printf '%s\n' 'ほんじゃらら'
printf 'かきく\n%s あいう\n' $(seq 0 5)
printf '%s\n' 'さしすせそ'
} >index.txt

143 :名無しさん@お腹いっぱい。:2019/08/05(月) 15:17:00.15 .net
>>142
こんな方法もあるんですね
ありがとうございます

curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。
URL="hoge"
ROKU="curl -sS $URL | sed -n '6p'"
echo "あいうえお"$ROKU"さしすせそ"

しかし結果はこうなりました
あいうえおcurl -sS hoge | sed -n '6p'さしすせそ

144 :名無しさん@お腹いっぱい。:2019/08/05(月) 15:18:57.84 .net
>>143
続き
>>142
さんで教わった{}を使えばよさそうな気がするですがエラーになりました

145 :名無しさん@お腹いっぱい。:2019/08/05(月) 16:33:57.17 .net
printf "あいうえお"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"

146 :名無しさん@お腹いっぱい。:2019/08/05(月) 17:18:21.98 .net
>>145
echoじゃなくてprintfなら改行されないからあいうえおに続けて書けますね
だけど、このままだとROKUのところで改行されてしまうからさしすせそは2行目に来ちゃいますね

147 :名無しさん@お腹いっぱい。:2019/08/05(月) 18:01:04.99 .net
>>129
> と書かれたテキストファイルを作りたいです

こうすれば良いのでは?

cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE

148 :名無しさん@お腹いっぱい。:2019/08/05(月) 19:41:32.36 .net
>>143
コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには
「コマンド置換」 $(…) を使います

あと、「6行目」以外の部分も取り出したくなったときに curl を何度も実行したくはないので
curl と sed は分けておきたいところ

するとこんな感じ

PAGE=$(curl -sS "$URL")
ROKU=$(printf '%s\n' "$PAGE" | sed -n '6p')
NANA=$(printf '%s\n' "$PAGE" | sed -n '7p')
printf 'あいうえお%sさしすせそ\n' "$ROKU"
printf 'かきくけこ%sたちつてと\n' "$NANA"

149 :名無しさん@お腹いっぱい。:2019/08/06(火) 10:37:34.03 .net
>>147
複数行書く方法ありがとうございます

>>148
うまくいきました
ありがとうございます

150 :名無しさん@お腹いっぱい。:2019/08/29(木) 02:47:55.71 .net
$ bash -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
10

この動作ってPOSIX的にはどうなの?

151 :名無しさん@お腹いっぱい。:2019/08/29(木) 05:08:51.78 .net
読みづれーなw

bash -c '
unset a b
echo 10 | read a
# echo $a = 空
let b=a+10
echo $b
'

letはPOSIXにない
readはサブシェルなんだからaは空に決まってる
ごく普通の正しい動作

152 :名無しさん@お腹いっぱい。:2019/08/29(木) 05:09:53.11 .net
正しいコード

bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'

153 :名無しさん@お腹いっぱい。:2019/08/29(木) 23:22:24.50 .net
letまで考えて無かったすまん
まあ説明の為なのでそこは目をつぶってくれたまい

opensuzeなんだけども

$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$

この動作ってPOSIX的にはどうなの?

154 :名無しさん@お腹いっぱい。:2019/08/30(金) 06:34:55.40 .net
バグ

155 :名無しさん@お腹いっぱい。:2019/09/10(火) 19:48:12.68 .net
curlのやり方教えてください
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?

https://i.imgur.com/Nvm7CMj.jpg

156 :名無しさん@お腹いっぱい。:2019/09/11(水) 14:49:50.58 .net
ブラウザの開発ツールからcURLでコピーした方が早そうだぞ

157 :名無しさん@お腹いっぱい。:2019/09/11(水) 15:08:13.17 .net
>>156
どうもありがとうございます
-H 'Content-Type: application/json'
を付けたら動きました

158 :名無しさん@お腹いっぱい。:2019/09/12(木) 17:05:57.53 .net
アプリの起動判定をしたいんですが
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?

159 :名無しさん@お腹いっぱい。:2019/09/12(木) 17:48:19.11 .net
killall -0 アプリ名
とか?

160 :名無しさん@お腹いっぱい。:2019/09/12(木) 19:39:47.90 .net
>>159
どうもありがとうございます
そのコマンドで何も変えらなかったら起動中という事であってますか?

161 :名無しさん@お腹いっぱい。:2019/09/13(金) 07:33:53.20 .net
起動してないとわかっても、その直後に起動することも有るから
ロックを掛けないと確実にはならないけどな

162 :名無しさん@お腹いっぱい。:2019/09/14(土) 01:15:30.85 .net
pgrepでええやん、と思ったけど環境依存か

163 :名無しさん@お腹いっぱい。:2019/09/14(土) 02:03:14.71 .net
>>161
どの環境でも使えるロックの機構ってなにかある?

164 :名無しさん@お腹いっぱい。:2019/09/14(土) 03:45:32.29 .net
>>163
set -C もしくは mkdir

165 :名無しさん@お腹いっぱい。:2020/01/20(月) 04:38:26 .net
怒らないで教えて欲しいんだけど何でお前らPowerShell使わないの?
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ

166 :名無しさん@お腹いっぱい。:2020/01/20(月) 07:42:20 .net
>>165
なんでそんなに無意味な宣伝するの?

167 :名無しさん@お腹いっぱい。:2020/01/20(月) 13:22:02 .net
>>165
Dockerのalpine、debianなど、ほぼすべてのイメージでことごとく動かないから。
shで十分なのに、PowerShellなんて使いませんよw

168 :名無しさん@お腹いっぱい。:2020/01/20(月) 15:09:31.95 .net
>>165
linux のコマンド群が使えないから

169 :名無しさん@お腹いっぱい。:2020/01/21(火) 10:19:02 .net
ソースコードをダウンロードしてビルドしようとしたら…

ERROR: You must either be root or be able to use sudo

ビルドするのに root になれって? この時点で話にならないよ。

170 :名無しさん@お腹いっぱい。:2020/01/21(火) 11:46:33.77 .net
>>169
それってパワーシェルの話?

171 :名無しさん@お腹いっぱい。:2020/01/21(火) 21:58:33.32 .net
そのメッセージでググっても、インストール時のメッセージしか見つからないね
https://www.google.com/search?q=%22ERROR%3A+You+must+either+be+root+or+be+able+to+use+sudo%22

ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w

172 :名無しさん@お腹いっぱい。:2020/01/21(火) 22:20:06.48 .net
>>169
エラーメッセージには「sudo を使え」と書いてあるが

173 :名無しさん@お腹いっぱい。:2020/01/22(水) 02:27:49 .net
とりあえず適当なことを言ってPowerShellを
貶めたかったんだろ?バレて逆効果になってるがw

174 :名無しさん@お腹いっぱい。:2020/02/17(月) 09:08:53.72 .net
grep 等の外部コマンド?を使わずに任意の文字列の最初に見つかる3桁の数字を得る方法があれば教えて下さい
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)

175 :名無しさん@お腹いっぱい。:2020/02/17(月) 12:51:47 .net
bashなら=~と、$BASH_REMATCH使えばできるんじゃね

176 :名無しさん@お腹いっぱい。:2020/02/17(月) 12:52:43 .net
>>174
おまえは俺かw

似たようなことをやったよ。grepで(笑)

外部コマンドを使わないなら、こうなるから面倒くさいんだよな。
できるけど面倒くさい。だから遅いけどgrepにした。

v=abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz
v=${v#"${v%%[0-9][0-9][0-9]*}"}
v=${v%"${v#[0-9][0-9][0-9]}"}

177 :名無しさん@お腹いっぱい。:2020/02/17(月) 13:01:06 .net
シェルスクリプトだと(bash依存は知らん)
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。

だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。

178 :名無しさん@お腹いっぱい。:2020/02/19(水) 01:25:53 .net
ありがとうございます
面倒でも前後から不要部分を取り除くしかないのですね

179 :名無しさん@お腹いっぱい。:2020/02/19(水) 03:44:34.80 .net
「マッチした部分を含めて削除」ってどうやるの?

180 :名無しさん@お腹いっぱい。:2020/02/19(水) 07:39:09.82 .net
>>179
${v%%[0-9][0-9][0-9]*} ってかいてあるやん

abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz ・・・(1)

↓ ${v%%[0-9][0-9][0-9]*}

abc_4_de_99_fgh_ijklm_no_ ・・・(2)

↓ (1)ー(2)

567_2_123_pqrst_uvwx_yz ・・・(A)

↓ ${v%"${v#[0-9][0-9][0-9]}"}

_2_123_pqrst_uvwx_yz ・・・(B)

↓ (A)ー(B)

567

181 :名無しさん@お腹いっぱい。:2020/02/19(水) 12:18:21 .net
>>180
丁寧にありがとう!

182 :名無しさん@お腹いっぱい。:2020/02/21(金) 17:55:59.15 .net
今更だが>>180

× ${v%"${v#[0-9][0-9][0-9]}"}
○ ${v#[0-9][0-9][0-9]}"

だな

183 :名無しさん@お腹いっぱい。:2020/02/22(土) 16:29:53 .net
それらをPowerShellで書くとどうなるか?
一度でも考えてみたことはありますか?

184 :名無しさん@お腹いっぱい。:2020/02/22(土) 16:45:28.02 .net
PowerShellで書くとLinuxで動かすのが大変になります。

185 :名無しさん@お腹いっぱい。:2020/02/26(水) 03:34:54.75 .net
5年くらいするとセキュリティパッチが出なくなって使用禁止になるから
また作り直しになるんだろうどうせ。

186 :名無しさん@お腹いっぱい。:2020/03/13(金) 23:32:50.67 .net
例えば中身が
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。

187 :名無しさん@お腹いっぱい。:2020/03/14(土) 16:01:32.08 .net
宿題は自分でやりなよ

188 :名無しさん@お腹いっぱい。:2020/03/14(土) 17:54:51 .net
>>186
なんでそんな分かりづらい説明するんだ?

189 :名無しさん@お腹いっぱい。:2020/03/14(土) 17:55:37 .net
全く意味がわからん。
誰か翻訳してくれ

190 :名無しさん@お腹いっぱい。:2020/03/14(土) 18:20:44 .net
>>186
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ

191 :名無しさん@お腹いっぱい。:2020/03/14(土) 18:34:21 .net
>>190
日本語ではなくてbashでお願いします!!

192 :名無しさん@お腹いっぱい。:2020/03/14(土) 18:41:35 .net
>>189
結果だけ見たら

入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する

かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する

193 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:00:13 .net
> 俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
これはなんで? 小さいとかの境目はどれくらい?

194 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:15:35 .net
そんなこと聞いてくるようではセンスがないよ
センスがない奴にいくら説明しても無駄

195 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:18:24 .net
pythonだと単語のn文字目を取り出すなんて朝飯前だしな
関数書く手間が一つ省ける

196 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:24:34 .net
疑問になった点は「テキストが小さいなら」です。
その他の話は聞いてません。

197 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:26:37 .net
> pythonだと単語のn文字目を取り出すなんて朝飯前だしな

単語の3文字目(オフセット2から1文字)を取り出す
echo "${str:2:1}"

Pythonだとどう朝飯前なんですか?

198 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:48:13 .net
早く答えのスクリプトを書いてください!!
遅いですよ!!

199 :名無しさん@お腹いっぱい。:2020/03/14(土) 21:05:30 .net
>>196
個人的には今どきなら1MB以下なら小さい1GB以上ならでかい
その間ならケースバイケース
PCの性能やメモリ容量とかと相談

200 :名無しさん@お腹いっぱい。:2020/03/14(土) 21:19:09 .net
>>186
> 一度ファイルを最後まで空読みすれば
これはどういうスクリプトなの?

201 :名無しさん@お腹いっぱい。:2020/03/14(土) 22:00:38.59 .net
>>199
1MBってことは、1行256バイトとして4096行以下なら小さいってことですね。
10MBで約4万行、100MBで約40万行、1GBで400万行
昔のExcelの制限が1シート65000行だったことを考えると
エクセルで扱えるデータなら問題なさそうですね

202 :名無しさん@お腹いっぱい。:2020/03/14(土) 22:38:14.38 .net
アスペかよw
アスペならちゃんと改行コードも数えるんだぞ?

203 :名無しさん@お腹いっぱい。:2020/03/15(日) 13:40:07 .net
>>202
お前なんのためにレスしたの?
>>201が言ってることは正しいし、お前の主張は何も含まれていない。
ただ、レスしただけ

204 :名無しさん@お腹いっぱい。:2020/03/20(金) 18:13:05 .net
185です。説明不足ですみません。
やりたいことは1行目を読み取り、2行目以降はそのままwhileループで最後まで読みたいのです。
ただそのためだけにフラグを使うのもなんだかなぁと。

205 :名無しさん@お腹いっぱい。:2020/03/20(金) 19:59:54 .net
わざわざ空読みする理由が分かんねえ
今出来てる状態のスクリプト貼って何がうまく行かないのか説明してみ

206 :名無しさん@お腹いっぱい。:2020/03/21(土) 00:02:26 .net
#!/bin/sh

お願いします

207 :名無しさん@お腹いっぱい。:2020/03/21(土) 00:18:20 .net
>>206
そこまでは上手く書けてる
その調子で頑張れ

208 :名無しさん@お腹いっぱい。:2020/03/21(土) 13:58:51.87 .net
>>191
今日一番ワロタ
キミもbashで質問しなよ

209 :名無しさん@お腹いっぱい。:2020/03/21(土) 14:07:34.22 .net
bash は重複しない4文字である。つまり2bitのデータと考えられる
日本語を1文字16bitのデータと考えると、
1文字をbashの4文字×8組=32個のデータで表現できる
つまりbashで質問すると32倍のデータが必要になる
1レスに2048バイト、1024文字を書き込めるから32文字の質問であれば
bashで質問することは可能

210 :名無しさん@お腹いっぱい。:2020/03/21(土) 15:26:35 .net
向いてないんだろ
こういうの

211 :名無しさん@お腹いっぱい。:2020/03/22(日) 10:34:31.24 .net
>>209
> 1文字をbashの4文字×8組=32個のデータで表現できる

この行から間違えてるだろ

212 :名無しさん@お腹いっぱい。:2020/03/22(日) 17:21:49.94 .net
>>200
こいうんじゃね?

というのを期待してた?残念w

213 :名無しさん@お腹いっぱい。:2020/03/23(月) 20:28:21 .net
>>212
while IFS=, read は思いつくけど
最後まで空読みってどんな処理なのか気になっただけ

214 :名無しさん@お腹いっぱい。:2020/03/24(火) 21:32:10 .net
>>197
>>> str = "foobarbaz"
>>> print(str[3])
b

python3は重いかわりに色々便利なのが定義されてる

215 :名無しさん@お腹いっぱい。:2020/04/04(土) 22:32:04.93 ID:gwOVmDRaJ
未経験から半年でフリーエンジニアになれる人の特徴
https://www.youtube.com/watch?v=YCxu0jn52Qw
フリーランスか会社員かどっちが簡単かについての最終回答
https://www.youtube.com/watch?v=JA4JNSmIdxI
【エンジニア】正社員/派遣社員/フリーランスのメリット・デメリットについて
https://www.youtube.com/watch?v=fTG-eMpwhCg
月収1000万円オンラインサロンオーナーの日常【飲み過ぎ】
https://www.youtube.com/watch?v=lPfWZLatYus&t=107s
借金400万円から人生逆転するまでの軌跡
https://www.youtube.com/watch?v=fXdHlFFUjGY
エンジニアはお金を追求してはいけないという年寄りを論破してみた
https://www.youtube.com/watch?v=qJHCmxFv718
プログラミングスクールを否定する老害どもについて
https://www.youtube.com/watch?v=K2SN-Rr0PgY&t=506s
新人叩きしてる古参勢がすぐ儲からなくなる理由
https://www.youtube.com/watch?v=Ch9Ir8O-iqU&t=332s

216 :名無しさん@お腹いっぱい。:2020/04/11(土) 10:24:56 .net
タブで字下げされてるテキストファイルの中にある
_TAG("S.T.A.R.T") が含まれる行と
_TAG("E.N.D") が含まれる行との間にある行数を数えるにはどうすればいいでしょうか

217 :名無しさん@お腹いっぱい。:2020/04/11(土) 11:20:47.30 .net
...... | sed -n '/_TAG("S.T.A.R.T")/,/_TAG("E.N.D")/p' | wc -l
こんな感じ

218 :名無しさん@お腹いっぱい。:2020/04/12(日) 07:36:15.54 .net
さんくす
sedやwcなどの外部コマンド?を使わない方法はありますか?

219 :名無しさん@お腹いっぱい。:2020/04/12(日) 07:43:15.09 .net
宿題は自分でやろう

220 :名無しさん@お腹いっぱい。:2020/04/12(日) 13:13:39.28 .net
>>218
そういうことするなら
perl5に行きなよ
普通はそれも最初から入ってて、文字処理に強い言語だから
---
そんな処理だと、その処理の前に
タグがネストしてたり、正しく対になっているのか調べれた方が安全
おみあげに類似したコードあげる
https://ideone.com/XCz8Ou
対が壊れてたら -1 を
壊れてないならネストの最大の深さを返す

221 :名無しさん@お腹いっぱい。:2020/04/12(日) 17:00:27.78 .net
>>220
ダクネスが居たように見えた

222 :名無しさん@お腹いっぱい。:2020/04/13(月) 19:58:42 .net
>>216
問題の意図が明確
その _TAG("S.T.A.R.T") とかは字下げされているのかどうなのか
_TAG("S.T.A.R.T") が含まれてると言うが、
一行 は _TAG("S.T.A.R.T") だけではないのか?
echo ' _TAG("S.T.A.R.T")' なんかも考慮する必要あるのか?

俺だったら一行まるまる、_TAG("S.T.A.R.T") だけにするがな
その方がパースしやすいので

223 :名無しさん@お腹いっぱい。:2020/04/13(月) 19:59:20 .net
あと _TAG("S.T.A.R.T") は複数あるのか?という質問も追加
ネストされている場合は考慮するのか?とか

224 :名無しさん@お腹いっぱい。:2020/04/13(月) 20:01:47 .net
まあいずれにしろテキストファイルは read で読み込めるんだから
こんな感じになるだろうが

while IFS= read -r line; do
 case $line in
  '_TAG("S.T.A.R.T")') なんとか ;;
  '_TAG("E.N.D")') かんとか ;;
 esac
 if 条件; then
  count=$((count + 1))
 fi
done < テキストファイル

225 :名無しさん@お腹いっぱい。:2020/04/13(月) 20:03:02 .net
>>220みたいにそういう場合だったら Perl にとかいうやつがいるけど
シェルスクリプトで同等のコードを書いても大差ないんだけどなw

226 :名無しさん@お腹いっぱい。:2020/04/13(月) 21:07:49.84 .net
sedやwc使うなとかいう制約も謎だわ
言語やツールが何であれ結局裏で似たようなライブラリの関数呼び出すのに

227 :名無しさん@お腹いっぱい。:2020/04/13(月) 21:38:58 .net
理由がわからないなら普通に聞けばいいだけなのに。
自分が知らないだけなのに、なんでそんなことありえない、
あってたまるかみたいな書き込みをするんだろうねw

228 :名無しさん@お腹いっぱい。:2020/04/13(月) 22:33:21.03 .net
理由がわからないんじゃなくて、そんなことを言い出す人間が理解できないって話だよ
こだわりがあるならこんなところで人に聞くんじゃないよって話で

229 :名無しさん@お腹いっぱい。:2020/04/13(月) 22:41:09.86 .net
自分とは違う方針の質問は受け付けない
そんなレスはこてんぱんにしてやる。ですか?

230 :名無しさん@お腹いっぱい。:2020/04/13(月) 23:40:18.71 .net
自分の期待とは違う方針の回答は受け付けない
そんなスレはこてんぱんにしてやる。じゃないの?

231 :名無しさん@お腹いっぱい。:2020/04/14(火) 04:36:43 .net
>>229
スレの流れ見たけど受け付けられてるじゃん
宿題を済ませたいのか知らないが
人に聞くくらいなら針路変更したらどう?
知り合いにコンピューターの勉強してた人居るけど
大学で課題をすべて友人からパクってたそうだ
今その人バイトで食いつないでる
ITの仕事できたら低くても年収400万は行ったろうにね

232 :名無しさん@お腹いっぱい。:2020/04/14(火) 07:50:06 .net
>>231
知り合いの人は大学をやめて会社を起こして金持ちになったよ。
お前が何をいいたいのか知らんが

233 :名無しさん@お腹いっぱい。:2020/04/14(火) 07:52:02 .net
>>230
さんくすとお礼を言った上に、条件をつけ忘れてたから
補足しただけでしょ

たったそれだけで、はぁ?理解できない。謎だわ。なんでそんな事するの?バカなの?
みたいに言うのはなんで?

234 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:10:41 .net
>>232
知り合いは宝くじ当たったよ

中卒、高卒、大卒の平均年収見てみ

235 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:12:21 .net
問題を解決できないやつは
学歴がなんでも大成しないな

236 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:16:49 .net
2chは口が悪いやつが多いけど
ここ見てると分かるように無償で相手してくれるやつがいるんだな
現実はどうだろう

そんなことないよ

社会に出れば分かるがフリーライダーは受け入れられない
街角でスケッチブックに助けてくださいって掲げるのか?
そんなの通報されて終わるよ
SNSなら答えてくれるって?
フォロワーも居ない人の相手なんて誰もしない
要するに2chしか質問する先がないんだ

237 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:18:35 .net
>>233
何で逆切れするの?
仕事は自分でしましょう

238 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:24:13 .net
>>233
>>229があなたの書き込みなら
あなたが煽っただけでしょう
そして>>229があなたではないなら
なぜそんな反応するのか分からない

239 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:26:10 .net
課題か仕事か知らんが問題を片付けてくれたのになぜ素直になれないんだろうか
仕事だったら出来上がらないから検収されずに報酬もらえないぞ

240 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:29:48.56 .net
JavaHouseってのがあって明らかに仕事に関係するであろう質問してた輩に
運営者の人がそれ幾らなのって聞いてたな
聞いた本人は無料ですってなんか意味の分からんこと言ってたが

241 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:31:37.22 .net
>>234
宝くじワロタ

242 :名無しさん@お腹いっぱい。:2020/04/14(火) 08:44:03.74 .net
>>232
それは単にその人が優秀だっただけ

243 :名無しさん@お腹いっぱい。:2020/04/14(火) 09:06:13 .net
課題をこなせず大学をやめて成功したって丸投げ派遣会社でも設立したんか

244 :名無しさん@お腹いっぱい。:2020/04/14(火) 10:27:17.89 .net
>>242
人の話がシェルスクリプトと何の関係があるのという話だ
人の話をし始めたやつにいえな

245 :名無しさん@お腹いっぱい。:2020/04/14(火) 11:48:50.47 .net
宿題は自分でやりましょうってことだけじゃ

246 :名無しさん@お腹いっぱい。:2020/04/14(火) 12:53:01 .net
>>245
全ての質問に対してそういう回答をしてるなら何も言わんよ

247 :名無しさん@お腹いっぱい。:2020/04/14(火) 16:26:20 .net
>>232
まあ今どきの日本人はだいたいビル・ゲイツは知り合いだからなw

248 :名無しさん@お腹いっぱい。:2020/04/14(火) 16:29:02 .net
>>246
でたでたw
なぞの平等理論w
あいつだけずるいとかいう妬みで周りが見えなくなってるんだろうなあ

249 :名無しさん@お腹いっぱい。:2020/04/14(火) 16:51:38 .net
自分なら質問者が
「今こうやってるけどもっと効率のいい方法ない?」
とか聞いてきたら答えてあげたくなる

一度答えてそーじゃねーよとか言われたら・・・w

250 :名無しさん@お腹いっぱい。:2020/04/14(火) 17:19:48.25 .net
一度答えてそーじゃねーよと言われたら?
↓これみて「そーじゃねーよ」言われたと思っちゃったの?

215 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2020/04/11(土) 11:20:47.30
...... | sed -n '/_TAG("S.T.A.R.T")/,/_TAG("E.N.D")/p' | wc -l
こんな感じ

216 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2020/04/12(日) 07:36:15.54
さんくす
sedやwcなどの外部コマンド?を使わない方法はありますか?

251 :名無しさん@お腹いっぱい。:2020/04/14(火) 17:20:54.13 .net
沸点が低いんだろうなぁ。
少しでもなにか言われたら、親を侮辱されたかのように感じるんだろうな

252 :名無しさん@お腹いっぱい。:2020/04/14(火) 17:27:27.07 .net
なんとなく答える前に
sedやwcなどの外部コマンド?を使わない方法はありますか?
と書いても、同じようにキレていそうな気がするなw

253 :名無しさん@お腹いっぱい。:2020/04/14(火) 17:38:50 .net
3連投かよw
そんなに悔しかったのかよw

254 :名無しさん@お腹いっぱい。:2020/04/14(火) 18:07:42.02 .net
レスしただけでこの反応w 矛先をずらしているのもありがちだなぁw

255 :名無しさん@お腹いっぱい。:2020/04/14(火) 23:33:18.21 .net
>>222-223
その _TAG("S.T.A.R.T") とかも字下げされてます
echo ' _TAG("S.T.A.R.T")' なんかも考慮する必要はありません
_TAG("S.T.A.R.T") は複数ありません
ネストもありません

>>224
可能ならman bashで出る内容だけで解決したいです。

_TAG("S.T.A.R.T")や_TAG("E.N.D")の前後にも行はあるので、わかりやすく
_TAG("S.T.A.R.T")なんとか
  count=$((count + 1))
_TAG("E.N.D")かんとか
ならベストなのですが。

256 :名無しさん@お腹いっぱい。:2020/04/15(水) 00:16:02.16 .net
>>255
while文で1行ずつ読んでSTART見つけたところからカウントしていってENDが見つかったら終了すりゃいいだけじゃないの
自分でどこまで作ったの?

257 :名無しさん@お腹いっぱい。:2020/04/15(水) 00:37:48.24 .net
>>256
もういいから早くスクリプト作れって言ってんだよ

258 :名無しさん@お腹いっぱい。:2020/04/15(水) 00:47:14.66 .net
>>257
なら今からman bash読むわ
ちょっと量が多いから1週間待ってな
忘れるといかんからまたその頃に催促してくれ

259 :名無しさん@お腹いっぱい。:2020/04/15(水) 08:44:47.78 .net
>>257
おまえ志賀だろ
あわしろさんに謝れ

260 :名無しさん@お腹いっぱい。:2020/04/16(木) 00:36:27 .net
>>255の後半からはawkのセンスありと見た

261 :名無しさん@お腹いっぱい。:2020/04/16(木) 07:29:49 .net
自分で man 読んで自分で出来るようになる方が自分にとって有益だと思うんだが…

262 :名無しさん@お腹いっぱい。:2020/04/16(木) 12:09:07 .net
awkでやればできるよ!・・・全部BEGIN
これ萎えるw

263 :名無しさん@お腹いっぱい。:2020/04/17(金) 09:28:05 .net
フレッシュなニンニクジュースを飲めばコロナの菌が死滅する

264 :名無しさん@お腹いっぱい。:2020/04/19(日) 04:34:10.20 .net
この板の住民なら生ニンニクで腸内細菌死滅して病院送りになるのは知ってそう

265 :名無しさん@お腹いっぱい。:2020/04/19(日) 04:48:20.74 .net
言うほどUNIXやシェルスクリプトってコロナ菌に関係あるか?

266 :名無しさん@お腹いっぱい。:2020/04/19(日) 13:15:29 .net
[ と [[ の違いなんかも理解できてないままflgやcontinueを使って書いてみました。
_TAG("S.T.A.R.T")の後でもループの度にflgをチェックするのが無駄なので
_TAG("S.T.A.R.T")を探すループと_TAG("E.N.D")まで行数を数えるループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
declare -i i=0
declare -i flg=0
for f in `cat $INPUT_FILE`
do
if [ $flg == 0 ]; then
if [[ "$f" =~ \t*'_TAG("S.T.A.R.T")' ]]; then
flg=1
else
continue
fi
else
if [[ "$f" =~ \t*'_TAG("E.N.D")' ]]; then
echo 行数は $i
exit 0
else
i=$i+1
fi
fi
done

267 :名無しさん@お腹いっぱい。:2020/04/19(日) 22:46:59.99 .net
>>266
> ループを完全に分けてflgを無くしスッキリ出来たらいいのですが。

まず for f in `cat $INPUT_FILE`を使うのはやめよう
シェルスクリプトでテキストファイルを読むならwhile + read を使う
そしてread は read してから read すると次の行を read する(当たり前だw)

268 :名無しさん@お腹いっぱい。:2020/04/26(日) 02:43:28.05 .net
一応それらしいのを書いてみました。
exitがあるのと、whileループの前と中にreadがあるのがちょっと不満です。
後チェックができるように do; read; while という使い方ができればいいのですが。

declare -i i=0
while : ; do
read f <- 不要かも

while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
read f
done

read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i
exit
done < $INPUT_FILE

269 :名無しさん@お腹いっぱい。:2020/04/26(日) 07:48:46 .net
そもそも done < $INPUT_FILE とか書く必要ない

script.sh < $INPUT_FILE とやればいいんだよ
その方が柔軟性が高くなる

そうすりゃスクリプトは中身だけで良くなる。endはいらない。
そして while read do にも置き換えられるやろ?

read f <- 不要かも

while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
 read f
done

read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i

270 :名無しさん@お腹いっぱい。:2020/04/26(日) 07:49:15 .net
× endはいらない。
○ exitはいらない。

271 :名無しさん@お腹いっぱい。:2020/04/26(日) 13:23:56.84 .net
後出しっぽくてすみません。
$INPUT_FILE は_TAG("S.T.A.R.T")や_TAG("E.N.D")と同じく固定名なので汎用性は不要なんです。
それにこの部分はscriptの一部で本体には引数があるため毎回script.sh 引数 < $INPUT_FILE とやるのはちょっと...
といって、このためだけに分割するのも...

272 :名無しさん@お腹いっぱい。:2020/04/26(日) 16:11:10.53 .net
じゃあ
{
なかみ
} < "$INPUT_FILE"
とかすればいい

273 :名無しさん@お腹いっぱい。:2020/10/27(火) 23:15:06.07 ID:oDaI72SOc
サイボウズ式:会社員でもフリーでもない、その中間ぐらいの生き方を模索しているところです
https://www.huffingtonpost.jp/cybozu/careerpass_b_17142954.html?utm_hp_ref=jp-furiransu
「社員全員が副業」を体現し普及するスタートアップ、売上前年比4倍が物語る今後
https://newswitch.jp/p/23029
サイボウズの「副業したい人、採用します」戦略。正社員募集では見つからない“異能”の採り方
https://logmi.jp/business/articles/320834
10月より週休4日制度に移行します。
https://note.mu/soutaros/n/na788df21965b
「週休4日」や「1日5時間勤務」も可能に。アクセンチュアが、新たな勤務制度を取り入れた理由
https://www.huffingtonpost.jp/enhyouban/accenture_b_12796206.html
フリーランスは増加した。でも「奴隷的」会社員の延長では社会は不自由なままだ。
https://www.huffingtonpost.jp/entry/freelance-basics_jp_5c988943e4b057f7330cb53a?utm_hp_ref=jp-hatarakikata
秩父・横瀬町にWeb業界のクリエイターが集結! 地域がひとつになったクリエイティブソン
https://careerhack.en-japan.com/report/detail/813
自称「日本一の駅の待合所」はいったいドコがスゴいのか
https://headlines.yahoo.co.jp/hl?a=20190425-00010004-moneyplus-bus_all
書店内の本が読み放題!新しいオフィス形態「BOOK&OFFICE 文悠」
https://headlines.yahoo.co.jp/article?a=20190424-00001676-shogyokai-bus_all
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055

274 :名無しさん@お腹いっぱい。:2020/12/09(水) 09:14:48.51 .net
https://i.imgur.com/7y5aA6m.jpg

275 :名無しさん@お腹いっぱい。:2021/03/01(月) 22:58:36.48 .net
$ eval "<"
bash: 予期しないトークン `newline' 周辺に構文エラーがあります

これってどういうこと?

276 :名無しさん@お腹いっぱい。:2021/03/02(火) 03:17:30.34 .net
予期しないトークン が出てきたんだろ

277 :名無しさん@お腹いっぱい。:2021/03/02(火) 09:29:15.67 .net
そりゃ < をbashに渡すから
$ <
と同じ結果になる訳で

278 :名無しさん@お腹いっぱい。:2021/03/02(火) 11:20:08.32 .net
おふたりありがとう
たしかに
$ <
と同じ結果になった
でもnewlineというのはどこにも記述してないのにどうして `newline' なんだろう?と

279 :名無しさん@お腹いっぱい。:2021/03/02(火) 11:55:19.88 .net
英語の勉強をしましょう

280 :名無しさん@お腹いっぱい。:2021/03/02(火) 12:14:10.37 .net
>>278
パーサーが入力の「末尾」も改行文字と同じに扱っている
または入力末尾に改行文字を追加してからパースしている
といったところじゃないかな

281 :名無しさん@お腹いっぱい。:2021/03/02(火) 12:48:18.17 .net
あー、そういうことか、なるほどわかりました
日本語の中に突然newlineが出てきて、しかもわざわざクォートされてるからてっきり予約語かと思い込んでいた
というか目に見えない予約語なんだろうけど
ありがとうございます

282 :名無しさん@お腹いっぱい。:2021/03/02(火) 16:21:26.89 .net
わかっとらんやんけ!

283 :名無しさん@お腹いっぱい。:2021/03/14(日) 10:53:57.86 .net
>>165
win鯖管か個人用途のみで使うなら7系はいいものだと思うけど、数百MB食うpwshがunix界隈で受け入れられるとはとても思えない
まあ新興非b系シェルは駆逐されるかもしれんが
そもそもまだMacとlinux主要ディストロにしか公式対応してないので

IT職でなく、単にツールキットを享受できればいい人ならpwshでいいと思うよ
たとえ趣味や仕事でも(だけど時代遅れな)b系シェルの技能は汎用性あるから、あえて普段から使うのも勉強になるよ

284 :名無しさん@お腹いっぱい。:2021/03/14(日) 10:59:38.87 .net
あと怒涛の互換性ブチ壊しバージョンアップ中だから、せっかく書いても一年で動かなくなる
まだソフトウェア開発には使えないのが現状

285 :名無しさん@お腹いっぱい。:2021/03/14(日) 17:45:37.35 .net
シェルスクリプトの特徴は「人間がそのまま読むことが出来る1行1データのテキストを扱う」という点なんだわ
シェルスクリプトは分かりづらいからPerlやPythonを使うとか言ってるやつがいるけど
1行1データのテキストを扱うならば、シェルスクリプトが一番うまく処理できる
正確に言えば、シェルスクリプトだけじゃなくてUNIX系のCLIコマンドがそれを前提としたインターフェースになってる
CLIコマンド=シェルスクリプトのAPIなんだよ

pwshがunix界隈で受け入れられないのは、APIが全く違っていて互換性がないから
API=CLIコマンドなので、プログラマの多くはAPIコマンドを知ってる

シェルスクリプトがいつまでたってもPerlやPythonに置き換わらないのも
それらの言語はCLIコマンドというAPIを使わないから
CLIコマンドを使うならば、シェルスクリプトより簡潔に書ける言語が存在しない

286 :名無しさん@お腹いっぱい。:2021/03/31(水) 10:37:33.90 .net
シェルなんだから外部コマンドは呼べるし、テキストも扱えるしそんなに変わらんのでは
そんなに変らんということはすなわち、わざわざunix環境で使うモチベとしては弱いと思うが
ドザーが流行りのwsl使うのには便利なんじゃね

287 :名無しさん@お腹いっぱい。:2021/03/31(水) 10:41:33.46 .net
昔ながらのwinコマンドは大体外部コマンドだけど、pwshはほとんど組み込みコマンドなのがなあ
slsとか分けて提供してくれればbetter grep/findとして個人的には使いたいんだが

288 :名無しさん@お腹いっぱい。:2021/03/31(水) 22:49:44.43 .net
>>286
Windowsのコマンドはスクリプトから使うことを考慮されてない物が多い
例えば、copyコマンドは、copyすると
1 個のファイルをコピーしました。
とか人間のためのメッセージが出てくるからテキスト処理に向かない

バッチファイルは人間が操作するのと同じことただやるだけ
(出力を加工しない)なのでバッチファイルから使う分にはそれでもいいが
シェルスクリプトのように出力と入力をつないで処理することには向いていない

だからpwshはWindowsのコマンドを呼び出さない
一方pwshで使うAPIは1行1データのテキストにはなってないし
普段使ってる外部コマンドではない
どちらかと言えばPythonなどの関数に近い

Unix/Linuxの外部コマンド・・・1行1データのAPIインターフェースでCLIからも参照する
pwsh、Python、多くの言語・・・引数と戻り値のAPIインターフェースで言語内から参照しない

APIのインターフェースが大きく違っていて
Unix/Linuxの外部コマンドは改行の扱いが難しいなどの制限があるが
その制限の範囲内ではスクリプトからも人間からも使いやすくて
他の言語には置き換えることが出来ないんだよ

289 :名無しさん@お腹いっぱい。:2021/04/01(木) 00:40:09.95 .net
Windowsでシェルスクリプト動かそうとすると、パスの\のエスケープで気が狂いそうになるから
その辺捨てたパワーシェルの割り切りは、それはそれで理解できるけどなー

290 :名無しさん@お腹いっぱい。:2021/04/01(木) 01:14:08.37 .net
>>289
Windowsでシェルスクリプトって何を使ってるの?
パスの\のエスケープなんかしたことないよ

pwshはスクリプト言語としては悪くないと思うよ
ただPythonなんかと同じようなプログラミング用の言語ということ

Pythonにも当てはまるけどプログラミング用の言語は
シェルスクリプトとはスタイルが異なる。
シェルスクリプトは端末操作に特化した言語だから
プログラミングはしにくいが端末操作は得意

まあPowerShellでも普段からコマンドレット使って端末操作してます。
pwshでもコマンドレットをメインで使いますって人なら
シェルスクリプトと同じような感じに見えるかもしれないけど
そんな人いるのかな?

291 :名無しさん@お腹いっぱい。:2021/04/01(木) 03:02:34.14 .net
>>290
Windowsはダブルクォートの直前にバックスラッシュがある場合のみエスケープとして扱うということに一応なってる。
しかし実はWindowsではダブルクォートも引数の区切りも解釈するのはアプリケーションの仕事なので実は上記のように解釈される保証はない。

292 :名無しさん@お腹いっぱい。:2021/04/01(木) 06:04:39.51 .net
>>291
アプリケーションの仕事って言うなら、
パワーシェルから呼び出したときも同じじゃん・・・

293 :名無しさん@お腹いっぱい。:2021/04/14(水) 16:39:38.83 .net
int main( int argc,char **argv){ printf("%s\n",argv[1]); return 0;}
みたいなプログラムを書いて
a.exe "abc xyz"
みたいに実行しても処理系によって出力が
"abc xyz"
だったり
abc xyz
だったり
"abc
だったり…そんな時代もあったね。

294 :名無しさん@お腹いっぱい。:2021/04/17(土) 04:15:34.67 ID:1C2XvsMVm
第一生命HD、副業解禁 約1万5000人対象
https://www.nikkei.com/article/DGXZQODF226QU0S1A120C2000000/
第一生命HD、副業解禁 1万5000人対象―大手生保初
https://www.jiji.com/jc/article?k=2021020301353&g=eco
IHI、国内8000人の副業解禁 重厚長大企業も転機
https://www.nikkei.com/article/DGXZQODZ171SS0X10C21A1000000
IHI、社外兼業を解禁 社内副業もルール化
https://www.jiji.com/jc/article?k=2021012100772&g=eco
50代に時給5000円の求人も。都会の会社員、“地方企業でリモート副業”が人気
https://nikkan-spa.jp/1711157
「週休3日制」導入は拡大するのか? 働き方が多様化する社会で生き抜く力
https://news.yahoo.co.jp/articles/2887cf226cf6f608ff511ee9e349fd6518d4311f
スカイマーク、週休3日制へ 来春にも事務職対象
https://www.chunichi.co.jp/article/176961
週休3日制で何が変わる?休みが増えるメリット・デメリット
https://career.joi.media/tips/2020/11/06/24138/
週休3日制に賛成?反対? 東芝の模索
https://www.nhk.or.jp/ohayou/biz/20200701/index.html

295 :名無しさん@お腹いっぱい。:2021/04/20(火) 16:39:52.31 .net
SSDがいっぱいになってきたのでfindで各binを周りfileが吐いたリストをunstripped(だったか?)でgrep&stripするスクリプト書いた
半分くらいになるのなこれ…
今の所不具合は出てないからヨシ
おすすめ

296 :名無しさん@お腹いっぱい。:2021/04/20(火) 16:48:14.77 .net
>>290
ubuntuだけどbashからpwsh -cで便利なツールとして使うのがベスト
多少最適化されてそうなapt提供のプレコンパイル版でも60MiBあるから配布時依存に加えるのは厳しいのが悩み
私的ハックにはすごく重宝

297 :名無しさん@お腹いっぱい。:2021/04/20(火) 16:53:51.68 .net
>>289
`をエスケープに選んだのは英断だと思う
m4と協調させようと思うと壊れるけど、まあm4のクオートは簡単に変えれるし満足

298 :名無しさん@お腹いっぱい。:2021/04/20(火) 16:55:18.39 .net
>>295
golang製のバイナリってstripすると壊れるんじゃなかったっけ

299 :名無しさん@お腹いっぱい。:2021/04/20(火) 17:07:12.66 .net
>>298
マジかー!でも何がgoとか把握してない…
内蔵HDDの方はテラ余裕なのでそっくりコピーしてある、万が一あってもそっちからブート&コマンド全て使えるから問題起きてからでもいいかな…

300 :名無しさん@お腹いっぱい。:2021/04/20(火) 18:04:12.33 .net
学習コスト高そうだから何でも賢くキャストしてくれるキャスト器として使ってるわ
[xml]'<foo>...'くらいのカジュアルユース
年だからjqとか付いてけないしjsonもキャストして.付けてるタブ補完連打でアクセス
ただの型コレクションとして気兼ねなく使えばいい

301 :名無しさん@お腹いっぱい。:2021/04/21(水) 20:07:40.11 .net
>>300
歳のせいにするな。お前の能力の問題だ。

302 :名無しさん@お腹いっぱい。:2021/04/21(水) 22:14:14.03 .net
噂のpwsh試してみたけど、とりあえずコマンドライン作業中の電卓代わりにはpythonよりはいいな
子シェルだからパス通ってて、普通に演算子と数学関数が下拵え無しで使えるってだけだけど
64KBと打つと65536を返してくるのは遊び心かな?

まあスレ違いだねごめん

303 :名無しさん@お腹いっぱい。:2021/04/21(水) 22:37:37.09 .net
電卓代わりでbc/dc思い出して遊ぼうと思ったら今時のlinuxにはdcはいってないのね
頭の体操にいいのに残念

304 :名無しさん@お腹いっぱい。:2021/04/22(木) 09:18:28.19 .net
普通パッケージぐらいは用意されていて入れれば入るんじゃない?
deb系なら apt-get install dc で使える

305 :名無しさん@お腹いっぱい。:2021/04/22(木) 18:02:08.57 .net
LLのREPL使えばええやん

306 :名無しさん@お腹いっぱい。:2021/04/25(日) 11:29:37.47 .net
for i in "予定1" "予定2" "予定3"
do
[ $i = "予定1" ] && echo "予定1"; sleep 3
[ $i = "予定2" ] && echo "予定2"; sleep 3
[ $i = "予定3" ] && echo "予定3"; sleep 3
done

307 :名無しさん@お腹いっぱい。:2021/05/01(土) 09:40:38.84 .net
今日のIDすごいwww

308 :名無しさん@お腹いっぱい。:2021/05/02(日) 22:37:50.92 .net
しらんがなー

309 :名無しさん@お腹いっぱい。:2021/05/03(月) 22:39:37.02 .net
シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?

310 :名無しさん@お腹いっぱい。:2021/05/04(火) 00:29:14.02 .net
>>309
そもそもCGIはすでに廃れてるって知ってる?

311 :名無しさん@お腹いっぱい。:2021/05/04(火) 00:30:10.82 .net
今どき本格的なサーバー側アプリをCGIで作るなんてないわけで
まあ簡単なツールぐらいならやるかもしれんけどさ

312 :名無しさん@お腹いっぱい。:2021/05/04(火) 01:58:13.24 .net
>>311
知らんのだがCGI以外でどう処理してるの?ジャバスクリプト?

313 :名無しさん@お腹いっぱい。:2021/05/04(火) 07:10:50.01 .net
>>312
WebアプリケーションフレームワークがWebサーバ機能を持っていて、フロントエンドのWebサーバからリバースプロキシして使うのが多いかな。
だからWebサーバとアプリケーションの接続インターフェイスと言う感じじゃ無いんよ。

314 :名無しさん@お腹いっぱい。:2021/05/04(火) 17:00:00.58 .net
えっ、そうなの?
perlじゃ無くCGIがオワコンで、マトモwebサービス作成にはもう使われ無いのね。

315 :名無しさん@お腹いっぱい。:2021/05/06(木) 02:07:50.66 .net
perl自体がオワコンかどうかの話は別として歴史の話をすると

初期はウェブサーバー+perlスクリプト、つまりCGIでウェブシステムが作られていた
もう2000年とかその頃の話よ。とほほのなんとかとかKentなんとかとかが幅を利かせていた
当時のプロ(ホームページ制作会社)でもそういったCGIを使っていた時代

その後はPHPが登場したが、これはウェブサーバーにPHPをモジュールとして組み込む
mod_phpが利用されていた。アクセスのたびにperlスクリプトを呼び出さないから速い
同じようにmod_perlというのもあった。
この頃のプロといえば自社でサーバーを保守管理するウェブサービス会社だったかな

その後から現在はアプリ自身でウェブサーバーとして起動するようになった
RailsとかPythonとかはそれが主。もちろんphpでもperlでもこの仕組が使える
クラウドの時代のプロのシステムはほぼこれ。もちろん今もホームページ制作会社はあるけど
ウェブサービス作ってる会社ってもうこんな感じじゃないでしょ?

アプリにウェブサーバーが内蔵されてると言っても、それはアプリに最適化されていて
静的コンテンツを配信するのには適していないから
>>313のいうように前段に普通のウェブサーバー(nginxやapache)を配置して
アプリ用のURLだけリバースプロキシでWebフレームワークにわたす仕組み

シェルスクリプトは、ブラウザにモジュールとして組み込んだり
シェルスクリプト自身をウェブサーバーにすることはできないからCGIオンリーで使うしか無い
と思ったらmod_bashなんてあるのなw

まあアクセス数が少ない個人用のシステムとか、特定のサーバーからアクセスしない
死活監視用のエンドポイント程度になら使っても良いんじゃね?

316 :名無しさん@お腹いっぱい。:2021/05/06(木) 11:37:17.18 .net
ネタかなんかなの?このくだり

317 :名無しさん@お腹いっぱい。:2021/05/07(金) 04:02:34.96 .net
いや、マジレスだろ。

318 :名無しさん@お腹いっぱい。:2021/05/07(金) 09:52:15.00 .net
時系列はおかしいけども、仕組みとしては大体合ってるし、いいんじゃない?

319 :名無しさん@お腹いっぱい。:2021/05/08(土) 11:58:10.94 .net
間違ってると言うやつほど
どこが間違っているかを言わない

320 :名無しさん@お腹いっぱい。:2021/05/08(土) 19:01:34.99 .net
しかしこれは CGI が使われなくなったと言われれば違和感はある Web サーバーがリバースプロキシに変化してアプリが Web サーバーを持ったに過ぎないのだろう

CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな

321 :名無しさん@お腹いっぱい。:2021/05/09(日) 02:29:54.79 .net
>>320
アプリケーションにHTTPヘッダを環境変数で渡す方法などを定めたものがCGI、だからInterfaceなの。
この方法で渡していないならそれはCGIではない。

322 :名無しさん@お腹いっぱい。:2021/05/09(日) 08:40:11.68 .net
もともとリバースプロキシの機能はウェブサーバーにあったのだから
どちらかと言えばウェブサーバーをリバースプロキシだけに使うように
使い方が変化してって言う方が適切だね

ちなみに開発時だとウェブサーバーはあまり使わない
ウェブサーバーとしての機能や性能は必要ないので
アプリ内臓の簡易ウェブサーバー機能で十分だから

323 :名無しさん@お腹いっぱい。:2021/05/09(日) 08:52:57.10 .net
>>320
> CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
一番の違いはアプリが常駐しているかどうか

CGIはアプリが常駐して無くてアクセスのたびにコマンドを実行する
このコマンドを実行するっていうのはかなり重い処理なのでパフォーマンスが出ない

特にシェルスクリプトなんか外部のコマンドを組み合わせて処理するものだから
1アクセスでシェルスクリプト本体の実行の他に
sedコマンド+grepコマンド+awkコマンド+jqコマンド・・・みたいになるから
Perlで作るよりも確実にパフォーマンスが悪くなる。Perlよりも悪い選択
それに対してCGIじゃない仕組みはサーバーマシン起動時に1回コマンドを起動するだけ

もし誰かに、これからのCGIはシェルスクリプト!シェルスクリプトでもこれだけの速度が出る!って
郵便番号から住所を検索するデモをみせてシェルスクリプトでシステム開発させようと洗脳する組織団体にそそのかされていたら
それアクセスが多い時にパフォーマンス出ますか?他の言語とベンチマークして比較していいですか?って聞いたら良いよ
郵便番号のデータなんてたかだか十数MBしかないしSSD使ってりゃ0.01秒未満で読み込めるのは当たり前
そんな低負荷なデモを数回見せた程度でパフォーマンスの検証なんてできやしない

324 :名無しさん@お腹いっぱい。:2021/05/09(日) 11:14:52.20 .net
>>323
fastcgiってcgiと呼んじゃダメなん?

325 :名無しさん@お腹いっぱい。:2021/05/09(日) 11:52:38.01 .net
>>324
FastCGIはCGIの環境変数や標準入出力の内容をカプセル化してsocketで通信するように定められているから無関係ではないんだけど、
環境変数とか標準入出力を使っているわけじゃないからやはりCGIでは無いと思うよ。

326 :名無しさん@お腹いっぱい。:2021/05/09(日) 14:19:11.63 .net
そういやFastCGIなんて技術もあったな
あれも「プロセス起動が遅い」という問題を
プロセス終了をさせずにプロセスを使い回すことで
解決する技術なんだよな

シェルスクリプトでそれがやれるかっつーと無理だろうな
いやwikiによればhttps://ja.wikipedia.org/wiki/FastCGI
名前付きパイプもサポートしてるようだからから不可能じゃないのか?

でもまあシェルスクリプトから呼び出すコマンドは
どちらにしろプロセス起動になるわけで
シェルスクリプトで全部実装するならまだしも
普通のシェルスクリプトではあまり効果がないだろうな

327 :名無しさん@お腹いっぱい。:2021/05/09(日) 14:26:02.10 .net
英語だし読む気はないけどなんかそういう技術があるみたいだw

FastCGI shell script
https://stackoverflow.com/questions/4685045/fastcgi-shell-script
ここの Look at "Writing agents in sh: conversing through a pipe"

まあ一般的にシェルスクリプトでFastCGIは無理(無意味)やでって書かれてるようだね

328 :名無しさん@お腹いっぱい。:2021/05/09(日) 14:40:26.25 .net
んでさ>>309に聞きたいんだけど

> シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?

ってどういう流れで誰に聞いたの?

二十年ぐらい前にコンピューターにちょっと詳しいだけの高校生や大学生の
会話で出てきた話だってのならわかるけどさ
今のウェブ開発ではCGIという単語自体でてこない

329 :名無しさん@お腹いっぱい。:2021/05/14(金) 08:14:28.21 .net
>>328
年寄りと話すと、API叩くことをCGI呼び出すと表現するよ

330 :名無しさん@お腹いっぱい。:2021/05/17(月) 12:58:38.74 .net
アクセス数が少なければ今でもcgiで十分。

331 :名無しさん@お腹いっぱい。:2021/05/17(月) 19:57:40.30 .net
アクセス数少ないのが前提w

332 :名無しさん@お腹いっぱい。:2021/05/17(月) 21:14:15.17 .net
知り合いだけのサイトもありますし

333 :名無しさん@お腹いっぱい。:2021/05/18(火) 00:26:19.32 .net
>>332
仕事では使い物にならないって意味だよ

334 :名無しさん@お腹いっぱい。:2021/05/18(火) 00:27:32.81 .net
レガシーシステムの改修でもないかぎりCGIなんて出てこないし
新規でCGIとかいい出したら、そんな会社は切り捨てた方が良い

335 :名無しさん@お腹いっぱい。:2021/05/18(火) 09:35:06.09 .net
PHP fpm ってよく使われてるように思うけど技術的には Fast CGI なんでしょ?

336 :名無しさん@お腹いっぱい。:2021/05/18(火) 12:12:30.96 .net
cgiスレになって無いか?

337 :名無しさん@お腹いっぱい。:2021/05/18(火) 14:51:57.87 .net
0埋めした2桁数字文字をdeclare -iの変数に入れると時々エラーになるので
ぐぐったら0埋め数字は8進数扱いって、何か面倒だなぁ...

338 :名無しさん@お腹いっぱい。:2021/05/18(火) 16:12:30.34 .net
頭0は8進数ってC言語とか昔から使われてるけど
最近の言語は頭0を8進数とみなさないように変わってきてる気がするね

2桁とわかってるならdeclare -i i="${var#0}"でいけるよ
そうでない場合はdeclare -i i="10#$var"でいけるかな
bash以外だとダメかもしれんけど

339 :名無しさん@お腹いっぱい。:2021/05/19(水) 02:39:42.52 .net
ありがとうございます。
expr でどうにか凌ぎました。

340 :名無しさん@お腹いっぱい。:2021/05/19(水) 09:22:05.13 .net
exprは遅いぞ

341 :名無しさん@お腹いっぱい。:2021/05/19(水) 09:42:12.88 .net
遅いけど、どんな環境でも

342 :名無しさん@お腹いっぱい。:2021/05/19(水) 10:08:35.53 .net
だからexprに一切メリットないって

343 :名無しさん@お腹いっぱい。:2021/05/19(水) 18:39:51.53 .net
計算するときにコンソールで expr 以外に何か良い方法ありますか

344 :名無しさん@お腹いっぱい。:2021/05/19(水) 18:40:31.58 .net
$((1+2)、bc、dc
なんでもあるやろ

345 :名無しさん@お腹いっぱい。:2021/05/19(水) 22:49:05.88 .net
awkで計算しろ

346 :名無しさん@お腹いっぱい。:2021/05/20(木) 08:04:37.20 .net
>>328
シェルスクリプトでCGIとかきくとユニケージを思い出すな
あ、脱ケージだっけwww

あれほど酷い開発手法はないと思うね

347 :名無しさん@お腹いっぱい。:2021/05/20(木) 09:04:51.56 .net
>>346
いや、あれオモロいで。
ワンライナー繋げてwebアプリ。
小規模社内オフィス用に最適w

348 :名無しさん@お腹いっぱい。:2021/05/20(木) 09:10:53.80 .net
誰かPOSIX原理主義者とユニケージの関係教えてくれ

349 :名無しさん@お腹いっぱい。:2021/05/20(木) 10:27:21.13 .net
どちらも秘密主義だからな。俺も少し興味があるが
非公開の独自技術には興味なくて裏で糸を引いているやつらに興味がある

wikipediaを見る限りUSP研究所と金沢大学が手を組んでるっぽい
USP研究所がユニケージという開発手法で怪しげなビジネスをしていて
それにコネかなんかで金沢大学が手を貸して箔をつけてる感じ
もしくは金沢大学関係者が作ったのがUSP研究所なのかもな

POSIX原理主義者はUSP研究所もしくは金沢大学の関係者だと思われる
構成員の中の幹部クラスで多分3人ぐらいしかいない
ただ引っかかるのはユニケージとPOSIX原理主義が矛盾しているという点
POSIX原理主義はPOSIXのコマンドだけを使うと言ってるがユニケージは独自コマンドを押し付けている
ユニケージ=シェルスクリプト主義でそこから分岐したのが原理主義なのかもしれないな

350 :名無しさん@お腹いっぱい。:2021/05/20(木) 10:30:31.60 .net
>>347
ネタとしてのオモロイだなw
東京ハンズで大規模対応でクラウドに移行して
それに対応できなくなって今では闇とか負債と言われてるんだっけな

https://www.hands-lab.com/tech/t5600/
ここにはBashのフレームワークってかいてあるな
BashってことはやっぱりPOSIX原理主義とも違うな

351 :名無しさん@お腹いっぱい。:2021/05/20(木) 11:00:28.58 .net
>>350
完全菜食と牛乳、卵は許すのような違いか。

ユニケージにベンダーロックインされて地獄を見るw
大規模化の可能性のある場合は、このネタシステムを使ってはいけないな。

352 :名無しさん@お腹いっぱい。:2021/05/20(木) 11:19:43.21 .net
POSIX原理主義者「シェルスクリプトは遅くない!なぜなら郵便番号から住所を検索なんで一瞬で探せる!」

※CSVファイルは解凍した状態でたったの12MBです。

どんだけ小規模低負荷前提で吠えてるのかとw

353 :名無しさん@お腹いっぱい。:2021/05/20(木) 16:03:03.24 .net
sql文を組み立てるシェルスクリプトを書きます

354 :名無しさん@お腹いっぱい。:2021/05/21(金) 21:36:49.34 .net
シェルスクリプトは連想配列が使えるから
原理的には高速
オーバーヘッドがない分
他の言語より早い場合が多いと思う
保守しにくいけど

355 :名無しさん@お腹いっぱい。:2021/05/21(金) 21:43:40.33 .net
オーバーヘッドって何のことだ?

356 :名無しさん@お腹いっぱい。:2021/05/21(金) 22:08:05.49 .net
ファイルサイズに依存するオーバーヘッドはメモリ上に載せる部分じゃろ?
全部載せてしまえば定数時間のはずだけど、上限とかなかったっけ

載せないで逐次処理なら固定長レコード上に添字でジャンプのデータベースには勝てない

載せても多分勝てないけど

357 :名無しさん@お腹いっぱい。:2021/05/21(金) 22:16:12.19 .net
英辞郎くらいなら適当に整形してgrepで引いてるな、5秒くらいかかるが…

毎回読み込まず、&で起動して配列抱えたままsleep、named pipeをポーリングてもらうか

358 :名無しさん@お腹いっぱい。:2021/05/21(金) 22:31:20.56 .net
前から舐めるから時間かかってるだけだな、見出し語辞書引きなら既にソートされてるので人力二分探索が楽か
イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる

359 :名無しさん@お腹いっぱい。:2021/05/21(金) 23:18:21.57 .net
>>354 >>356
問題はメモリ(連想配列)に載せた後
1件のデータを引いたら、そのまま終了してメモリを破棄するしかない
つまり1件検索する毎に全データを連想配列に読み込むw

360 :名無しさん@お腹いっぱい。:2021/05/21(金) 23:19:33.97 .net
>>358
普通にSQLiteでも使ったほうが良いのでは?w

361 :名無しさん@お腹いっぱい。:2021/05/21(金) 23:33:05.93 .net
>>354
> シェルスクリプトは連想配列が使えるから原理的には高速
モダンな言語で連想配列使えない言語ってそんなにないと思うが

362 :名無しさん@お腹いっぱい。:2021/05/22(土) 00:00:45.90 .net
POSIX準拠だと連想配列ないけどねw
eval使えばそれっぽいことはできるけど

363 :名無しさん@お腹いっぱい。:2021/05/22(土) 00:17:17.67 .net
>>357
一つのプログラムを常駐させ、もう一つのプログラムから問い合わせるってこと?
それってシェルスクリプトだけで実現できるの?

364 :名無しさん@お腹いっぱい。:2021/05/22(土) 02:03:30.66 .net
>>360
普段はdico(d)とかdict(d)使ってるよ、この用途には特化してる分sqlite3なんかより遥かに高速で優れてる

ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
英和の出来合いdbってdict.orgとかでも提供されてないしな
テキスト形式の単一辞書(~100MB)をgrep、数秒のラグなら十分許容できるだろう

取り敢えず事足りればいいんだよって思想です

365 :名無しさん@お腹いっぱい。:2021/05/22(土) 02:08:46.46 .net
>>363
デーモンなんかの実装は大体そうでしょ
mkfifoでファイルのように読み書きできるパイプ作れるでしょ?
無限whileループの中で1秒程度sleep、パイプに書き込まれてるかreadでチェック(所謂原始的なポーリング)

366 :名無しさん@お腹いっぱい。:2021/05/22(土) 02:29:18.62 .net
追伸>>365
プロセスの関係について答えてなかった
クライエントがコマンドライン引数を単にnamed pipeへ書き込むだけのシェルスクリプトでいいです
というか必須でないです
ぶっちゃけやることはecho query >fifo

それを$eiji queryと書けると分かりやすいというだけですね

367 :名無しさん@お腹いっぱい。:2021/05/22(土) 02:36:55.49 .net
老婆心かもしれないけど、常駐シェルスクリプトなんて何ら特別なものでないよ
常駐しないシェルスクリプト=exitの記述が存在している、あるいはeofに達するもの
常駐できるシェルスクリプト=signalやらで殺さなければexit/eofに達しないモノです

368 :名無しさん@お腹いっぱい。:2021/05/22(土) 02:44:59.50 .net
shを常用するやつは居るが
流石にed常用するやつは居らんな

369 :名無しさん@お腹いっぱい。:2021/05/22(土) 02:59:57.65 .net
edは生の改行文字食わせる必要あるし、sedのように;で区切れないから、コマンドラインから使いにくい…

printf %s\\n cmd1 cmd2 ...をeasyedとか名付けておけば、easyed cmd1 cmd2 ...で使いやすくなるね

ただ、sedやawkでカウンタ設定して何行後の処理を指定するような処理を書いている事に気づいたら、そういう処理はedの領分
前後の相対アドレスを+nのように簡潔に指定できる

あと、diffがedのコードを吐けるというのもあって、それをテンプレにして弄るとバッチ的な処理はより早く書けると思う

370 :名無しさん@お腹いっぱい。:2021/05/22(土) 05:16:06.47 .net
>>366
問題はデーモン側じゃないよ。
起動するのも、named pipeに書き込むのもそれはできる
問題は、その後どうやって情報を受け取るのか?って話

371 :名無しさん@お腹いっぱい。:2021/05/22(土) 05:16:37.76 .net
× 起動するのも
○ 常駐するのも

372 :名無しさん@お腹いっぱい。:2021/05/22(土) 05:19:29.71 .net
もっと具体的に言えば、POSIX準拠だと
シェルスクリプトは双方向パイプを使えない

373 :名無しさん@お腹いっぱい。:2021/05/22(土) 06:08:57.28 .net
そこは似非精進の生臭坊主で行こう

374 :名無しさん@お腹いっぱい。:2021/05/22(土) 06:15:51.15 .net
>>358
> イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
前方一致検索ならそれでもいいと思うけど、中間一致や全文検索だと結局すべてのファイルをgrepしないといけない

SQLiteなら全文検索もあるようだ
http://ytyaru.hatena(ドット)com/entry/2017/07/19/000000

>>364
> ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
インデックスつけるのが面倒なんでしょ?
SQLiteならテーブル作ってデータを入れていくだけだよ

375 :名無しさん@お腹いっぱい。:2021/05/22(土) 06:20:59.68 .net
>>374
原理主義者周辺にはNoSQLってこだわりがある。

376 :名無しさん@お腹いっぱい。:2021/05/22(土) 07:32:30.98 .net
原理主義者はNoSQLに何を使ってんの?

377 :名無しさん@お腹いっぱい。:2021/05/22(土) 07:33:00.54 .net
MongoDBとか?

378 :名無しさん@お腹いっぱい。:2021/05/22(土) 07:58:28.04 .net
使えるならnamed pipeが行儀良いと思うけど、ポーリングさせるならただのファイルでも環境変数でも何でもいいんでね
あんまりSSDへ頻繁に書き込みたくないなら環境変数か

個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら、ファイル分割で必要十分だろ
メモリも今時100MBくらい一時占めるのは有りだとしても、常駐させるとなるとチリツモ

379 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:03:33.44 .net
>>378
いや、ファイルや環境変数を使うというのはどうでも良くて
それらをどう使って実現するのか?って話だよ。

あなた、自動運転を実現するにはどうしたら良いか?って言う話に
AIを使えばできるんです。みたいなことしか言ってないよw

380 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:04:29.68 .net
定期的に読みに行けばいいだけじゃないの?

381 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:05:46.31 .net
> 個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら
個人用途であれば、その程度でも構わないってことには反論はしないけどね
C10K問題(クライアント1万台問題)が発生するような場合には、それじゃ使い物にならないけど

382 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:08:59.98 .net
>>380
もしかして

1. コマンド実行
2. 特定のディレクトリにファイルを作る
3. デーモンが1秒おきにそのディレクトリを監視している
4. デーモンはファイルを見つけたら処理をして新しく結果ファイルを作る
5. 1のコマンドは結果ファイルができるまで待ってて見つけたらその内容を表示する

って話?

383 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:10:30.45 .net
この方法だと環境変数は無理っぽいな

384 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:12:00.68 .net
・パイプで繋ぐと早い。
・標準入力を<でリダイレクトするより、パイプを通じてcatで流し込んだ方が早い。

経典に書いてあるw

385 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:17:10.40 .net
一つのnamed pipeに複数プロセスから同時に書き込んでも
データは混ざらないんだっけ?

386 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:18:16.07 .net
手動で排他制御せなあかんやろ

387 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:20:44.48 .net
ああ、ロックファイル使うのかw

388 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:37:55.55 .net
デーモンがメモリにデータを蓄えておくって
原理主義者的にはどうなんだろう?w

389 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:47:09.09 .net
>>382
おれはそう解釈するけど
結果もクエリも数行だろうから、環境変数の方がいい

標準sleepは1s単位なので微妙に要件満たせないけど、適当な代替コマンド用意できないなら2秒になってしまうが…
msec sleep便利よ

サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す

検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう
フォアグラウンドのクライアント側は$query設定して1s sleep、(既に設定されているはずの)$responseを標準出力へ書き出す

完了フラグ立てるとか面倒な事やるのはシェルスクリプトの領分超えてると思うわ
$responseが空ならエラー吐いて落とす
何回か走らせてみて、時間は適宜調整で決め打ちが楽だろう

390 :名無しさん@お腹いっぱい。:2021/05/22(土) 08:51:16.35 .net
古典技術ポーリング

391 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:05:22.83 .net
>>389
> 結果もクエリも数行だろうから、環境変数の方がいい

いやいや環境変数は子プロセスには伝搬するけど
デーモンとコマンドのように親子関係にないでは
やり取りできないんだよ

392 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:07:41.80 .net
ダサいけどtmpファイルか

393 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:07:47.64 .net
> サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す
なんつーかシェル変数(環境変数)をグローバル変数とでも勘違いしてるような書き方だな

サーバースクリプトが$responseに書き出しても
それは他のプロセスからは見えないんだよ

394 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:15:02.13 .net
> 検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう

それだと中間一致には対応できない

395 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:27:09.09 .net
>>393
たしかに
クライエントから起動するわけじゃないから、コマンド置換やsourceも使えないし、PID把握して/proc以下のfdに書き込む必要あるのか
readするって言ってる>>365の方が多分俺より賢いな

面倒だからやっぱ一時ファイルで…

396 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:33:01.34 .net
直接の親にならdeclareの拡張や文字列evalシェル関数で書き換えられるけど、兄弟の環境は変える手段無いのか

397 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:40:41.97 .net
兄弟でもメインループの中でexport hoge=hageをファイルに書き出して互いにsourceすれば共有できるぞ
結局一時ファイル作ることになるから、それを許容するなら全部一時ファイルでやり取りするか、
それを嫌うならpsでPID特定して直接リダイレクト

398 :名無しさん@お腹いっぱい。:2021/05/22(土) 09:43:36.67 .net
シェルスクリプトでTCPとかUDPとかどうです旦那

399 :名無しさん@お腹いっぱい。:2021/05/22(土) 10:40:20.45 .net
シェルスクリプトから離れてごめんだけど、dicodはちゃんとした辞書形式(索引-シーク位置)にコンパイルしなくても受け付けてくれたはずだよ、dictは使ってないので分からん
emacsの何とか形式ってやつがマニュアルに記載あったはず、単なる見出し+テキストのプレーンテキスト
マニュアルが激しく読みにくいけどsedあたりで頑張ってみたら

まあ索引付けないならgrepより速くなる保証もないわけだけど
曖昧検索や部分一致、逆引き、履歴等々色々高度な事もできるので、例え遅くてもやる価値はあるかと

400 :名無しさん@お腹いっぱい。:2021/05/22(土) 10:54:30.10 .net
これね
https://puszcza.gnu.org.ua/software/dico/manual/dico.html#outline

PDICクライアントは
見出し セパーレータ テキスト(改行等エスケープ) セパレータ 関連語等のメタデータ
でエクスポートできたはずなので、sed等でセパレータ後にタグ前置、次いでセパレータを改行に置換すれば大体おんなじ構造

下の方見るとpythonの辞書(ハッシュ実装)も受け付けるようなので、もしパフォーマンスに不満があれば次に試すと良さそう

401 :名無しさん@お腹いっぱい。:2021/05/22(土) 11:03:27.84 .net
あー
descriptionとinfoタグは辞書についてのもので、項目はヘッダと本文のみ、メタデータは対応してないか
まあ本文に含めてしまって、逆引きで代替できると思う…

402 :名無しさん@お腹いっぱい。:2021/05/22(土) 11:18:26.85 .net
>>395
> PID把握して/proc以下のfdに書き込む必要あるのか
え?そんなことできるんか?
/proc以下のファイルは調べることが出来るわけで
そんなこと出来たら不正なデータをインジェクションできてしまう気がするんだが

403 :398:2021/05/22(土) 11:22:16.30 .net
マジか・・・。できたわw

404 :398:2021/05/22(土) 11:23:12.33 .net
あー、でもprocが必要だからmacOSじゃ無理?

405 :398:2021/05/22(土) 11:31:23.11 .net
あ、勘違いっぽい。こんな感じで1〜10の頭に>をつけて出力させてる間に
seq 10 | { echo $BASHPID; while read a; do echo "> $a"; sleep 5; done; }

他の端末から echo aaa > /proc/<PID>/fd/1 ってやったら
確かに 1〜10 の間に出力が割り込まれたけど頭に>はついていなかった

406 :名無しさん@お腹いっぱい。:2021/05/22(土) 11:33:56.66 .net
>>402
プラットフォームによって違うと思うけど、ubuntuなら/proc/PID/fd/0|1|2、何だったかのunixではstdin|out|errが各プロセスのfile descriptorへのシムリンクになってるはず(/dev以下、/tmpとか)
自分の起動したプロセスなら当然rw権限はある、無ければそもそも入出力できないよ
システムに関わるデーモンなんかはroot権限で走ってるはずなので、セキュリティ的に問題は起きない

407 :398:2021/05/22(土) 11:40:45.06 .net
連投ごめん。標準入力のファイルディスクリプタは0だった

んで、すこし変えてこんなふうにして実行してみたんだけど
for i in $(seq 10); do sleep 5; echo "$i"; done | { echo $BASHPID; while read a; do echo "> $a"; sleep 5; done; }
本当に他端末から出力の間に割り込ませられたよ・・・

seq 10 してるから 10 個の数字が出力されると思いきや
それ以上の適当な文字を出力させられる。
これセキュリティ的に大丈夫なん?

408 :398:2021/05/22(土) 11:44:28.31 .net
うーん、自分しか読み書きできないから大丈夫・・・なのか?
それにしてもコマンドの出力結果の間に出力を割り込ませられるとはwww

409 :名無しさん@お腹いっぱい。:2021/05/22(土) 11:52:44.59 .net
echo helloでコンソールに文字が出るのも、キーボードから入力できるのも、ファイルをディスクに書き出すのも、シェルが暗黙のうちにそのデバイスファイル群を繋ぎ合わせてる結果
なんら特別な事じゃないよ

410 :398:2021/05/22(土) 11:57:08.22 .net
proc使えば別プロセスの環境変数も読み込める・・・と思ったら起動時の環境変数か。
ってことは別プロセスから新たに子プロセスを起動すれば
まあいろいろできそうだけど、どっちみちprocが必要なんだよな

>>409
それはそうだけどproc=カーネルがあるプロセスの情報を
他のプロセスに公開してるからできることだよね?

macOSとかはprocがないから、内部的にはデバイスファイル郡を
つなぎ合わせていたとしてもそれが他のプロセスからは見れないはず

いずれにしろPOSIX標準ではなさそう

411 :名無しさん@お腹いっぱい。:2021/05/22(土) 12:12:52.06 .net
そもそもカーネルやシステム中核プロセスが不可視であるべき、ってのは常識なのか?

ディレクトリの閲覧権限はxとwで制限できるから、そりゃ隠れてるのも居るかもしれないけどさ

Macは使わないので分からんが、windowsだってタスクマネージャ開けばユーザー権限で干渉不可なシステムプロセスがゾロゾロ動いてるの見えるけど

412 :名無しさん@お腹いっぱい。:2021/05/22(土) 12:37:32.55 .net
OpenBSDでは5.7からprocfsは削除された

https://www.openbsd.org/plus57.html
> Deleted procfs (always suffered from race conditions and is now unused).
procfsを削除しました(常に競合状態に悩まされ、現在は使用されていません)

413 :名無しさん@お腹いっぱい。:2021/05/22(土) 12:40:36.82 .net
UNIXの全てがファイルという考えは面白かったが
本当に全てがファイルであるというは正しい考えなのだろうか?

414 :名無しさん@お腹いっぱい。:2021/05/22(土) 12:58:05.17 .net
読み書き出来るならファイルと見做せるんじゃね
環境変数なんかは読み書きできるけどファイルじゃないね
cpuは一応procにcpuinfoあるけど、別にフルアクセスできるわけじゃなし形だけね
lsofやpsで情報が得られるが、lsでアクセスできないならファイルとして抽象化されていない、でいいのかな(procfsが無いならlsできない、でいいの?)

それならOSのレベルで抽象化しなくても、シェルのレベルでファイルシステムのように見せる事もできる
windowsがそうだ)
cmdの振る舞いを見るとOSレベルでの一貫性は皆無だけど、pwshからはプロセス、レジストリ、環境変数まで全部ファイルシステムとして読み書きできるわけで

415 :名無しさん@お腹いっぱい。:2021/05/22(土) 13:02:29.53 .net
> (procfsが無いならlsできない、でいいの?)
無理やりlsで表示させるんじゃなくて
別の形のコマンドを作るべきじゃなかったのか?ということ

416 :名無しさん@お腹いっぱい。:2021/05/22(土) 15:40:34.99 .net
>>412
race conditionって具体的に何だろ、デバイスファイルに読み書き競合、あるいは排他制御でブロッキング頻発か

event pollみたいな仕組みはlinux固有だっけ?
どう上手くやろうがfdのやりくりをする方式はスケーラブルじゃないと思ってる
多重I/Oでパフォーマンス向上とか言ってOSに過剰なfd要求コール送り続けてるんだから

417 :名無しさん@お腹いっぱい。:2021/05/22(土) 17:08:31.51 .net
>>416
たぶん情報を取得したが取得中にリアルタイムで情報が変わってしまい
矛盾した情報になってしまったとかじゃね?
もしくは複数のファイルから取得した情報が矛盾してしまうとか

情報を取得してからそれを利用するまでの間に時間があるから
取得した情報が信用できないというのは当然として少なくとも取得した時点では
それらの情報は矛盾しないようにスナップショットである必要がある

418 :名無しさん@お腹いっぱい。:2021/05/22(土) 22:12:21.51 .net
例えば歯抜け連番名ファイルを詰めて連番にする場合
for f in renban* ; do
mv $f 新ファイル名
done
とやると、該当ファイルが0個でもループ内の mv を実行しようとしてエラーになります。
ループ前に該当ファイルの有無のチェックが不要な方法はないでしょうか?

419 :名無しさん@お腹いっぱい。:2021/05/22(土) 22:12:33.00 .net
>>416
懐しいw
pollがSVRで、BSDがselectってやつかな?w
Linuxは両方使えたが、少くとも昔のLinuxカーネルでは実装はほぼ同じだったけどな…

420 :名無しさん@お腹いっぱい。:2021/05/22(土) 22:35:09.95 .net
>>418
たぶんrenban*がfに入るってるよね
モダンなシェルならsetで好きな挙動選べるよ
(bashならnullglobとかglobfailとか)

ただ、わざわざその一文の為にオプションいじくるよりは普通にチェックした方がいいと思うよ
たまにおまじない書き忘れて頭ひねったりするから

421 :名無しさん@お腹いっぱい。:2021/05/23(日) 06:00:13.67 .net
こんな感じかなあ?

set -- renban*
[ $# -eq 1 ] && [ ! -e "$1" ] && set --
for f in "$@"; do
mv $f 新ファイル名
done

でもまあ、ファイル名一覧を取得してからmvしてる間に
ファイルが別プロセスによって消されてリすることがあるから
どちらにしろmvがエラーになる可能性はあるんだよね

422 :名無しさん@お腹いっぱい。:2021/05/23(日) 10:42:49.61 .net
ls renban* | while read f;do mv $f 新ファイル名; done
だとループには入らないけど、ファイルがないときにlsがエラー吐くねw

find -maxdepth 1 -name "*.csv" | while read f;mv $f 新ファイル名;done
これでどう?w
> ファイルが別プロセスによって消されてリすることがあるから
↑もちろんこの問題は避けられないけどね。

423 :名無しさん@お腹いっぱい。:2021/05/23(日) 10:45:47.34 .net
どうせワンタイムだろうしあんまり細かいこと気にしてるとハゲるぞー

といいつつ
もしrenbanが何万にものぼるとして、globしてからmvに取り掛かるまでの時間差が気になるんだったら
findに-name 'renban*'を処理させ、アクションの逐次実行を指定する;を渡せば隙は(ほぼ)ないはず
-exec {} target$suffix \;
+を渡すと速いけどバッチ処理だからglobとおんなじ

424 :名無しさん@お腹いっぱい。:2021/05/23(日) 10:55:53.30 .net
>>423
find -maxdepth 1 -name "renban*" -exec mv {} 新ファイル名 \;
かw

そうだね、それが正解だw
(なんでもパイプで渡してしまう悪いくせを晒してしまった…w)

425 :名無しさん@お腹いっぱい。:2021/05/23(日) 10:57:03.17 .net
>>422
スルーしてほしいってのが要望のようだけど、対象指定をミスったなら失敗する方が健全だと思います

426 :名無しさん@お腹いっぱい。:2021/05/23(日) 11:15:08.17 .net
>>425
まあ、依頼主の要望を可能な限り叶えたまでさ。
あとは好みと状況でどちらでもお好きな方をw
ただ、この場合lsでやっつけてるけど、本当はlsの出力はそんなにあてにして
いいものではないので、気をつけて。
いろんな意味でfind -execの方が正統だよ。

427 :419:2021/05/23(日) 12:19:18.50 .net
shのglobはソート済みが保証されてたと思うけど、findはどうだったか自信がない…

誰か試せる人補足よろしく

428 :名無しさん@お腹いっぱい。:2021/05/23(日) 13:00:38.86 .net
ソートしてから逐次実行してるんなら期待してたアトミック性は無いねー

429 :名無しさん@お腹いっぱい。:2021/05/23(日) 13:14:58.68 .net
>>427
findはディスクに忠実にファイルシステム上の順番だね。
そして、globは確かにソートされてるようだ。
ちなみにlsもソートされるし、それはオプションで変えられる、と。
一応、環境書いとくと、Fedora33のbashにて

430 :名無しさん@お腹いっぱい。:2021/05/23(日) 13:36:53.66 .net
>>429
ありがとう
探索ツールである性質上もしやと思ったらやっぱりそうか
じゃあglob+ソートかlsだね
危なかった

431 :名無しさん@お腹いっぱい。:2021/05/23(日) 13:40:34.27 .net
globかlsのたypoです

432 :名無しさん@お腹いっぱい。:2021/05/24(月) 02:05:05.30 .net
414です
回答ありがとうございます。
ループ前チェックは何だか美しくないように思えたので(個人の感想です)
0個なら即doneに移る方法はないものかとお尋ねした次第です。

0個でも一度はループに入るという仕様が続いているのはきっと何か意味があるのでしょうね。

433 :名無しさん@お腹いっぱい。:2021/05/24(月) 08:05:21.35 .net
ループじゃなくて*の展開の仕様だよ
合理的に考えれば、展開を指示してマッチ無しならば0件にヒットしたとして何も返さないか空文字
展開が失敗したと考えてエラーのどちらかだろう
多分深い意味はないから気にすんな

434 :名無しさん@お腹いっぱい。:2021/05/24(月) 08:08:28.58 .net
いや気にしなきゃだめか
ココがヘンだよbshくらいの気持ちで構えてれば、案外可愛く思えてくるぞ

435 :名無しさん@お腹いっぱい。:2021/05/24(月) 09:50:48.81 .net
>>423
> どうせワンタイムだろうしあんまり細かいこと気にしてるとハゲるぞー
うっせーハゲ!

436 :名無しさん@お腹いっぱい。:2021/05/24(月) 10:20:26.93 .net
lsとglobがソートされるってどこに書いてあったっけ?
前に見た気がするけど英語の中から探すのめんどいw

437 :名無しさん@お腹いっぱい。:2021/05/24(月) 10:48:30.44 .net
globで見つからなかった時、検索した文字列を返すのは
おそらく安全側に倒したからだと思ってるんだがいい例が思いつかないな

例えばcmd renban* hoge.tar.gzだったら普通は引数が2個以上になると思うが
見つからない時cmd hoge.tar.gzとなって危険とか
もしくはエラーメッセージをわかりやすく出すのが目的だったりするのかな?

空ディレクトリでls renban*を実行した時

「renban*」という文字列を返せば、エラーメッセージは分かりやすい
> ls: 'renban*' にアクセスできません: そのようなファイルやディレクトリはありません

空文字を返せば、エラーメッセージは分かりにくい
> ls: '' にアクセスできません: そのようなファイルやディレクトリはありません

何も返さなければ、何も表示せず正常終了
・・・あ、これかw

空ディレクトリでない(file1 file2 file3というファイルが有る)場合renban*が
何も返さないとlsが実行されるからfile1 file2 file3と表示されるんだ
renbanなんたらを処理しようとしてるのに、関係ないファイルを処理してしまう。

438 :名無しさん@お腹いっぱい。:2021/05/24(月) 20:33:55.32 .net
一つでもあればループ内を実行して、(それ以上)無ければ抜ける。
だから、(最初から)無ければそのまま抜けて欲しいな、と。
該当するものが無いのだからループ内を実行するのは無意味だし。

439 :名無しさん@お腹いっぱい。:2021/06/06(日) 22:14:34.25 .net
標準出力の速度を制限したり、通信速度を表示するコマンドを探しています。どなたか知りませんか?

440 :名無しさん@お腹いっぱい。:2021/06/07(月) 00:11:53.58 .net
>>439
pvコマンド(Pipe Viewer)でどうよ

441 :名無しさん@お腹いっぱい。:2021/06/07(月) 11:25:09.09 .net
>>440
ありがとうございました!
 

442 :名無しさん@お腹いっぱい。:2021/06/15(火) 00:01:20.06 .net
sed の 's/foo/bar/'
スラッシュ直前の【s】って何の意味でしょうか?
g:global
i:ignore
のような意味ありますか?

またman以外でこのような略語を調べるサイトなどありますでしょうか?

443 :名無しさん@お腹いっぱい。:2021/06/15(火) 00:58:11.44 .net
>>442
substituteのs

info sedより
> 3.3 The s Command
> The s command (as in substitute) is (略)

444 :名無しさん@お腹いっぱい。:2021/06/15(火) 01:15:20.43 .net
>>443
ありがとうございます

445 :名無しさん@お腹いっぱい。:2021/06/15(火) 11:14:03.04 .net
edコマンドで気になってるのはv
versed subst?
でもversedって多分古語だしなあ…
exec grep -v "$@"にvrepと名付けることにした

446 :名無しさん@お腹いっぱい。:2021/06/15(火) 15:03:29.77 .net
>>445
grep の -v は --invert-match だから inVert substitute じゃねーの?

447 :名無しさん@お腹いっぱい。:2021/07/28(水) 19:08:57.09 .net
_数字列_数字列_数字列_を含む文字列から先頭の数字列だけを取り出したいので
前段階としてそれより前の部分を切り出すために
echo ${文字列%_*[0-9]_*[0-9]_*[0-9]_*}
としてみたのですが、
aaa_bbb_ccc_ddd_eee_123_4_567_xxxxx_123yyy_4f6_789c_zzz
の場合には aaa_bbb_ccc_ddd_eee ではなく aaa_bbb_ccc_ddd_eee_123 になってしまいます。
どうすればいいでしょうか?

448 :名無しさん@お腹いっぱい。:2021/07/28(水) 19:47:08.66 .net
どう言った用途に使うんでしょうかね

449 :名無しさん@お腹いっぱい。:2021/07/28(水) 21:32:13.47 .net
>>447
シェルの変数置換じゃなくて、sedで置換したほうがええやろ。
まっとうな正規表現が使えるしな。

450 :名無しさん@お腹いっぱい。:2021/07/30(金) 07:50:18.18 .net
>>447
そうなるように書いていますけど?

451 :名無しさん@お腹いっぱい。:2021/07/30(金) 07:51:44.84 .net
彼はsubstringの概念がないんでしょうかね。

452 :名無しさん@お腹いっぱい。:2021/07/30(金) 08:39:43.50 .net
任意個数の数字だけの塊をglobは表現できないので、お題の変換は無理

453 :名無しさん@お腹いっぱい。:2021/08/08(日) 22:00:16.40 .net
書き込めるかテスト

454 :名無しさん@お腹いっぱい。:2021/08/08(日) 22:07:53.75 .net
>>447
こんな感じでいけるんでね?前段階の話すっ飛ばして答えだけど
テストしてないので動かなくても知らん

isnum() {
  case "$1" in
    *[!0-9]*) return 1 ;;
    *) return 0 ;;
  esac
}
str="aaa_bbb_ccc_ddd_eee_123_4_567_xxxxx_123yyy_4f6_789c_zzz"
IFS="_"
set -- $str
while [ "$#" -gt 0 ]; do
  if isnum "$1" && isnum "$2" && isnum "$3"; then
    echo "$1"
  fi
  shift
done

455 :名無しさん@お腹いっぱい。:2021/08/08(日) 22:24:57.80 .net
>>449のいうように、sedで一行それも大したことない正規表現で済むな
シェルスクリプトだけという課題の制限でもなければ

456 :名無しさん@お腹いっぱい。:2021/08/09(月) 01:15:27.49 .net
シェルスクリプトで無理といった途端
シェルスクリプトの実装が出てきたんで
慌てて取り繕ったか?w

457 :名無しさん@お腹いっぱい。:2021/08/09(月) 01:42:06.59 .net
ねじ曲がりすぎ
そんな発想になるのは、お前>>454ぽいな

458 :名無しさん@お腹いっぱい。:2021/08/09(月) 13:03:23.04 .net
俺は面白いと思うぞ、やりたくないけどな

bashやzshならパターンの否定が使えるextglobオプション+%パラメータ展開を使うのが多分一番楽かと

459 :名無しさん@お腹いっぱい。:2021/08/18(水) 19:41:40.78 .net
藤林丈司

460 :名無しさん@お腹いっぱい。:2021/08/31(火) 05:29:27.62 .net
引数を表示するのに
echo $1
だけのスクリプトファイルを作って実行するのですが
なぜか引数が1&2等の場合にうまくいきません

461 :名無しさん@お腹いっぱい。:2021/08/31(火) 05:46:42.81 .net
そうなんですね

462 :名無しさん@お腹いっぱい。:2021/08/31(火) 11:29:04.37 .net
標準出力とエラー出力を引数にしたいってことループしないそれ

463 :名無しさん@お腹いっぱい。:2021/08/31(火) 11:54:53.66 .net
>>460
クォートしろ。
echo "$1"

464 :名無しさん@お腹いっぱい。:2021/08/31(火) 12:07:22.10 .net
単に
sh scriptfile.sh 1&2
ってやってしまってるだけじゃないの
呼び出す側の問題
echoで展開後に&が問題になることはないのでクォートしなくても問題にはならない。クォートした方がいいけど

465 :名無しさん@お腹いっぱい。:2021/09/01(水) 00:03:03.07 .net
>>464
クォートしろ。
sh scriptfile.sh "1&2"

466 :名無しさん@お腹いっぱい。:2021/09/01(水) 02:30:08.96 .net
そんなわかりきったことを
マウントとりたがりすぎ

467 :名無しさん@お腹いっぱい。:2021/09/01(水) 03:42:36.41 .net
>>466
マウントマウントうざ。
>>460には「わかりきったこと」ではないのに。

468 :名無しさん@お腹いっぱい。:2021/09/01(水) 11:21:33.57 .net
間違った指摘してたくせにw
何で常時偉そうにしなきゃならんのだかだが、自覚ないアホか

469 :名無しさん@お腹いっぱい。:2021/09/02(木) 16:02:37.40 .net
コマンド展開で質問。

echo $(...) | sed ...
みたいなスクリプトで、$(...)内のコマンドが失敗したとき、そこでエラー終了してほしいんだけど、ムリ?

set -eしても、これには効果がないもよう。

470 :名無しさん@お腹いっぱい。:2021/09/02(木) 17:36:39.83 .net
コマンド置換ではムリだねえ

471 :名無しさん@お腹いっぱい。:2021/09/02(木) 17:47:03.78 .net
>コマンド置換ではムリだねえ
コマンドの引数にあるのはね
コマンド置換でも変数に入れるだけなら終了ステータス返る/見れる=-eなら止まる。そっちはやってるとかあるだろうけど、いちおう

472 :名無しさん@お腹いっぱい。:2021/09/03(金) 12:16:10.43 .net
え?馬鹿なの?
var=$(...)
echo "$var" | sed ...
ってするだけじゃん

473 :名無しさん@お腹いっぱい。:2021/09/03(金) 12:25:07.03 .net
すでにそう書かれてるだろうに

474 :名無しさん@お腹いっぱい。:2021/09/03(金) 12:30:46.29 .net
流れとか関係なくどこまで知っているのか想定もせず、
偉ぶれると思ったら食いつくいつもの馬鹿だろな

475 :名無しさん@お腹いっぱい。:2021/09/03(金) 12:47:59.60 .net
口は悪いけどみんなと仲良くしたいだけなんです大目に見てあげてください

476 :名無しさん@お腹いっぱい。:2021/09/03(金) 12:51:54.14 .net
>>474
おまえこそ、いつものマウンターマウンターだな。w

477 :名無しさん@お腹いっぱい。:2021/09/03(金) 13:51:00.00 .net
>>475
そうでもないそうではないようだけどw

478 :名無しさん@お腹いっぱい。:2021/09/03(金) 15:15:28.44 .net
>>470,471

どーも。
やっぱそうか。。。
-o substfailとかあってもいいのに。

>>471
> そっちはやってる

うん、書かなかったけど、やってはみてた。
でもやめた。

なんかひっかかるし、いずれ誤って直しそうだし。
declare/set/exportで書いたら失敗が無視されることも気になる。

479 :名無しさん@お腹いっぱい。:2021/09/04(土) 07:46:40.91 .net
だからさ、もう結論出てるんだよ

var=$(...)
echo "$var" | sed ...

こう書けば終わり

480 :名無しさん@お腹いっぱい。:2021/09/05(日) 01:55:02.26 .net
きも

481 :名無しさん@お腹いっぱい。:2021/09/08(水) 16:22:00.10 .net
sedのホールドスペースは、その内容を削除するにはどうすれば?
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。

482 :名無しさん@お腹いっぱい。:2021/09/08(水) 16:43:31.22 .net
sed
https://mevius.5ch.net/test/read.cgi/unix/1085730992/

483 :名無しさん@お腹いっぱい。:2021/09/08(水) 17:50:14.30 .net
おう

484 :名無しさん@お腹いっぱい。:2021/09/27(月) 09:26:46.66 .net
怪しげなシェル芸が宣伝中

【広告記事】今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
ttps://type.jp/et/feature/14070/

485 :名無しさん@お腹いっぱい。:2021/11/03(水) 02:25:59.11 .net
空白行でいくつかのブロックに分割されたテキストにて、
文字列にマッチするブロックを出力する方法を探してます

たとえば
111

222
222
aaa
222

333
333
333
のようなテキスト中から、aaaを検索した際に、その前後の空白行に囲まれたブロックである
222
222
aaa
222
という結果を得たいです

いまは最初にブロックごとに一時ファイルを作り、それぞれに対してgrepにて検索し
マッチしたファイルを出力、としているのですがブロックが20万ほどあり、
分割も検索も遅くて困ってます

該当するブロックは3〜5個程度なので、むしろgrepでマッチする行番号を調べる
→テキストをless等でひらき該当行へジャンプ
→そのブロックをコピペ
の方が早いくらいでして

486 :名無しさん@お腹いっぱい。:2021/11/03(水) 02:48:59.29 .net
Linux板くだ質スレでいい加減嫌われたから流れてきたって感じかな

> ブロックが20万ほどあり
この時点でデータ構造の方を考え直すべき

487 :名無しさん@お腹いっぱい。:2021/11/03(水) 06:26:04.06 .net
\n\n(\n...)ではない \nをスペース(やタブなど)に | grep '\<aaa\>' | スペース(やタブなどにしたの)を\nに

488 :名無しさん@お腹いっぱい。:2021/11/03(水) 09:59:44.46 .net
テキトーに色々
$ for i in {1..2000000}; do echo aaaa; echo bbbb; echo cccc; echo $i; echo dddd; echo eeee; echo ffff; echo gggg; echo; done > aaa

$ time (awk 'function keepp () { if (matched) { for (i=0 ; i < nkeeps ; i++) print keeps[i]; print } matched=0; nkeeps=0 } NF == 0 { keepp(); next } { keeps[nkeeps++]=$0; if ($1 == "1414213") matched=1 } END{ keepp() }' < aaa )
real 0m10.556s
user 0m10.281s
sys 0m0.271s

$ time (awk 'NF == 0 { print; next } { printf "%s ", $0 }' < aaa | grep '\<1414213\>' | tr ' ' '\n')
real 0m11.101s
user 0m1.177s
sys 0m12.259s

$ time (tr '\n' ' ' < aaa | sed -e 's/ /\
/g' | grep '\<1414213\>' | tr ' ' '\n')
real 0m2.344s
user 0m1.452s
sys 0m0.814s

$ time (tr '\n' ' ' < aaa | sed -e 's/ */\
/g' | grep '\<1414213\>' | tr ' ' '\n')
real 0m3.678s
user 0m1.484s
sys 0m1.078s

489 :名無しさん@お腹いっぱい。:2021/11/03(水) 10:06:32.55 .net
$ time sh smf1.sh
real 0m4.088s
user 0m2.324s
sys 0m3.803s

$ cat smf1.sh
#!/bin/sh
SMF=/tmp/xxx
[ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
const size_t BUFFER_SIZE = 1024 * 1024 + 1;
char *buffer = (char *)malloc(BUFFER_SIZE);
while (fgets(buffer, BUFFER_SIZE, stdin) != NULL) {
char *ep = buffer + strlen(buffer) - 1;
if (ep >= buffer && *ep == '\n')
*ep = '\0';
if (buffer[0] == '\0')
putc('\n', stdout);
else
printf("%s ", buffer);
}
return 0;
}
EOS
[ $? -ne 0 ] && exit 1; }
$SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'

490 :名無しさん@お腹いっぱい。:2021/11/03(水) 10:07:40.48 .net
$ time sh smf2.sh
real 0m0.717s
user 0m0.381s
sys 0m0.436s

#!/bin/sh
SMF=/tmp/xxx
[ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
const size_t BUFFER_SIZE = 1024 * 1024;
char *srcbuff = (char *)malloc(BUFFER_SIZE);
char *dstbuff = (char *)malloc(BUFFER_SIZE+1);
char *const de = dstbuff + BUFFER_SIZE - 1;
int numLFs = 0;
size_t len;
while ((len = fread(srcbuff, 1, BUFFER_SIZE, stdin)) > 0) {
char *sp = srcbuff;
char *const sep = sp + len - 1;
char *dp = dstbuff;
char c;
while (sp <= sep) {
if ((c = *(sp++)) == '\n')
numLFs++;
else{
if (numLFs > 1)
*(dp++) = '\n';
else if (numLFs == 1)

491 :名無しさん@お腹いっぱい。:2021/11/03(水) 10:07:44.97 .net
*(dp++) = ' ';
numLFs = 0;
*(dp++) = c;
}
}
fwrite(dstbuff, 1, (size_t)(dp - dstbuff), stdout);
}
return 0;
}
EOS
[ $? -ne 0 ] && exit 1; }
$SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'

492 :名無しさん@お腹いっぱい。:2021/11/04(木) 20:48:41.95 .net
481です
いろいろな方法について情報ありがとうございます
参考にさせていただき、取り入れていこうと思います

493 :名無しさん@お腹いっぱい。:2021/11/19(金) 02:41:59.96 .net
特定の文字列で始まるファイルが存在するかの判断はどうすればいいでしょうか
ぐぐって見つけた ls を使う方法
if ls $f* > /dev/null 2>&1
then
echo $f で始まるファイルがあります
fi
だと該当ファイルが存在しない場合に
...にアクセスできません: そのようなファイルやディレクトリはありません
というエラーメッセージが表示されます。
また、
for g in $f* ; do
echo $f で始まるファイル $g があります
done
だと該当ファイルがない場合でもループの中に入ってしまいます。

494 :名無しさん@お腹いっぱい。:2021/11/19(金) 03:28:14.33 .net
find使うのはスクリプトじゃないから関係ないか

495 :名無しさん@お腹いっぱい。:2021/11/19(金) 10:37:01.91 .net
>>493
zshでじゃないの
そういう余計なオプション(nomatch)がデフォでオンになってるのでオフにする
setopt nonomatch

496 :名無しさん@お腹いっぱい。:2021/11/19(金) 10:51:08.20 .net
>>493
あと、forの場合は、シェルが対象がなくてglob展開できない場合はglobそのままの値となる。forの場合に限らずglobはそういうもの
for g in $f*
の場合は、g が $f* になるので、展開されずにそのままなのかチェックするのは必要
for g in $f*; do
[ "$g" = "$f*" ] && { echo 展開できませんでした; break; }
な感じで

497 :名無しさん@お腹いっぱい。:2021/11/19(金) 11:01:48.57 .net
>forの場合に限らずglobはそういうもの
なので、
if [ "$(echo $f*)" != "$f*" ]
then
echo $f で始まるファイルがあります
fi
とかとも書ける
zshでnomatchだと余計なメッセージが出るし、>>493のls使ってる方が見た目なにしたいのかわかりやすいと思うけど、いちおう

498 :名無しさん@お腹いっぱい。:2021/11/19(金) 11:07:42.62 .net
>>496
ああ、念のためには元globとの比較ではなくて -e する方がいいな
[ "$g" = "$f*" ]
でなくて
[ -e "$g" ]

499 :名無しさん@お腹いっぱい。:2021/11/19(金) 12:04:30.54 .net
zshネタ、シェルスクリプトではなくて zsh script になってしまうが
null_glob
ってのもあるんだな
setopt null_glob
ってすると、エラーメッセージは出ないわ、globに当てはまらない場合globを入れない/消すわで、>>493のどっちも動くようになるな
そんな応えは求めてないだろうけどw

500 :名無しさん@お腹いっぱい。:2021/11/19(金) 12:07:54.26 .net
ああ、bashにもnullglobって同じようなのがあるのか
シェルスクリプトという汎用ではなく各シェル固有独特の機能なので使わないだろけど

501 :名無しさん@お腹いっぱい。:2021/11/19(金) 12:11:32.22 .net
そして、bashにも
failglob
ってあるのか。オンになってたら>>493はbashでも似たような動きになるか
bashはデフォではオンではないので、zshだろと思うけど

502 :名無しさん@お腹いっぱい。:2021/11/19(金) 23:23:19.51 .net
489です
ありがとうございます。
とても参考になりました。

503 :名無しさん@お腹いっぱい。:2021/11/21(日) 19:09:01.55 .net
コマンドの出力を(だけ)ではなく、シェルそのものの出力(=コマンドの出力もになる)を消すなら
if (exec 1>/dev/null;exec 2>&1;ls $f*); then
echo $f で始まるファイルがあります
fi
て現在のシェル環境を変更(元に戻すのが面倒なのでサブシェルでそこの環境を変更)で消すというのもできたな

504 :名無しさん@お腹いっぱい。:2021/11/21(日) 19:15:56.45 .net
>if (exec 1>/dev/null;exec 2>&1;ls $f*); then
execのディスクリプタ操作は羅列ができるようなのね
if (exec 1>/dev/null 2>&1;ls $f*); then
の方が良さげか

505 :名無しさん@お腹いっぱい。:2021/11/21(日) 22:35:21.95 .net
>>493
check() {
  set -- "$1"*
  [ -e "$1" ]
}

最短だとこうかな?

set -- "$1"* でシェルのglob展開を用いて位置パラメーターにセットする
ファイルが見つかった場合、そのファイル名が$1に入る
ファイルが見つからなかった場合、"$1"*という文字列が入る

まずありえないとは思うけど"$1*"という名前にアスタリスクが含まれた
ファイルがある可能性を考えると>>496よりも-eでチェックした方が良い
>>498で書いてあったかw

>>497
> >>493のls使ってる方が見た目なにしたいのかわかりやすいと思うけど
ls $f* は意味がない。シェルのglob展開されてからlsを実行してる。
つまりls file1 file2 file3 のようなものを実行してるだけ。
呼び出す前にすでにファイル一覧を取得してる
単に呼び出しコストが高い[ -e ] になってる

506 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:15:10.23 .net
見た目っ言ってるだろ
そんなコスト気にする必要もないから、見た目とそっちの方を重視してだよ

507 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:18:58.18 .net
他人の提案を直接ダメ出しして自分の知識自慢をしたがり、
マウント取るのが目的なやつは他のシェルスクリプトスレでも居るけど、
同じやつかな

508 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:19:33.52 .net
lsの見た目の何がいいの?
ファイルリストを取得しても何やってるのか意味わからんでしょ

509 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:20:38.15 .net
>>507
> 同じやつかな
違うけど、お前が知識不足でマウント取られたやつだってのはよくわかったよw

510 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:21:00.73 .net
lsはファイルがあるか確認するのに普通に使ってるだろ、手打ちで

511 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:22:25.30 .net
>>509
見た目って言ってる裏を読めないで決めつけられてもな
同じやつとしか思えないその短絡的なレス

512 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:31:25.93 .net
でたw
自分が説明できてないだけなのに
裏が読めてないと相手のせいにする
詐欺師の手段と同じ

513 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:34:45.43 .net
自分にある意味ダメ出しされたらイキリマ来るくせに。変なやつ
説明できないとか似たようなフレーズはあいつもすぐにしてたなあ
巣に帰れよw

514 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:40:47.87 .net
「裏を読めない」と言った時点で
自分で書いてないって言ってるのってわかってないのかな?
思い込み激しすぎるんだよな
例のPOSIX原理主義者みたいだw

515 :名無しさん@お腹いっぱい。:2021/11/21(日) 23:46:30.79 .net
読めませんでしたと素直に言えよ
わざわざ見た目って言ってるのはなんなのかは、細かいこと言うなら、
また、そこまで食い下がるならそれぐらい裏読めよ
せめて、読めませんでしたと素直になれよ。他人にダメ出しばっかしてないで

自分にダメ出しされたらイキリまくるくせに、他人にダメ出しはするって、
マジでマウント取るのが目的でしかないだろう
マウント取るためだから素直には人の言うことは読めないから、
イキリまくることになるんだろうなと

そのしつこさはやはりなっていう
マウント取るためだからしつこく食い下がるんだろうなあ...

516 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:00:02.71 .net
書いてないものは読めません
アホすぎる

517 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:00:26.12 .net
POSIX原理主義者って本当みたいだなw

518 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:02:28.08 .net
書いてないものは読めません
って短絡的に言えちゃうのは確かにアホだな、それが攻撃的な人格のヤツがなら

519 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:08:40.31 .net
>>517
自らアホ晒してるだけだぞ
なんでPOSIX原理主義者に結びつけるのか意味わからん
もちろんあんな自ら手足縛るのは嫌いだ/必要ないし、イキってる姿勢はもっと嫌いだし
ホント短絡的だな。トンチンカンな決めつけばかりって何したいんだか

520 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:09:15.81 .net
説明不足を他人のせいにするのが流行ってるの?

521 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:10:39.73 .net
相手によるだろう

522 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:16:59.61 .net
>>519
> なんでPOSIX原理主義者に結びつけるのか意味わからん
そりゃPOSIX原理主義者に知識不足でマウント取られた恨みがあるから、というぐらいは読めるよねえ

523 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:18:57.19 .net
また思い込みで語ってるw

524 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:23:14.57 .net
>>522
イミフすぎな文で、読めないぞ
誰がPOSIX原理主義者なの?
裏読めないやつがPOSIX原理主義者ってことになる文だと思うけど、その文は

POSIX原理主義者って出てきたのは、>>514だぞ
>>514がPOSIX原理主義者?>>514のレスの相手であろう俺がPOSIX原理主義者??

525 :名無しさん@お腹いっぱい。:2021/11/22(月) 00:29:52.48 .net
俺がPOSIX原理主義者だとしたいなら、
POSIX原理主義者のくせに知識不足でマウント取られた恨みがあるから
かな
だとしてもPOSIX原理主義者に結びつける説明にはなってないなあ
カオスだな。ここまでにしとこか

526 :名無しさん@お腹いっぱい。:2021/11/22(月) 02:10:39.67 .net
>>524
× POSIX原理主義者
○ 例のPOSIX原理主義者

シェルスクリプトスレでは、意味が全然変わる。w

527 :名無しさん@お腹いっぱい。:2021/11/22(月) 02:11:59.82 .net
>>524
510には「POSIX原理主義者」に知識不足でマウント取られた過去があって
恨みがあるから「POSIX原理主義者」という言葉を持ち出した
ってことでしょ

510がマウントとられてぐぬぬとなった時に、510には相手がPOSIX原理主義者のように思えたらしいというだけで
本当にPOSIX原理主義者かどうかさえ不明だし、誰がPOSIX原理主義者かなんてどうでもいい

528 :名無しさん@お腹いっぱい。:2021/11/22(月) 02:13:47.43 .net
>>526
言語新作は病気だよ

529 :名無しさん@お腹いっぱい。:2021/11/22(月) 03:28:05.45 .net
>>527
無理があるだろう

530 :名無しさん@お腹いっぱい。:2021/12/11(土) 11:26:25.87 .net
fishについて質問です
fish_vi_key_bindingsを入力するとviモードに入りプロンプトの左にモードステイタスが表示されますが、
$XDG_CONFIG_HOME/fish/config.fish にfish_vi_key_bindingsを記入した場合はログイン後すぐにviモードか使えますがモードステイタスが表示されません
どうやったら表示出来ますか?

531 :名無しさん@お腹いっぱい。:2021/12/11(土) 13:46:58.57 .net
fish_prompt

532 :名無しさん@お腹いっぱい。:2021/12/11(土) 13:48:39.11 .net
fish_mode_prompt

533 :名無しさん@お腹いっぱい。:2021/12/11(土) 13:49:12.15 .net
を、$XDG_CONFIG_HOME/fish/config.fish に書いてるんじゃないの

534 :名無しさん@お腹いっぱい。:2021/12/11(土) 15:39:24.15 .net
>>533
どうもありがとうございます
それらは書かれていませんが、こう書かれてありましたのでコメントアウトしてみたらモードが表示されるようになりました

function hybrid_bindings --description "Vi-style bindings that inherit emacs-style bindings in all modes"
for mode in insert default visual
fish_default_key_bindings -M $mode
end
fish_vi_key_bindings --no-erase
end
set -g fish_key_bindings hybrid_bindings

535 :名無しさん@お腹いっぱい。:2021/12/11(土) 15:48:57.02 .net
インサートモードの時にjjを押したらノーマルモードに戻りたくてfish_user_key_bindingsに以下のように書いたらまたモードが消えました

function fish_user_key_bindings
fish_vi_key_bindings
bind -M insert -m default jj backward-char force-repaint
end

536 :名無しさん@お腹いっぱい。:2022/02/26(土) 23:09:30.57 .net
端末では正常な
$declare -i w0=180 w1=30 w2=20 w3=50 ; w3=w3+(w0-w1)/10-1 ; echo $w3
ですが、shファイルで使うとなぜかエラーになります。(w? の数値は違います)
予期しないトークン `(' 周辺に構文エラーがあります w3=w3+(w0-w1)/10-1
ですが、分割すると通ります。
w2=(w0-w1)/10 ; w3=w3+w2-1
理由をご存知でしたら教えて下さい。
GNU bash, バージョン 5.0.17(1)

537 :名無しさん@お腹いっぱい。:2022/02/27(日) 07:10:41.81 .net
>>536
理由はよく分からないけど extglob が on ならエラーにならないね

538 :名無しさん@お腹いっぱい。:2022/02/27(日) 09:42:18.76 .net
>>536
シバンでググれ

539 :名無しさん@お腹いっぱい。:2022/02/27(日) 19:45:20.55 .net
なんかbashの仕様のグダグダなところを踏んだって感じだな。
エスケープされていない生の ( は基本的にwordの途中に出てこないので、
w3+( ときたところでsyntax errorになる。
ところが、shopt -s extglob しておくと、
+(hoge|fuga) みたいなパターンマッチを許すため、
w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。
*( も可。しかし、/( と -( は不可。
おとなしく $(( )) を使っておくのが吉。

540 :名無しさん@お腹いっぱい。:2022/02/28(月) 06:45:21.62 .net
自分が理解できないからって
bashのせいにするのは恥ずかしい行為

541 :名無しさん@お腹いっぱい。:2022/03/08(火) 18:54:54.29 .net
grepとかで使える正規表現の「\s」は、manページのどこに書いてますか?

「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。

542 :名無しさん@お腹いっぱい。:2022/03/10(木) 22:56:33.04 .net
declare -i n; n="3/2" は通るのに、n="1.5" が通らないのはなぜだろ

543 :名無しさん@お腹いっぱい。:2022/03/10(木) 23:31:05.02 .net
エラーで出ている通り、
リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない
数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない
てとこかな

544 :名無しさん@お腹いっぱい。:2022/03/10(木) 23:46:00.98 .net
リテラル じゃなく、右辺中 か

>>541
manには無さげかな。manには無いがPOSIXのドキュメントには詳しくある

545 :名無しさん@お腹いっぱい。:2022/03/11(金) 00:08:44.90 .net
>>544,541
いや、POSIXのドキュメントには無いな
個々の実装での気まぐれmanに記載のないのは記載漏れかな
使えるかどうかは試してみなければわからない、使えるのも多いだろうけど
自分で試して使えるなら使うなら、
https://en.wikipedia.org/wiki/Regular_expression
https://www.boost.org/doc/libs/1_71_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html
とか、manではなくPOSIXのでもなく他の資料を当たるしかないかな

546 :名無しさん@お腹いっぱい。:2022/03/11(金) 00:14:53.27 .net
ああ、決まり事を規定する団体が規定してるドキュメントでは ユニコードコンソーシアム のがある
https://unicode.org/reports/tr18/
これを実装していればだが

547 :名無しさん@お腹いっぱい。:2022/03/11(金) 12:03:17.08 .net
>>544-546
やっぱり記載漏れかな?
理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。

個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。

548 :名無しさん@お腹いっぱい。:2022/03/11(金) 12:17:43.20 .net
>>547
他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ

549 :名無しさん@お腹いっぱい。:2022/03/11(金) 16:00:00.94 .net
>>548
たしかにinfo grepには「\s」が書いてあるな。
でもinfo bashには書かれてなくて、man 3 regexに回されてるような。
結局はinfoでも解決しなさそうな気がするんだけど、違う?

info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは?
まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。

550 :あぼーん:NG NG.net
あぼーん

551 :名無しさん@お腹いっぱい。:2022/05/12(木) 22:19:26.11 .net
シェルスクリプトの [ -a (AND) と -o (OR) ] は非推奨だかんね
https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521
には -a や -o ではなく && と || を使うように書かれています。
否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?

552 :名無しさん@お腹いっぱい。:2022/05/13(金) 01:22:03.48 .net
>>551
知らなかった。
勉強になった

553 :名無しさん@お腹いっぱい。:2022/05/13(金) 16:01:08.55 .net
>>551
いいんじゃね?
ただ [ "$a" != "$b" ] や [ ! "$a" = "$b" ] ってしないとだめだけど
あと ! [ "$a" = "$b" ] でもよさそう

554 :名無しさん@お腹いっぱい。:2022/05/14(土) 23:52:35.51 .net
昔のFreeBSDでは
[ -n abc -lt 5 ]
みたいのが通った記憶

[ gnu 8.30で今試すとextra argument '['
と怒られる

手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな

555 :名無しさん@お腹いっぱい。:2022/05/15(日) 03:02:55.37 .net
シェルスクリプトって息が長いから
そういう使うべきじゃないものも残っていて困るね
さすがに古すぎる機能は互換性切り捨てた方が良くない?

556 :名無しさん@お腹いっぱい。:2022/05/15(日) 12:09:01.91 .net
whileの、条件が偽でも一度はループって仕様が不思議

557 :名無しさん@お腹いっぱい。:2022/05/15(日) 15:51:51.12 .net
そんな仕様なんて無いし
シェルスクリプトに文句言ってるやつの8割は
自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる

558 :名無しさん@お腹いっぱい。:2022/05/15(日) 17:54:30.30 .net
do while をシェルスクリプトでどう実現するかって話もWeb上であるけど、
それなんの話ってことになるわな

559 :名無しさん@お腹いっぱい。:2022/05/23(月) 13:54:54.31 .net
ぐぐっても見つけられないんだけど
functionの中のlocal変数に整数属性付与って出来ないのかな?

560 :名無しさん@お腹いっぱい。:2022/05/23(月) 23:44:52.02 .net
bashの話だとして普通に整数属性付いてるぞ?

bash -c 'v=1+2; foo() { local v; declare -i v; v=3+4; echo $v; }; foo; echo $v'
7
1+2

というかdeclareで-gをつけない限り
デフォルトでlocalになるだろ?

561 :名無しさん@お腹いっぱい。:2022/05/24(火) 01:33:27.87 .net
ぐぐるな!
黙って
man sh

562 :名無しさん@お腹いっぱい。:2022/05/24(火) 17:18:15.58 .net
>>560
ありがとうございます。
declare はスクリプトファイルの先頭でしか使ったことがなかったのでループ内(や関数)でも使えるとは知りませんでした。
なるほど、それならデフォルトlocalですね。

>>561
使い方の例を見て学ぶタイプなので^^

563 :名無しさん@お腹いっぱい。:2022/05/25(水) 00:13:58.24 .net
3つの引数を必要とする関数があります。
x=$1 y=$2 ANS=$3の絶対値
$3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。
x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。

質問:整数配列の宣言はできますか?

564 :名無しさん@お腹いっぱい。:2022/05/25(水) 01:04:48.10 .net
>>562
内部的にはlocalとかreadonlyとか変数に属性つけるやつは
内部的にはdeclareかtypesetの別名

565 :名無しさん@お腹いっぱい。:2022/05/25(水) 01:06:31.16 .net
>>563
昨日、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
大盛りねぎだくギョク。これが通の頼み方。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。

答え:できまsん

566 :名無しさん@お腹いっぱい。:2022/05/31(火) 05:07:04.68 .net
ありがとうございます。
色々やってみたら、配列として宣言しなくても使えるようです。
declare -i i a[0] a[1] ; a[0]=3 ; a[1]=6 ; i=1 ; a[$i]=${a[$i]}+1 ; echo a=${a[$i]}
a=7

567 :名無しさん@お腹いっぱい。:2022/07/31(日) 09:46:48.93 .net
ちょっとスレチかもですが、
for filename in *
とかでカレントディレクトリにあるファイル名を得る場合、どんな順番なのでしょうか?
ディレクトリエントリ順とか、ファイル名順とか。

568 :名無しさん@お腹いっぱい。:2022/07/31(日) 11:17:31.68 .net
ある程度ファイルがあるところで
echo *
すればわかる

569 :名無しさん@お腹いっぱい。:2022/07/31(日) 12:25:43.85 .net
>>567
お使いのシェルのマニュアル見ろってさ
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1020788530

570 :名無しさん@お腹いっぱい。:2022/07/31(日) 17:53:21.88 .net
>>567
GLOB
POSIXに規定されてる
The glob() function shall store the number of matched pathnames into pglob->gl_pathc and a pointer to a list of pointers to pathnames into pglob->gl_pathv. The pathnames shall be in sort order as defined by the current setting of the LC_COLLATE category
名前順

571 :名無しさん@お腹いっぱい。:2022/07/31(日) 17:56:03.40 .net
>>570,567
SORTしないというオプションもあるが、その場合には順番の決まりなんてないということになるね

572 :名無しさん@お腹いっぱい。:2022/07/31(日) 19:31:44.03 .net
質問者の使ってるシェルはposix準拠なのか

573 :名無しさん@お腹いっぱい。:2022/07/31(日) 19:47:57.19 .net
>>572
> □お約束
> ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。

574 :名無しさん@お腹いっぱい。:2022/08/02(火) 17:31:23 .net
POSIX準拠が当たり前、
POSIXにはない/POSIXで足らない勝手に拡張部分で独自が当たり前
って当たり前がわからないんだろな

拡張するにしてもPOSIXをベース+αって馬鹿でもわかりそうなもんだが
機能的に必要最低限のPOSIXを無視する利益なんてないだろに

575 :名無しさん@お腹いっぱい。:2022/08/02(火) 19:09:16.74 .net
POSIXを無視する利益は互換性でしょ?
今までの動きを変えたらだめ

576 :名無しさん@お腹いっぱい。:2022/08/02(火) 20:31:00.79 .net
>POSIXを無視する利益は互換性
www
>今までの動きを変えたらだめ
前段からそれになるとか無茶苦茶
POSIXの経緯、POSIXは何をベースに作られたか勉強してきてから寝言言うんだよ

577 :名無しさん@お腹いっぱい。:2022/08/03(水) 09:45:22.85 .net
皆様ありがとうございました。シェルはbashです。
名前順的に最後のファイル名を得るには
for filename in * ; do
:
done
とするしかないようですね。
でもKDEのDolphineの自然なソート(ゼロパディング分の0を無視)のようなオプションは欲しいかも

578 :名無しさん@お腹いっぱい。:2022/08/03(水) 14:26:27.63 .net
>>577
> 名前順的に最後のファイル名を得るには
普通に
ls -r | head -1
でよくね?

579 :名無しさん@お腹いっぱい。:2022/08/03(水) 20:32:58.41 .net
>>576
何をベースにってBSDベースでしょ?
SolarisとかはSystemVベースだからtrコマンドの挙動が違う
互換性を重視してPOSIXを無視してる

580 :名無しさん@お腹いっぱい。:2022/08/03(水) 20:34:34.24 .net
https://qiita.com/richmikan@github/items/bd4b21cf1fe503ab2e5c#tr%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89

> POSIXに準拠してないSystem V実装が悪いと言ってしまえばそれまでなのだが、
> 歴史の上ではPOSIXよりも早いのでそれをいうのもまた理不尽というもの。ではどうすればいいか。

581 :名無しさん@お腹いっぱい。:2022/08/04(木) 09:47:52.75 .net
>>576
おら。ちゃんとPOSIXの経緯調べてきたか?
黙ってないでなんとかいえや

582 :名無しさん@お腹いっぱい。:2022/08/05(金) 10:23:52.72 .net
>>577
sh ではできるだけパイプで処理することを考えるんだ
もちろん for, while などが必要な局面はあるが
パイプで済むなら速くて簡潔でフィルターとして組み合わせられる

583 :名無しさん@お腹いっぱい。:2022/08/05(金) 10:46:42.12 .net
>>582
ファイル名に改行が入る場合はどうすればいいのでしょうか?

584 :名無しさん@お腹いっぱい。:2022/08/08(月) 18:30:05.02 .net
自分ならまずそういうアホなファイル名を変更するが
権限がなければまあ
find -print0 | xargs -0
くらいだな

585 :名無しさん@お腹いっぱい。:2022/08/08(月) 21:06:49.38 .net
>>584
POSIX準拠じゃないので
FreeBSDで動きませんw

586 :名無しさん@お腹いっぱい。:2022/08/14(日) 20:39:40.32 .net
POSIX準拠じゃなくてもFreeBSDで動くけどな
POSIXにないのでも、ツール間で合わせ合う、どっちかがどっちかに似せるというのは普通にあるしな

587 :名無しさん@お腹いっぱい。:2022/08/14(日) 21:19:42.49 .net
POSIXにないオプションは使用禁止だ
そんなものを使うと持続性がなくなる
なんらかの理由で別のOSに変更になった時
システムは動かなくなってデータはただのゴミになる
何度言えば理解できるのか

588 :名無しさん@お腹いっぱい。:2022/08/15(月) 12:57:39.48 .net
はいはい、原理主義ごくろうさん
使ってる本人次第でしかないのに押し付けとかホント原理主義者は

589 :名無しさん@お腹いっぱい。:2022/08/15(月) 13:03:07.61 .net
原理主義者は自惚れてるけど無知さがだだ漏れる
無知さを隠す誤魔化すためのマウント取りでしかない

590 :名無しさん@お腹いっぱい。:2022/08/15(月) 13:26:13.07 .net
リッチー大佐はC言語も使える
ただし分割コンパイルやmakeといった高度な機能は使わない
そんなものはなくてもシェルスクリプトでmake.shを作れば良いからだ

591 :名無しさん@お腹いっぱい。:2022/08/15(月) 13:28:32.48 .net
>>585
pkg install findutils

592 :名無しさん@お腹いっぱい。:2022/08/15(月) 14:25:12.28 .net
それ入れなくてもFreeBSDのfindで可能だけどな
がっつりGNU依存のにしても、それ入れる+ちょっとパス修正だけだわな

593 :名無しさん@お腹いっぱい。:2022/08/15(月) 16:04:55.82 .net
BSDのfindなら
find 場所 -print0 | xargs -0

594 :名無しさん@お腹いっぱい。:2022/08/15(月) 20:36:03.11 .net
持続性なら、もはやPOSIXよりも、Linuxのほうがいいのでは。

595 :名無しさん@お腹いっぱい。:2022/08/16(火) 12:18:54.66 .net
posixってソフトウェア規格でしょ?

596 :名無しさん@お腹いっぱい。:2022/08/16(火) 12:28:09.90 .net
ソフトウェア規格って?
公式ページでも見れば?

597 :名無しさん@お腹いっぱい。:2022/09/19(月) 12:12:56.52 .net
bashの関数で文字列を返したい場合、その関数名を文字列名称に使うことは仕様的に可能ですか?
function kotae () {
kotae=$1$2
}
kotae ab cd
echo $kotae

598 :名無しさん@お腹いっぱい。:2022/09/23(金) 09:54:01.90 .net
>>597
関数と変数の名前空間は別なので別に構わない、そして宣言(declare)してなければ変数concはグローバル
ややこしいのでそういう使い方のおすすめはしない

599 :名無しさん@お腹いっぱい。:2022/09/23(金) 09:55:09.11 .net
concはkotaeの間違い
頭の中で勝手に命名しちゃった

600 :名無しさん@お腹いっぱい。:2022/09/24(土) 14:46:59.72 .net
>>597
そのようなことをしたい場合はこうする

function kotae () {
printf -v $1 "%s" $2$3
}
kotae ret ab cd
echo $ret

601 :名無しさん@お腹いっぱい。:2022/10/28(金) 02:25:37.28 .net
bash 5.2.2(1)で最初の!だけ全角の
echo "abc!? xyz!"
は通るのに、半角にすると
echo "abcecho "abc!? xyz!"
>
になってしまいます。
一対の"で通すにはどうすればいいのでしょうか?

>>598-600
ありがとうございます。
printfのvオプションは初めて知りました。

602 :名無しさん@お腹いっぱい。:2022/10/28(金) 13:13:38.41 .net
ヒストリ機能
知らない/活用してないならオフにしておくべき
対話モードでしか機能しないから切っても特に問題はない

603 :名無しさん@お腹いっぱい。:2022/10/29(土) 10:43:22.22 .net
バックスラッシュをつけてエスケープ。

604 :名無しさん@お腹いっぱい。:2022/11/06(日) 16:47:34.57 .net
恥を忍んで質問させて下さい:
Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、
Autoconf/Autotoolsが普及した理由って何でしょう?
1)Perlよりm4の方が普及してた(どっちも文法はアレだけど)
2)というかPerl嫌いな人が少なくなかった
3)そのほか(開発モデルとか)

...imakeって何だっけ?

605 :名無しさん@お腹いっぱい。:2022/11/06(日) 18:24:19.31 .net
Autoconf/AutotoolsはGNUだからじゃね?しらんけど

606 :名無しさん@お腹いっぱい。:2022/11/07(月) 01:26:02.31 .net
rsync -avR -e ssh ...
rsync -avR -e ssh ...

このように6行以上書くとエラーになるんですがどうしてでしょう?

ssh: connect to host xxxx: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(228) [sender=3.2.3]

607 :名無しさん@お腹いっぱい。:2022/11/07(月) 06:20:59.25 .net
6行以上書いたからじゃね?

608 :名無しさん@お腹いっぱい。:2022/11/07(月) 07:38:39.12 .net
>>606
クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる
少し時間を空ければ大丈夫なはず
てか、サーバーは何?

609 :602:2022/11/07(月) 11:40:12.51 .net
>>608
ありがとうございます。そうでしたか。
コマンドの内容と関係無さそうだったので迷いました。
接続先のサーバーは自宅のraspiです。

610 :名無しさん@お腹いっぱい。:2022/11/08(火) 09:01:57.74 .net
もしかしてファイル転送を多重化しようとしてるのかな そういうオプションがあったような気がするけどね rsync

611 :名無しさん@お腹いっぱい。:2022/11/08(火) 23:15:42.53 .net
はい、ぶたがみーるー
まあ、ここにも俺がいるわけですけどねw

612 :名無しさん@お腹いっぱい。:2023/03/27(月) 06:41:34.11 .net
バックしまーす

613 :名無しさん@お腹いっぱい。:2023/06/18(日) 23:35:36.05 .net
function YesNo {
local yn
while true; do
read -p " [Yes/No" "$1" "]: " yn
case $yn in
[Yy]*) return 0 ;;
[Nn]*) return 1 ;;
[Ee]*) if [ ! "$1" = "" ]; then return 2; fi ;;
esac
done
}

#main
YesNo ":いいえ /Else:その他"
echo $?
exit

実行すると、read: `:いいえ /Else:その他': 有効な識別子ではありません
とエラーになるのですが、どうすればいいでしょうか?

614 :名無しさん@お腹いっぱい。:2023/06/19(月) 06:14:08.74 .net
-p に渡っているのは " [Yes/No" だけで、残りの "$1" と "]: " は yn と同じく変数名として解釈されている

read -p " [Yes/No $1 ]: " yn

615 :名無しさん@お腹いっぱい。:2023/06/23(金) 17:18:03.40 .net
テスト

616 :名無しさん@お腹いっぱい。:2023/08/23(水) 21:31:25.96 .net
これってどうしてそうなのだろう?

617 :名無しさん@お腹いっぱい。:2023/08/27(日) 18:57:22.73 .net
readコマンドの引数にダブルクォートを使ってるからだぬ
だから>>614氏が指摘しているコトになってるぬ

618 :名無しさん@お腹いっぱい。:2024/02/20(火) 08:47:58.81 .net
先にBを算出することもなく変数の追加もなしで処理2を1箇所にすることは可能でしょうか?
if [ A ]; then
Bを算出
if [ B ]; then
 処理1
else
 処理2
fi
処理2
fi

619 :名無しさん@お腹いっぱい。:2024/02/20(火) 14:15:04.07 .net
2度目のエルスを書かなければいいだけじゃなくて?

620 :名無しさん@お腹いっぱい。:2024/02/20(火) 17:32:39.42 .net
>>619
「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。

出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。
が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。

なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。

621 :名無しさん@お腹いっぱい。:2024/02/22(木) 06:05:52.23 .net
>>618
else 足りなくね
処理2を1度または2度実行するのに、1箇所にしたいとかイミフ

!Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw
Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に

622 :名無しさん@お腹いっぱい。:2024/02/22(木) 18:42:19.24 .net
{ ifを何重にもネストしたブロック } || 処理2
みたいなのでも

623 :名無しさん@お腹いっぱい。:2024/03/14(木) 17:20:13.74 .net
while ...do
処理1
done <<=LIST=
リスト1
=LIST=

while ...do
処理2
done <<=LIST=
リスト1
=LIST=

てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、

while ...do
処理1
処理2
done <<=LIST=

ではあかん。

624 :名無しさん@お腹いっぱい。:2024/03/14(木) 18:05:33.59 .net
ヒアドキュメントの中で変数を展開できます。

LIST_CONTENT="リスト1
...
"

while read s; do
printf '%s\n' "${s}"
done <<LIST
${LIST_CONTENT}"
LIST

総レス数 624
193 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★