シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」 から参照することができます。)
・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/
シェルスクリプト総合 その28
■ このスレッドは過去ログ倉庫に格納されています
2018/08/02(木) 05:22:16.82
2018/08/02(木) 07:30:57.65
2018/08/02(木) 08:22:54.47
FAQ
Q. 秘密結社シェルショッカーってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。
Q. USP友の会ってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。
Q. シェル芸ってなんですか?
A. しらん。ヲタ芸みたいなもんやろ。恥ずべきものや。
Q. ユニケージ開発手法ってなんですか?
A. しらん。所でアプリの開発には普通のプログラム言語使ったほうが良いぞ
Q. 秘密結社シェルショッカーってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。
Q. USP友の会ってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。
Q. シェル芸ってなんですか?
A. しらん。ヲタ芸みたいなもんやろ。恥ずべきものや。
Q. ユニケージ開発手法ってなんですか?
A. しらん。所でアプリの開発には普通のプログラム言語使ったほうが良いぞ
2018/08/02(木) 08:24:01.24
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や 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 参照 )
初心者、学生、アマチュア、プロ、シェルの種類や 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 参照 )
2018/08/02(木) 08:24:52.02
★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
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
2018/08/02(木) 08:25:30.27
★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/
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/
2018/08/02(木) 08:26:16.74
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/
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/
2018/08/02(木) 08:26:56.94
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/
後略。検索して下さい
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/
後略。検索して下さい
2018/08/02(木) 08:40:37.63
★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 は予定した追加先。主にスレ立て人の判断保留用。
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 は予定した追加先。主にスレ立て人の判断保留用。
2018/08/02(木) 08:59:28.57
このスレは手違いで作成されたものです。
前スレ
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/
への移動をお願いします。
前スレ
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/
への移動をお願いします。
2018/08/02(木) 09:07:59.90
移りたい奴はさっさと移れよ
もうここ来んな
もうここ来んな
2018/08/02(木) 09:21:20.82
移りたくない理由って、前スレで自演荒らししてたからってのしか思いつかない。
このスレを使いたい人間ってのが荒らしだとしたら、このスレを捨てるのが適切では?
このスレを使いたい人間ってのが荒らしだとしたら、このスレを捨てるのが適切では?
2018/08/02(木) 10:08:56.08
お前が今やってることが荒らしだろ
さっさと移れよ
さっさと移れよ
2018/08/02(木) 10:25:08.21
2018/08/02(木) 10:26:56.73
2018/08/02(木) 11:50:13.77
移りたかった奴らがいつまでも見てんなよ
ここを荒らすな
ここを荒らすな
2018/08/02(木) 11:51:21.90
ここのことは忘れて移った先で楽しく過ごしてください
もう構わないでね
もう構わないでね
2018/08/02(木) 12:36:09.60
>>17
荒らしスレであることを知らずに迷いこむといけませんから、
知らずに書き込んだ可能性がある場合には、重複スレである旨の
注意書きを今後も投稿するつもりです。
荒らしスレであることを承知の上で書き込んでいるケースについては、
私は今後このスレに書きこみません。
他の人がどうするかは私には分かりませんが。
荒らしスレであることを知らずに迷いこむといけませんから、
知らずに書き込んだ可能性がある場合には、重複スレである旨の
注意書きを今後も投稿するつもりです。
荒らしスレであることを承知の上で書き込んでいるケースについては、
私は今後このスレに書きこみません。
他の人がどうするかは私には分かりませんが。
2018/08/02(木) 13:00:44.80
向こうのスレで、こっちにしつこく誘導しようとしてるなら非難されて仕方ないけど、そんなことしてる奴いないんだろ?
見てないから知らんが
もうここは構ってくれなくていいって
余計なお世話だわ
どんだけ暇人だよ
見てないから知らんが
もうここは構ってくれなくていいって
余計なお世話だわ
どんだけ暇人だよ
20名無しさん@お腹いっぱい。
2018/08/05(日) 08:04:43.32 fishをログインシェルとして使ってます
zshの場合bindkey "\e[A" history-beginning-search-backward-end
で数文字入力して上矢印キーを押すと直近の履歴から保管されますが
fishでこれをしたい場合どうすればいいのでしょうか?
fishだとデフォルトで右矢印キーがこの動作になるようですが
これを上矢印キーにしたいところです。
zshの場合bindkey "\e[A" history-beginning-search-backward-end
で数文字入力して上矢印キーを押すと直近の履歴から保管されますが
fishでこれをしたい場合どうすればいいのでしょうか?
fishだとデフォルトで右矢印キーがこの動作になるようですが
これを上矢印キーにしたいところです。
2018/08/05(日) 08:21:50.23
~ > 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
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
2018/08/27(月) 12:16:09.32
wgetを使ってシェルスクリプトでダウンロードツールを作ったんだけど
ナロー回線だから出来るだけ無駄を省きたくて
-cオプションで既存ダウンロード分に追記する形にしてる
でも当然ならがコマンドが2重に発行されたらぐちゃぐちゃになるから
psコマンドでwgetを2重発行しないようにしてるけどちょっと不安
実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
ファイルが壊れたことがあった
ぶっちゃけダウンロードしてるのはニコニコの動画であり
(動画なんで視聴しないと壊れてるのかわからず厄介)
ID_タイトル.mp4とかの形式で保存してるんだけど
問題はマルチバイト文字のタイトルだから
「grep "${id}.*${extention}"」として回避
実際はもうちょっとコマンドの詳細まで見てるけど
こんな場合のベストってダウンロード先のファイル名に
プロセスID(wgetを実行するシェルスクリプトのプロセスID)を含めるようにして
状況に応じてファイル名を変えながらwgetするくらいしかないのかな?
既存ダウンロード分のmvに成功したら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 >>22
>複数の動画を同時並行でダウンロードするつくり
なんでlockファイルで二重起動を防止しないのだろうと思ったら、
同時並列でwgetを実行したいけど、
1つの動画については多重実行されないようにしたい、ということか。
ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
そのファイルをダウンロードしないという仕組みにすればどうだろう。
でもそもそも
> 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。
>複数の動画を同時並行でダウンロードするつくり
なんでlockファイルで二重起動を防止しないのだろうと思ったら、
同時並列でwgetを実行したいけど、
1つの動画については多重実行されないようにしたい、ということか。
ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
そのファイルをダウンロードしないという仕組みにすればどうだろう。
でもそもそも
> 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。
24名無しさん@お腹いっぱい。
2018/08/27(月) 14:07:03.572018/08/27(月) 14:33:46.01
> ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
> wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
> 終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
> そのファイルをダウンロードしないという仕組みにすればどうだろう。
参照ファイルを参照してIDが無いことを確認してID書き込むまでの間に
同じ処理が走ったらチェック抜けてしまうなというのが懸案としてあります
なのでダウンロードしているファイルそのものをロックファイルにして
しかもmvコマンドの成否によって判断したらよいのではと午前中に思いました
> でもそもそも
> > 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
> これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。
今はIDと拡張子でgrep掛けてるので問題ないのです
(直近だと「禁書目録」がpsコマンドで「禁??録」になりプロセスチェックをスルーしていました)
でも先の参照ファイルと同じで
同じ動画に対してほぼ同時にダウンロード処理が走った場合
psコマンドを実行してから実際にwgetコマンドを実行するまでの間に
チェックを抜けてしまうことが考えられるのでどうにかしたいなと思ってます
ちょっと後出しになって申し訳ないですが
ダウンロードの処理はさまざまな状況で実行されることがあり
これからダウンロードするぞってターミナルからコマンドを打つこともありますが
cron登録していて自動でダウンロードが走るようにもしているため
そういう適当な運用でも回避できればと考えています
> wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
> 終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
> そのファイルをダウンロードしないという仕組みにすればどうだろう。
参照ファイルを参照してIDが無いことを確認してID書き込むまでの間に
同じ処理が走ったらチェック抜けてしまうなというのが懸案としてあります
なのでダウンロードしているファイルそのものをロックファイルにして
しかもmvコマンドの成否によって判断したらよいのではと午前中に思いました
> でもそもそも
> > 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
> これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。
今はIDと拡張子でgrep掛けてるので問題ないのです
(直近だと「禁書目録」がpsコマンドで「禁??録」になりプロセスチェックをスルーしていました)
でも先の参照ファイルと同じで
同じ動画に対してほぼ同時にダウンロード処理が走った場合
psコマンドを実行してから実際にwgetコマンドを実行するまでの間に
チェックを抜けてしまうことが考えられるのでどうにかしたいなと思ってます
ちょっと後出しになって申し訳ないですが
ダウンロードの処理はさまざまな状況で実行されることがあり
これからダウンロードするぞってターミナルからコマンドを打つこともありますが
cron登録していて自動でダウンロードが走るようにもしているため
そういう適当な運用でも回避できればと考えています
2018/08/27(月) 14:36:33.24
>>24
ありがとうございます
試してみたいと思いますが
lsof でチェックしてオープンされていないと判断して継続のwgetがオープンする間に
並行して実行された処理でwgetがオープンしてしまう可能性があるので・・・
シェルでやるには難しい処理でしょうか?
ありがとうございます
試してみたいと思いますが
lsof でチェックしてオープンされていないと判断して継続のwgetがオープンする間に
並行して実行された処理でwgetがオープンしてしまう可能性があるので・・・
シェルでやるには難しい処理でしょうか?
2018/08/27(月) 14:38:01.66
>>22
>>1-15 あたりをご覧になると分かりとおり、
このスレは荒らしが立てて維持しています。
特段の理由がなければ本スレ
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
の利用をお勧めします。
>>1-15 あたりをご覧になると分かりとおり、
このスレは荒らしが立てて維持しています。
特段の理由がなければ本スレ
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
の利用をお勧めします。
2018/08/27(月) 15:17:33.08
サーバーのサービスではなく、
ユーザは自分1人だよね。cronも動いているけど。
それなら、ミリ秒単位で処理開始がぶつかることなんて想定しなくてもよいのでは。
人命がかかっているような処理なら別だけど。
ユーザは自分1人だよね。cronも動いているけど。
それなら、ミリ秒単位で処理開始がぶつかることなんて想定しなくてもよいのでは。
人命がかかっているような処理なら別だけど。
2018/08/28(火) 06:51:31.61
2018/08/28(火) 15:13:22.37
ずっと楽をするために今努力して作りこむってのは間違っていない
まあ出来ないと思うときは妥協は必要だが
まあ出来ないと思うときは妥協は必要だが
31名無しさん@お腹いっぱい。
2018/08/28(火) 15:25:38.94 >>26
ファイルに対応する「ロックファイル」を作って、その存在確認をするのが定石だったみたい
既にロックファイルが存在していたら、別のプロセスがファイルを使っていると見做す
その際ロックファイルの存在確認と作成を「同時」(アトミック)に行うのが大事だそうで
そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編)
https://heartbeats.jp/hbblog/2013/10/atomic03.html
こんな感じかな
lockfile="${outputfile}".lock
if ln -s -- $$ "${lockfile}" 2>/dev/null; then
(
unlock() { rm -- "${lockfile}"; }
trap "unlock" EXIT HUP INT QUIT SEGV TERM
wget -c -O "${outputfile}" "${url}"
) &
fi
ファイルに対応する「ロックファイル」を作って、その存在確認をするのが定石だったみたい
既にロックファイルが存在していたら、別のプロセスがファイルを使っていると見做す
その際ロックファイルの存在確認と作成を「同時」(アトミック)に行うのが大事だそうで
そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編)
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
2018/08/29(水) 09:19:34.39
$ yotei.py 201808290900
って感じでスクリプトの引数に今日の年月日0900(date +%Y%m%d0900)を入れて実行したいです。
cronで実行したいのですが、date +%Y%m%d0900の出力をyotei.pyの引数に入れるには、1行でどうやって書いたらいいですか?
って感じでスクリプトの引数に今日の年月日0900(date +%Y%m%d0900)を入れて実行したいです。
cronで実行したいのですが、date +%Y%m%d0900の出力をyotei.pyの引数に入れるには、1行でどうやって書いたらいいですか?
2018/08/29(水) 09:26:24.72
$ yotei.py namae 201808290900
だったので、2番目の引数にdate +%Y%m%d0900の出力を入れたいです。
だったので、2番目の引数にdate +%Y%m%d0900の出力を入れたいです。
2018/08/29(水) 09:54:06.25
すぐ思いついたのはシェルスクリプトを1個増やして以下のようにする
export ymd0900=`date +%Y%m%d0900`
yotei.py namae $ymd0900
それをcronから呼ぶ
export ymd0900=`date +%Y%m%d0900`
yotei.py namae $ymd0900
それをcronから呼ぶ
2018/08/29(水) 10:03:21.87
2018/08/29(水) 10:16:33.10
2018/08/30(木) 20:22:06.89
サマータイム導入に気をつけろよ
ローカルタイム使ってると同じ日時が
2回でてくることになるぜ
ローカルタイム使ってると同じ日時が
2回でてくることになるぜ
2018/08/31(金) 06:31:36.33
EUじゃサマータイムは廃止だっていうのにマジで日本はこれから導入するのか?
趣味でプログラム作ってるだけなのに余計な処理増えるのはホント困る…。
趣味でプログラム作ってるだけなのに余計な処理増えるのはホント困る…。
2018/09/09(日) 01:40:34.50
>>22
youtube-dlならニコニコにも対応してるしタイトルとIDそのままで保存できるよ
但しここ数年の動画はDL速度が極端に遅い上に途中で必ず落ちる
[download] 5.6% of 202.83MiB at 98.22KiB/s ETA 33:15[download] Got server HTTP error: Downloaded 12014750 bytes, expected 212678720 bytes. Retrying (attempt 1 of 10)...
ERROR: unable to download video data: HTTP Error 403: Forbidden
永続リトライ設定でもこうなるししmpvでも再生中断するからな
昔のflvなんかは高速だけど年代で仕様が違う辺りエロサイトより酷い
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なんかは高速だけど年代で仕様が違う辺りエロサイトより酷い
2018/09/09(日) 08:27:37.92
東京オリンピックまでにサマータイム導入
てのはどう考えても物理的に不可能だから
話は立ち消えになるだろうけど、将来、
導入されないとも限らない
ローカルタイムを出力するときは必ず
timezoneを付けておいたほうがいい
てのはどう考えても物理的に不可能だから
話は立ち消えになるだろうけど、将来、
導入されないとも限らない
ローカルタイムを出力するときは必ず
timezoneを付けておいたほうがいい
2018/09/09(日) 12:38:12.16
>>40
YAGNI。必要になってから対応するよw
YAGNI。必要になってから対応するよw
2018/09/09(日) 19:40:32.45
あっちのスレめっちゃ荒れてるじゃん
2018/09/10(月) 08:35:40.82
>>40
どうやって対応したらよい?
どうやって対応したらよい?
2018/09/10(月) 09:38:34.63
>>42
このスレ立てた奴が荒らしに行ってるからな。
あっちの板に嫌がらせで重複スレまで立てるという性格の悪さ。
そういう悪人の立てたこのスレ使ってると、悪人の一味みたいな立ち位置に属することになるぜ。
このスレ立てた奴が荒らしに行ってるからな。
あっちの板に嫌がらせで重複スレまで立てるという性格の悪さ。
そういう悪人の立てたこのスレ使ってると、悪人の一味みたいな立ち位置に属することになるぜ。
2018/09/10(月) 10:02:10.94
>>43
要件による。どうしたらいいかは客にでも聞いてこい
要件による。どうしたらいいかは客にでも聞いてこい
2018/09/10(月) 16:10:33.13
ゴリホーモの嫌がらせ陰湿やなあ
2018/09/10(月) 16:45:10.08
なんのためにプログラム板に移動したんんだっけ?
人を増やすため?
人を増やすため?
2018/09/10(月) 21:52:59.04
2018/09/11(火) 12:13:26.79
でもIDつくのが嫌だったんでしょう?
IDつくのが嫌じゃなくなったってこと?
IDつくのが嫌じゃなくなったってこと?
2018/09/11(火) 13:49:11.52
>>49
IDつくと自分が荒らしてることが分かるから嫌だったけど、
向こうのスレについてはスレ自体を敵視しているから、
自分が荒らしてることがバレバレであっても、スレを使いづらくしたい
ってことじゃないかな。
IDつくと自分が荒らしてることが分かるから嫌だったけど、
向こうのスレについてはスレ自体を敵視しているから、
自分が荒らしてることがバレバレであっても、スレを使いづらくしたい
ってことじゃないかな。
2018/09/11(火) 15:12:37.72
でもこのスレも使いづらくしてたんでしょう?
2018/09/11(火) 17:42:07.09
2018/09/12(水) 04:28:30.52
>>52
いやいや、単に荒らしは最初から隠すつもりもなく、
バレようがバレまいが関係ないんだよ。
荒らしにとってはは最初から隠してるわけでもないが、
でもこのスレの住民がその荒らしのIDを見たくて移動したんでしょ?
それでんで、見て何がしたかったのか不明だけどなw
IDが出ていれば荒らされないとでも思った?
いやいや、単に荒らしは最初から隠すつもりもなく、
バレようがバレまいが関係ないんだよ。
荒らしにとってはは最初から隠してるわけでもないが、
でもこのスレの住民がその荒らしのIDを見たくて移動したんでしょ?
それでんで、見て何がしたかったのか不明だけどなw
IDが出ていれば荒らされないとでも思った?
2018/09/12(水) 08:39:27.35
>>53
荒らしさん、こんにちはー
荒らしさん、こんにちはー
2018/09/12(水) 13:03:52.35
2018/09/12(水) 13:57:49.01
IDを何に使うかなんて自明でしょ。
まさか分からないってことはないよな?
まさか分からないってことはないよな?
2018/09/13(木) 04:39:22.11
荒らしをNGIDにして見えなくするため、という説がある
確かにNGIDにすると見えなくなるが、
荒らしの書き込みを止めることはできない
荒らしはどんどん自分の意見を書き込むが
それに対しての反論はできない。
なぜなら荒らしの書き込みが見えないから
荒らしとNGIDに入れてない人とのやり取りでスレは埋まっていく
はたから見れば、話についてこれず時々レスするが
荒らしに論破され何も言い返せない構図のできあがり
それ全体の荒らしの濃度が高まる
そしてIDは変わるから毎日の登録作業が増える。
忘れるとついレスをしてしまう
確かにNGIDにすると見えなくなるが、
荒らしの書き込みを止めることはできない
荒らしはどんどん自分の意見を書き込むが
それに対しての反論はできない。
なぜなら荒らしの書き込みが見えないから
荒らしとNGIDに入れてない人とのやり取りでスレは埋まっていく
はたから見れば、話についてこれず時々レスするが
荒らしに論破され何も言い返せない構図のできあがり
それ全体の荒らしの濃度が高まる
そしてIDは変わるから毎日の登録作業が増える。
忘れるとついレスをしてしまう
2018/09/13(木) 09:15:51.30
というわけで、以下のどっちかの運用にするのがよくあるパターンだな。
・このIDは昔から粘着してる奴だから無視するぜってコメントを時々入れつつ無視する
・奇特な人物がいちいち反論するので、スレにいる他のメンバーは、連鎖アボーン設定して安心してその議論全体を無視する
IDがないとこういう回避ができないから、ひたすら我慢することになる。
・このIDは昔から粘着してる奴だから無視するぜってコメントを時々入れつつ無視する
・奇特な人物がいちいち反論するので、スレにいる他のメンバーは、連鎖アボーン設定して安心してその議論全体を無視する
IDがないとこういう回避ができないから、ひたすら我慢することになる。
2018/09/13(木) 15:25:23.10
連鎖あぼーんって荒らしが誰だれかれ構わずレスしたら
みんな消えちゃうの?
みんな消えちゃうの?
2018/09/13(木) 15:40:35.15
それを荒らしにわざわざ教えてやる理由はないな。
2018/09/13(木) 15:45:05.41
お前が荒らしだろ
2018/09/13(木) 15:45:42.12
バレたかw
2018/09/13(木) 15:46:13.40
まあ回線切ってIPアドレスを変えればいいだけだしな
2018/09/13(木) 20:00:10.94
>>59
やってみればいいんじゃね?
やってみればいいんじゃね?
2018/09/13(木) 21:16:50.93
つまりIDやIPアドレスを変えてNG避けする意志のある荒らしってことだから、
IPアドレスも表示させるようにして、
IPアドレスの範囲を使ってNG登録するのもやむなしってことだな。
今でも2つのプロバイダーを使い分けて自演してるって
自分でバラしてたから、NG登録する範囲も2通りは必要だと。
IPアドレスも表示させるようにして、
IPアドレスの範囲を使ってNG登録するのもやむなしってことだな。
今でも2つのプロバイダーを使い分けて自演してるって
自分でバラしてたから、NG登録する範囲も2通りは必要だと。
2018/09/15(土) 09:20:57.31
特定文字列の除外リストを元に除外処理をしたいんだけど
リストとかあきらめてgrepをフィルタファイルとして別するのが一番楽?
やりたいのは以下のようなことなんだけど
シェルスクリプトなのにプログラミング的なことやって
grepのフィルタを組み立てることに違和感を感じてる(面倒とはっきり言えって?)
echo ${DATA_REC} | grep -e AAA -e BBB -e CCC
if [ $? -eq 0 ]
then
continue
fi
# 継続処理
リストとかあきらめてgrepをフィルタファイルとして別するのが一番楽?
やりたいのは以下のようなことなんだけど
シェルスクリプトなのにプログラミング的なことやって
grepのフィルタを組み立てることに違和感を感じてる(面倒とはっきり言えって?)
echo ${DATA_REC} | grep -e AAA -e BBB -e CCC
if [ $? -eq 0 ]
then
continue
fi
# 継続処理
67名無しさん@お腹いっぱい。
2018/09/15(土) 09:24:06.05 > grepをフィルタファイルとして別するのが一番楽?
ってのはファイルにgrepのコマンドを書いてreadで読んで
echo ${DATA_REC} ${grep_cmd}
とかにするってことね
grepコマンドが書かれてたら適用
書かれてなかったらスルーって感じ
ってのはファイルにgrepのコマンドを書いてreadで読んで
echo ${DATA_REC} ${grep_cmd}
とかにするってことね
grepコマンドが書かれてたら適用
書かれてなかったらスルーって感じ
2018/09/15(土) 09:26:44.49
ああパイプがうまくいかないから若干判定が必要か・・・
pi@melchior /tmp $ export grep_cmd=" | grep -e AA -e BB"
pi@melchior /tmp $ echo AAA $grep_cmd
AAA | grep -e AA -e BB
pi@melchior /tmp $ echo AAA | $grep_cmd
-bash: |: command not found
pi@melchior /tmp $ export grep_cmd=" grep -e AA -e BB"
pi@melchior /tmp $ echo AAA | $grep_cmd
AAA
pi@melchior /tmp $
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 $
2018/09/15(土) 10:04:14.90
もうベタで書いてしまった・・・
でも順調!すげーよく動いてる!
この件は今後の課題にしよう
でも順調!すげーよく動いてる!
この件は今後の課題にしよう
2018/09/15(土) 11:49:54.77
除外する文字列をファイルに入れて
grep -f か grep -v -f でいいような気がする
grep -f か grep -v -f でいいような気がする
2018/09/15(土) 12:13:24.53
7271
2018/09/15(土) 12:37:34.287371
2018/09/15(土) 12:43:55.58 grep -f 使えばいいから不要だが
お手軽に>>66のようなことをするのならこうかな
リストにスペースなどが入っていたらうまくいかんがw
文字列の組み立ての参考として
echo ${DATA_REC} | grep $(printf ' -e %s' $(cat list))
お手軽に>>66のようなことをするのならこうかな
リストにスペースなどが入っていたらうまくいかんがw
文字列の組み立ての参考として
echo ${DATA_REC} | grep $(printf ' -e %s' $(cat list))
2018/09/22(土) 07:11:59.06
シェルスクリプトじゃなくてシェルの基礎を訊いてアレだけど
bashの$()と``って使い分けた方がいいの?
端末ではバッククォート多用してるけども
bashの$()と``って使い分けた方がいいの?
端末ではバッククォート多用してるけども
2018/09/22(土) 09:23:42.74
``は古い書き方。ネストができないという欠点が有る
bashに限らず、$()を使ったほうが良い。欠点は文字が一文字多くなるだけ
bashに限らず、$()を使ったほうが良い。欠点は文字が一文字多くなるだけ
2018/09/22(土) 10:20:58.39
きっちりエスケープすればネストはできるよ。もちろん推奨はせんが
2018/10/07(日) 11:42:06.75
2018/10/13(土) 19:33:57.01
2018/11/09(金) 16:05:12.56
test $(date +%w) -eq 5
今日が金曜日なら5が出るんですが、-eq というのはコマンドなのかtestコマンドのオプションなのか、これは何ですか?
今日が金曜日なら5が出るんですが、-eq というのはコマンドなのかtestコマンドのオプションなのか、これは何ですか?
2018/11/09(金) 16:08:05.57
自己レス
-eq はtestコマンドのオプションで、==の事みたいですね
-eq はtestコマンドのオプションで、==の事みたいですね
2018/11/09(金) 16:09:52.77
test コマンドのオプションです。
ところで今日は金曜日ですが5は出ませんよね。
戻り値は0となりますが……何か勘違いしている気がします。
ところで今日は金曜日ですが5は出ませんよね。
戻り値は0となりますが……何か勘違いしている気がします。
2018/11/09(金) 16:18:31.36
すみません
test $(date +%w) -eq 5 && echo "今日は金曜日!"
これだと、金曜日だとechoが実行されました
test $(date +%w) -eq 5 && echo "今日は金曜日!"
これだと、金曜日だとechoが実行されました
2018/11/09(金) 16:20:38.51
2018/11/09(金) 16:32:51.67
毎月第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
これだと今週の月曜日には実行するされないですよね?
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
これだと今週の月曜日には実行するされないですよね?
2018/11/10(土) 02:31:24.55
読みづらい。testなんて使うな
[ $(date +%w) -eq 5 ] && echo "今日は金曜日!"
[ $(date +%w) -eq 5 ] && echo "今日は金曜日!"
2018/11/10(土) 10:01:16.06
2018/11/10(土) 10:12:06.10
man [
2018/11/10(土) 18:00:25.18
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が返ります
これって何故なんでしょう?
$ 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 >>88
[[ ... ]] で使える演算子に <= は存在しない
それは数の比較ではなく
[[ "1" < "=2" ]]
という文字列の比較になっている
なので <= の右に空白を置くと
[[ "1" < "=" "2" ]]
となりエラー
条件式
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBW
[[ ... ]] で使える演算子に <= は存在しない
それは数の比較ではなく
[[ "1" < "=2" ]]
という文字列の比較になっている
なので <= の右に空白を置くと
[[ "1" < "=" "2" ]]
となりエラー
条件式
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBW
9088
2018/11/10(土) 21:37:24.33 >>89
さっそくありがとうございます
そうか、イコールをつけない不等号で上手く動いてるように見えるのは、文字列として辞書順で比較してるからなんですね
どうやら私の頭の中では、二重丸括弧での算術式展開とゴッチャになってたみたいです
何時間も唸ってたのが一撃でスッキリしました。ありがとうございました
さっそくありがとうございます
そうか、イコールをつけない不等号で上手く動いてるように見えるのは、文字列として辞書順で比較してるからなんですね
どうやら私の頭の中では、二重丸括弧での算術式展開とゴッチャになってたみたいです
何時間も唸ってたのが一撃でスッキリしました。ありがとうございました
2018/11/10(土) 21:45:21.63
記号のコマンドってドットと[以外にもあるんか?
92名無しさん@お腹いっぱい。
2018/11/10(土) 22:29:10.53 >>91
:
:
2018/11/11(日) 00:38:12.80
94名無しさん@お腹いっぱい。
2018/11/11(日) 19:15:20.552018/11/11(日) 23:47:57.65
>>87
それで出てくるのは /usr/bin[ の方のmanじゃないだろうか
それで出てくるのは /usr/bin[ の方のmanじゃないだろうか
2018/11/15(木) 14:21:20.04
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 `['.
$ 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 `['.
2018/11/21(水) 22:42:24.51
sedで\1を変数名としていっぺんに異なる部分を異なる変数の内容で変換できませんか?
sed -e "s/<\(.*\)>/${\1}/g"
こんなかんじの
sed -e "s/<\(.*\)>/${\1}/g"
こんなかんじの
2018/11/29(木) 16:58:28.90
#!/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の引用符の扱われ方をググってみたりしても、何が何だかさっぱり分からない。
どなたか助けてくれませんか。
# 変数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の引用符の扱われ方をググってみたりしても、何が何だかさっぱり分からない。
どなたか助けてくれませんか。
2018/11/29(木) 18:06:56.14
自己レス
curlだからとか関係ないな。変数にシングルクォートで囲ったものが入ってて、それをダブルクォートで囲った配列展開してるんだから、そのパラメーターはそのままシングルクォートつきになって当然。
しかし、ETAGはダブルクオートを含むしhttpリクエストヘッダはスペースを含むから、全体をシングルクォートで囲まなきゃならんのだよな。
やっぱどのタイミングでどのクォートがどう展開されるのか、一段階ずつ追いかけてみるしかないのかな
curlだからとか関係ないな。変数にシングルクォートで囲ったものが入ってて、それをダブルクォートで囲った配列展開してるんだから、そのパラメーターはそのままシングルクォートつきになって当然。
しかし、ETAGはダブルクオートを含むしhttpリクエストヘッダはスペースを含むから、全体をシングルクォートで囲まなきゃならんのだよな。
やっぱどのタイミングでどのクォートがどう展開されるのか、一段階ずつ追いかけてみるしかないのかな
2018/11/29(木) 21:56:13.42
なんか混乱しとるな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" だし、引数がゼロの場合は、書かなかったのと同じとなる("" 空文字にはならない)
このように文字列として囲う機能じゃなくて、中に入ってる文字や変数の解釈の仕方に影響を与える機能
まあ、ダブルクォートは、他言語を使っている人からすれば
直感に反する機能だってことに、俺も最近気づいたんだけどな
ただどこがどう違うかを言葉で説明したことがわけじゃない。やってるみるか?
・シェルスクリプトは文字列として展開されて実行されているようでそうではない
・ダブルクォートは文字列を囲う機能ではなく、変数展開の挙動を変えるエスケープの一種
この二つに集約されるかなぁ
> しかし、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" だし、引数がゼロの場合は、書かなかったのと同じとなる("" 空文字にはならない)
このように文字列として囲う機能じゃなくて、中に入ってる文字や変数の解釈の仕方に影響を与える機能
2018/11/29(木) 22:00:40.89
ちなみに "$@" を複数の引数に展開されたくなければ "$*" を使う
2018/11/30(金) 06:16:21.18
>>100-101
ありがとう。おかげで、サクッと片付きました。素直に
OPT=('--header' "If-None-Match: ${ETAG}")
curl "${OPT[@]}" "${URL}"
で何の問題もなく動作しました。最初にcurlについて調べてたときにETAGを使う例でシングルクォートが使われてたのに、ずっと脳味噌が引っ張られてたようです。
上の行で変数に入れる時点で、スペースを含む一つの文字列として扱われてるんだから、あとはその中身がなんであるかに関係なく、"$[@]"で展開すればいいわけですね。
ありがとうございました。
ありがとう。おかげで、サクッと片付きました。素直に
OPT=('--header' "If-None-Match: ${ETAG}")
curl "${OPT[@]}" "${URL}"
で何の問題もなく動作しました。最初にcurlについて調べてたときにETAGを使う例でシングルクォートが使われてたのに、ずっと脳味噌が引っ張られてたようです。
上の行で変数に入れる時点で、スペースを含む一つの文字列として扱われてるんだから、あとはその中身がなんであるかに関係なく、"$[@]"で展開すればいいわけですね。
ありがとうございました。
103名無しさん@お腹いっぱい。
2018/12/25(火) 18:37:21.02 bashでログ出力処理を一括でやるにはどうすれば良いですか?
powesshellだと、Start-Transcript に対応するコマンドを教えてください
powesshellだと、Start-Transcript に対応するコマンドを教えてください
2018/12/26(水) 01:04:21.34
105名無しさん@お腹いっぱい。
2018/12/26(水) 08:34:29.572018/12/26(水) 08:47:38.26
回答ちゃんと読め
2018/12/26(水) 09:08:14.92
PowerShellなんぞ興味が無いから知らんという人が多かろう
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい
知ってるがお前の態度が気に入らない(AA略)
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい
知ってるがお前の態度が気に入らない(AA略)
108名無しさん@お腹いっぱい。
2018/12/26(水) 18:22:57.16 生意気だな
2018/12/26(水) 18:30:53.30
ドザはどこ行ってもあれだな
2018/12/26(水) 19:04:39.84
ドザがー ドザがー
111名無しさん@お腹いっぱい。
2019/01/10(木) 14:22:50.61 やっつけ
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません
112名無しさん@お腹いっぱい。
2019/01/26(土) 23:47:05.51 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
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
2019/01/28(月) 19:18:42.39
・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 と書けば十分なはず。
・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 findした結果を1行づつ配列に代入したい場合にはどうすればよいでしょうか?
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。
array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。
array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")
2019/01/29(火) 12:56:34.68
IFSを改行のみにする
116112
2019/01/30(水) 08:38:21.70 >>113
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。
しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。
しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。
2019/02/05(火) 14:26:11.34
少々スレ違いですがお許しください
OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが
バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな
OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが
バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな
2019/02/07(木) 03:39:18.86
少々じゃないくらい違うなあ
2019/02/07(木) 03:40:20.92
しかもマルチかよ
120名無しさん@お腹いっぱい。
2019/07/27(土) 21:39:15.96 ログインシェルでfishを使う時、
https://gist.github.com/mitukiii/4954559
できたらやり方教えてください
$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる
https://gist.github.com/mitukiii/4954559
できたらやり方教えてください
$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる
2019/07/30(火) 12:52:38.09
ここはシェルスクリプトのスレです。
シェルの使い方のスレではありません。
スクリプトの話をしてください
シェルの使い方のスレではありません。
スクリプトの話をしてください
2019/07/30(火) 22:27:15.09
具体的に何を語ったらいいの
2019/07/31(水) 19:16:20.41
シェルスクリプトだけで実装した一番高速なFizzBuzzはどんなものかとか
124名無しさん@お腹いっぱい。
2019/08/01(木) 10:04:58.33 yash使てる?
2019/08/01(木) 14:04:09.49
使えてないという報告は一つもない
2019/08/01(木) 22:41:59.49
「使てる(つこてる)?」は「使っていますか?」という意味の質問であって、使用可能かどうかを聞いてる訳では無いのでは
2019/08/01(木) 23:04:57.30
真面目君か
2019/08/05(月) 09:18:07.69
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
と書かれたテキストファイルを作りたいです
echo -e ほにゃらら"\n"ほんじゃらら > index.txt
seq -f "%g あいう" 0 5 > index.txt
ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
と書かれたテキストファイルを作りたいです
echo -e ほにゃらら"\n"ほんじゃらら > index.txt
seq -f "%g あいう" 0 5 > index.txt
ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです
2019/08/05(月) 10:32:33.45
awkとかじゃいかんの
2019/08/05(月) 11:55:34.38
>>129
ありがとうございます
調べてみました
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
あいう
EOF
seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
echo さしす >> index.txt
ありがとうございます
調べてみました
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
あいう
EOF
seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
echo さしす >> index.txt
2019/08/05(月) 11:55:45.48
こうやると
ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす
と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです
ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす
と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです
2019/08/05(月) 12:05:17.31
ブレース展開
2019/08/05(月) 12:11:44.60
一応これでうまくいきました
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
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
2019/08/05(月) 12:13:50.09
>>132
自分のやり方はなだったらしそうなのでそのキーワード調べてみます
自分のやり方はなだったらしそうなのでそのキーワード調べてみます
2019/08/05(月) 12:28:22.64
えー、難しい...
俺>>129はこんなもんしか考えてなかったけど
awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'
俺>>129はこんなもんしか考えてなかったけど
awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'
136名無しさん@お腹いっぱい。
2019/08/05(月) 12:28:39.742019/08/05(月) 12:29:43.26
あ、バックスラッシュが円記号になってしまった...
2019/08/05(月) 12:30:25.69
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
EOF
printf "かきく\n%s\n" {0..5}あいう >> index.txt
これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない
ほにゃらら
ほんじゃらら
EOF
printf "かきく\n%s\n" {0..5}あいう >> index.txt
これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない
2019/08/05(月) 12:32:03.53
2019/08/05(月) 12:43:19.31
141名無しさん@お腹いっぱい。
2019/08/05(月) 13:06:08.43 >>140
> これだとファイルへの書き込みは1回ですみますね
どんな方法で作るにせよ { } で括れば一回にまとめられるよ
{
printf '%s\n' 'ほにゃらら'
printf '%s\n' 'ほんじゃらら'
printf 'かきく\n%s あいう\n' $(seq 0 5)
printf '%s\n' 'さしすせそ'
} >index.txt
> これだとファイルへの書き込みは1回ですみますね
どんな方法で作るにせよ { } で括れば一回にまとめられるよ
{
printf '%s\n' 'ほにゃらら'
printf '%s\n' 'ほんじゃらら'
printf 'かきく\n%s あいう\n' $(seq 0 5)
printf '%s\n' 'さしすせそ'
} >index.txt
2019/08/05(月) 15:17:00.15
>>141
こんな方法もあるんですね
ありがとうございます
curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。
URL="hoge"
ROKU="curl -sS $URL | sed -n '6p'"
echo "あいうえお"$ROKU"さしすせそ"
しかし結果はこうなりました
あいうえおcurl -sS hoge | sed -n '6p'さしすせそ
こんな方法もあるんですね
ありがとうございます
curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。
URL="hoge"
ROKU="curl -sS $URL | sed -n '6p'"
echo "あいうえお"$ROKU"さしすせそ"
しかし結果はこうなりました
あいうえおcurl -sS hoge | sed -n '6p'さしすせそ
2019/08/05(月) 15:18:57.84
2019/08/05(月) 16:33:57.17
printf "あいうえお"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"
2019/08/05(月) 17:18:21.98
2019/08/05(月) 18:01:04.99
>>128
> と書かれたテキストファイルを作りたいです
こうすれば良いのでは?
cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE
> と書かれたテキストファイルを作りたいです
こうすれば良いのでは?
cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE
147名無しさん@お腹いっぱい。
2019/08/05(月) 19:41:32.36 >>142
コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには
「コマンド置換」 $(…) を使います
あと、「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"
コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには
「コマンド置換」 $(…) を使います
あと、「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"
2019/08/06(火) 10:37:34.03
2019/08/29(木) 02:47:55.71
$ bash -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
10
この動作ってPOSIX的にはどうなの?
10
この動作ってPOSIX的にはどうなの?
2019/08/29(木) 05:08:51.78
読みづれーなw
bash -c '
unset a b
echo 10 | read a
# echo $a = 空
let b=a+10
echo $b
'
letはPOSIXにない
readはサブシェルなんだからaは空に決まってる
ごく普通の正しい動作
bash -c '
unset a b
echo 10 | read a
# echo $a = 空
let b=a+10
echo $b
'
letはPOSIXにない
readはサブシェルなんだからaは空に決まってる
ごく普通の正しい動作
2019/08/29(木) 05:09:53.11
正しいコード
bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'
bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'
2019/08/29(木) 23:22:24.50
letまで考えて無かったすまん
まあ説明の為なのでそこは目をつぶってくれたまい
opensuzeなんだけども
$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$
この動作ってPOSIX的にはどうなの?
まあ説明の為なのでそこは目をつぶってくれたまい
opensuzeなんだけども
$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$
この動作ってPOSIX的にはどうなの?
2019/08/30(金) 06:34:55.40
バグ
2019/09/10(火) 19:48:12.68
curlのやり方教えてください
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?
https://i.imgur.com/Nvm7CMj.jpg
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?
https://i.imgur.com/Nvm7CMj.jpg
2019/09/11(水) 14:49:50.58
ブラウザの開発ツールからcURLでコピーした方が早そうだぞ
2019/09/11(水) 15:08:13.17
2019/09/12(木) 17:05:57.53
アプリの起動判定をしたいんですが
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?
2019/09/12(木) 17:48:19.11
killall -0 アプリ名
とか?
とか?
2019/09/12(木) 19:39:47.90
2019/09/13(金) 07:33:53.20
起動してないとわかっても、その直後に起動することも有るから
ロックを掛けないと確実にはならないけどな
ロックを掛けないと確実にはならないけどな
2019/09/14(土) 01:15:30.85
pgrepでええやん、と思ったけど環境依存か
2019/09/14(土) 02:03:14.71
>>160
どの環境でも使えるロックの機構ってなにかある?
どの環境でも使えるロックの機構ってなにかある?
2019/09/14(土) 03:45:32.29
>>162
set -C もしくは mkdir
set -C もしくは mkdir
164名無しさん@お腹いっぱい。
2020/01/20(月) 04:38:26.60 怒らないで教えて欲しいんだけど何でお前らPowerShell使わないの?
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ
2020/01/20(月) 07:42:20.05
>>164
なんでそんなに無意味な宣伝するの?
なんでそんなに無意味な宣伝するの?
2020/01/20(月) 13:22:02.65
2020/01/20(月) 15:09:31.95
>>164
linux のコマンド群が使えないから
linux のコマンド群が使えないから
2020/01/21(火) 10:19:02.74
ソースコードをダウンロードしてビルドしようとしたら…
ERROR: You must either be root or be able to use sudo
ビルドするのに root になれって? この時点で話にならないよ。
ERROR: You must either be root or be able to use sudo
ビルドするのに root になれって? この時点で話にならないよ。
2020/01/21(火) 11:46:33.77
>>168
それってパワーシェルの話?
それってパワーシェルの話?
2020/01/21(火) 21:58:33.32
そのメッセージでググっても、インストール時のメッセージしか見つからないね
https://www.google.com/search?q=%22ERROR%3A+You+must+either+be+root+or+be+able+to+use+sudo%22
ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w
https://www.google.com/search?q=%22ERROR%3A+You+must+either+be+root+or+be+able+to+use+sudo%22
ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w
2020/01/21(火) 22:20:06.48
>>168
エラーメッセージには「sudo を使え」と書いてあるが
エラーメッセージには「sudo を使え」と書いてあるが
2020/01/22(水) 02:27:49.96
とりあえず適当なことを言ってPowerShellを
貶めたかったんだろ?バレて逆効果になってるがw
貶めたかったんだろ?バレて逆効果になってるがw
2020/02/17(月) 09:08:53.72
grep 等の外部コマンド?を使わずに任意の文字列の最初に見つかる3桁の数字を得る方法があれば教えて下さい
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)
2020/02/17(月) 12:51:47.30
bashなら=~と、$BASH_REMATCH使えばできるんじゃね
2020/02/17(月) 12:52:43.82
>>173
おまえは俺か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]}"}
おまえは俺か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]}"}
2020/02/17(月) 13:01:06.73
シェルスクリプトだと(bash依存は知らん)
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。
だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。
だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。
2020/02/19(水) 01:25:53.44
ありがとうございます
面倒でも前後から不要部分を取り除くしかないのですね
面倒でも前後から不要部分を取り除くしかないのですね
2020/02/19(水) 03:44:34.80
「マッチした部分を含めて削除」ってどうやるの?
2020/02/19(水) 07:39:09.82
>>178
${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
${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
2020/02/19(水) 12:18:21.18
>>179
丁寧にありがとう!
丁寧にありがとう!
2020/02/21(金) 17:55:59.15
182名無しさん@お腹いっぱい。
2020/02/22(土) 16:29:53.08 それらをPowerShellで書くとどうなるか?
一度でも考えてみたことはありますか?
一度でも考えてみたことはありますか?
2020/02/22(土) 16:45:28.02
PowerShellで書くとLinuxで動かすのが大変になります。
2020/02/26(水) 03:34:54.75
5年くらいするとセキュリティパッチが出なくなって使用禁止になるから
また作り直しになるんだろうどうせ。
また作り直しになるんだろうどうせ。
2020/03/13(金) 23:32:50.67
例えば中身が
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。
2020/03/14(土) 16:01:32.08
宿題は自分でやりなよ
187名無しさん@お腹いっぱい。
2020/03/14(土) 17:54:51.47 >>185
なんでそんな分かりづらい説明するんだ?
なんでそんな分かりづらい説明するんだ?
188名無しさん@お腹いっぱい。
2020/03/14(土) 17:55:37.96 全く意味がわからん。
誰か翻訳してくれ
誰か翻訳してくれ
2020/03/14(土) 18:20:44.65
>>185
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ
2020/03/14(土) 18:34:21.42
>>189
日本語ではなくてbashでお願いします!!
日本語ではなくてbashでお願いします!!
2020/03/14(土) 18:41:35.26
>>188
結果だけ見たら
入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する
かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
結果だけ見たら
入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する
かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
192名無しさん@お腹いっぱい。
2020/03/14(土) 20:00:13.75 > 俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
これはなんで? 小さいとかの境目はどれくらい?
これはなんで? 小さいとかの境目はどれくらい?
2020/03/14(土) 20:15:35.44
そんなこと聞いてくるようではセンスがないよ
センスがない奴にいくら説明しても無駄
センスがない奴にいくら説明しても無駄
2020/03/14(土) 20:18:24.03
pythonだと単語のn文字目を取り出すなんて朝飯前だしな
関数書く手間が一つ省ける
関数書く手間が一つ省ける
2020/03/14(土) 20:24:34.26
疑問になった点は「テキストが小さいなら」です。
その他の話は聞いてません。
その他の話は聞いてません。
2020/03/14(土) 20:26:37.39
> pythonだと単語のn文字目を取り出すなんて朝飯前だしな
単語の3文字目(オフセット2から1文字)を取り出す
echo "${str:2:1}"
Pythonだとどう朝飯前なんですか?
単語の3文字目(オフセット2から1文字)を取り出す
echo "${str:2:1}"
Pythonだとどう朝飯前なんですか?
2020/03/14(土) 20:48:13.52
早く答えのスクリプトを書いてください!!
遅いですよ!!
遅いですよ!!
2020/03/14(土) 21:05:30.89
2020/03/14(土) 21:19:09.39
2020/03/14(土) 22:00:38.59
>>198
1MBってことは、1行256バイトとして4096行以下なら小さいってことですね。
10MBで約4万行、100MBで約40万行、1GBで400万行
昔のExcelの制限が1シート65000行だったことを考えると
エクセルで扱えるデータなら問題なさそうですね
1MBってことは、1行256バイトとして4096行以下なら小さいってことですね。
10MBで約4万行、100MBで約40万行、1GBで400万行
昔のExcelの制限が1シート65000行だったことを考えると
エクセルで扱えるデータなら問題なさそうですね
2020/03/14(土) 22:38:14.38
アスペかよw
アスペならちゃんと改行コードも数えるんだぞ?
アスペならちゃんと改行コードも数えるんだぞ?
2020/03/15(日) 13:40:07.33
2020/03/20(金) 18:13:05.78
185です。説明不足ですみません。
やりたいことは1行目を読み取り、2行目以降はそのままwhileループで最後まで読みたいのです。
ただそのためだけにフラグを使うのもなんだかなぁと。
やりたいことは1行目を読み取り、2行目以降はそのままwhileループで最後まで読みたいのです。
ただそのためだけにフラグを使うのもなんだかなぁと。
2020/03/20(金) 19:59:54.90
わざわざ空読みする理由が分かんねえ
今出来てる状態のスクリプト貼って何がうまく行かないのか説明してみ
今出来てる状態のスクリプト貼って何がうまく行かないのか説明してみ
2020/03/21(土) 00:02:26.75
#!/bin/sh
お願いします
お願いします
2020/03/21(土) 00:18:20.18
2020/03/21(土) 13:58:51.87
2020/03/21(土) 14:07:34.22
bash は重複しない4文字である。つまり2bitのデータと考えられる
日本語を1文字16bitのデータと考えると、
1文字をbashの4文字×8組=32個のデータで表現できる
つまりbashで質問すると32倍のデータが必要になる
1レスに2048バイト、1024文字を書き込めるから32文字の質問であれば
bashで質問することは可能
日本語を1文字16bitのデータと考えると、
1文字をbashの4文字×8組=32個のデータで表現できる
つまりbashで質問すると32倍のデータが必要になる
1レスに2048バイト、1024文字を書き込めるから32文字の質問であれば
bashで質問することは可能
2020/03/21(土) 15:26:35.50
向いてないんだろ
こういうの
こういうの
2020/03/22(日) 10:34:31.24
2020/03/22(日) 17:21:49.94
2020/03/23(月) 20:28:21.83
2020/03/24(火) 21:32:10.12
2020/04/11(土) 10:24:56.50
タブで字下げされてるテキストファイルの中にある
_TAG("S.T.A.R.T") が含まれる行と
_TAG("E.N.D") が含まれる行との間にある行数を数えるにはどうすればいいでしょうか
_TAG("S.T.A.R.T") が含まれる行と
_TAG("E.N.D") が含まれる行との間にある行数を数えるにはどうすればいいでしょうか
2020/04/11(土) 11:20:47.30
...... | sed -n '/_TAG("S.T.A.R.T")/,/_TAG("E.N.D")/p' | wc -l
こんな感じ
こんな感じ
2020/04/12(日) 07:36:15.54
さんくす
sedやwcなどの外部コマンド?を使わない方法はありますか?
sedやwcなどの外部コマンド?を使わない方法はありますか?
2020/04/12(日) 07:43:15.09
宿題は自分でやろう
2020/04/12(日) 13:13:39.28
>>216
そういうことするなら
perl5に行きなよ
普通はそれも最初から入ってて、文字処理に強い言語だから
---
そんな処理だと、その処理の前に
タグがネストしてたり、正しく対になっているのか調べれた方が安全
おみあげに類似したコードあげる
https://ideone.com/XCz8Ou
対が壊れてたら -1 を
壊れてないならネストの最大の深さを返す
そういうことするなら
perl5に行きなよ
普通はそれも最初から入ってて、文字処理に強い言語だから
---
そんな処理だと、その処理の前に
タグがネストしてたり、正しく対になっているのか調べれた方が安全
おみあげに類似したコードあげる
https://ideone.com/XCz8Ou
対が壊れてたら -1 を
壊れてないならネストの最大の深さを返す
2020/04/12(日) 17:00:27.78
>>218
ダクネスが居たように見えた
ダクネスが居たように見えた
2020/04/13(月) 19:58:42.58
>>214
問題の意図が明確
その _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") だけにするがな
その方がパースしやすいので
問題の意図が明確
その _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") だけにするがな
その方がパースしやすいので
2020/04/13(月) 19:59:20.04
あと _TAG("S.T.A.R.T") は複数あるのか?という質問も追加
ネストされている場合は考慮するのか?とか
ネストされている場合は考慮するのか?とか
2020/04/13(月) 20:01:47.27
まあいずれにしろテキストファイルは 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 < テキストファイル
こんな感じになるだろうが
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 < テキストファイル
2020/04/13(月) 20:03:02.16
>>218みたいにそういう場合だったら Perl にとかいうやつがいるけど
シェルスクリプトで同等のコードを書いても大差ないんだけどなw
シェルスクリプトで同等のコードを書いても大差ないんだけどなw
2020/04/13(月) 21:07:49.84
sedやwc使うなとかいう制約も謎だわ
言語やツールが何であれ結局裏で似たようなライブラリの関数呼び出すのに
言語やツールが何であれ結局裏で似たようなライブラリの関数呼び出すのに
2020/04/13(月) 21:38:58.14
理由がわからないなら普通に聞けばいいだけなのに。
自分が知らないだけなのに、なんでそんなことありえない、
あってたまるかみたいな書き込みをするんだろうねw
自分が知らないだけなのに、なんでそんなことありえない、
あってたまるかみたいな書き込みをするんだろうねw
2020/04/13(月) 22:33:21.03
理由がわからないんじゃなくて、そんなことを言い出す人間が理解できないって話だよ
こだわりがあるならこんなところで人に聞くんじゃないよって話で
こだわりがあるならこんなところで人に聞くんじゃないよって話で
2020/04/13(月) 22:41:09.86
自分とは違う方針の質問は受け付けない
そんなレスはこてんぱんにしてやる。ですか?
そんなレスはこてんぱんにしてやる。ですか?
2020/04/13(月) 23:40:18.71
自分の期待とは違う方針の回答は受け付けない
そんなスレはこてんぱんにしてやる。じゃないの?
そんなスレはこてんぱんにしてやる。じゃないの?
2020/04/14(火) 04:36:43.78
>>227
スレの流れ見たけど受け付けられてるじゃん
宿題を済ませたいのか知らないが
人に聞くくらいなら針路変更したらどう?
知り合いにコンピューターの勉強してた人居るけど
大学で課題をすべて友人からパクってたそうだ
今その人バイトで食いつないでる
ITの仕事できたら低くても年収400万は行ったろうにね
スレの流れ見たけど受け付けられてるじゃん
宿題を済ませたいのか知らないが
人に聞くくらいなら針路変更したらどう?
知り合いにコンピューターの勉強してた人居るけど
大学で課題をすべて友人からパクってたそうだ
今その人バイトで食いつないでる
ITの仕事できたら低くても年収400万は行ったろうにね
2020/04/14(火) 07:50:06.07
2020/04/14(火) 07:52:02.07
232名無しさん@お腹いっぱい。
2020/04/14(火) 08:10:41.322020/04/14(火) 08:12:21.45
問題を解決できないやつは
学歴がなんでも大成しないな
学歴がなんでも大成しないな
2020/04/14(火) 08:16:49.74
2chは口が悪いやつが多いけど
ここ見てると分かるように無償で相手してくれるやつがいるんだな
現実はどうだろう
そんなことないよ
社会に出れば分かるがフリーライダーは受け入れられない
街角でスケッチブックに助けてくださいって掲げるのか?
そんなの通報されて終わるよ
SNSなら答えてくれるって?
フォロワーも居ない人の相手なんて誰もしない
要するに2chしか質問する先がないんだ
ここ見てると分かるように無償で相手してくれるやつがいるんだな
現実はどうだろう
そんなことないよ
社会に出れば分かるがフリーライダーは受け入れられない
街角でスケッチブックに助けてくださいって掲げるのか?
そんなの通報されて終わるよ
SNSなら答えてくれるって?
フォロワーも居ない人の相手なんて誰もしない
要するに2chしか質問する先がないんだ
2020/04/14(火) 08:18:35.42
2020/04/14(火) 08:24:13.25
2020/04/14(火) 08:26:10.64
課題か仕事か知らんが問題を片付けてくれたのになぜ素直になれないんだろうか
仕事だったら出来上がらないから検収されずに報酬もらえないぞ
仕事だったら出来上がらないから検収されずに報酬もらえないぞ
2020/04/14(火) 08:29:48.56
JavaHouseってのがあって明らかに仕事に関係するであろう質問してた輩に
運営者の人がそれ幾らなのって聞いてたな
聞いた本人は無料ですってなんか意味の分からんこと言ってたが
運営者の人がそれ幾らなのって聞いてたな
聞いた本人は無料ですってなんか意味の分からんこと言ってたが
2020/04/14(火) 08:31:37.22
>>232
宝くじワロタ
宝くじワロタ
240名無しさん@お腹いっぱい。
2020/04/14(火) 08:44:03.74 >>230
それは単にその人が優秀だっただけ
それは単にその人が優秀だっただけ
2020/04/14(火) 09:06:13.53
課題をこなせず大学をやめて成功したって丸投げ派遣会社でも設立したんか
2020/04/14(火) 10:27:17.89
2020/04/14(火) 11:48:50.47
宿題は自分でやりましょうってことだけじゃ
2020/04/14(火) 12:53:01.03
>>243
全ての質問に対してそういう回答をしてるなら何も言わんよ
全ての質問に対してそういう回答をしてるなら何も言わんよ
2020/04/14(火) 16:26:20.38
>>230
まあ今どきの日本人はだいたいビル・ゲイツは知り合いだからなw
まあ今どきの日本人はだいたいビル・ゲイツは知り合いだからなw
2020/04/14(火) 16:29:02.33
2020/04/14(火) 16:51:38.83
自分なら質問者が
「今こうやってるけどもっと効率のいい方法ない?」
とか聞いてきたら答えてあげたくなる
一度答えてそーじゃねーよとか言われたら・・・w
「今こうやってるけどもっと効率のいい方法ない?」
とか聞いてきたら答えてあげたくなる
一度答えてそーじゃねーよとか言われたら・・・w
2020/04/14(火) 17:19:48.25
一度答えてそーじゃねーよと言われたら?
↓これみて「そーじゃねーよ」言われたと思っちゃったの?
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などの外部コマンド?を使わない方法はありますか?
↓これみて「そーじゃねーよ」言われたと思っちゃったの?
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などの外部コマンド?を使わない方法はありますか?
2020/04/14(火) 17:20:54.13
沸点が低いんだろうなぁ。
少しでもなにか言われたら、親を侮辱されたかのように感じるんだろうな
少しでもなにか言われたら、親を侮辱されたかのように感じるんだろうな
2020/04/14(火) 17:27:27.07
なんとなく答える前に
sedやwcなどの外部コマンド?を使わない方法はありますか?
と書いても、同じようにキレていそうな気がするなw
sedやwcなどの外部コマンド?を使わない方法はありますか?
と書いても、同じようにキレていそうな気がするなw
2020/04/14(火) 17:38:50.71
3連投かよw
そんなに悔しかったのかよw
そんなに悔しかったのかよw
2020/04/14(火) 18:07:42.02
レスしただけでこの反応w 矛先をずらしているのもありがちだなぁw
2020/04/14(火) 23:33:18.21
2020/04/15(水) 00:16:02.16
2020/04/15(水) 00:37:48.24
>>254
もういいから早くスクリプト作れって言ってんだよ
もういいから早くスクリプト作れって言ってんだよ
2020/04/15(水) 00:47:14.66
257名無しさん@お腹いっぱい。
2020/04/15(水) 08:44:47.782020/04/16(木) 00:36:27.10
>>253の後半からはawkのセンスありと見た
2020/04/16(木) 07:29:49.82
自分で man 読んで自分で出来るようになる方が自分にとって有益だと思うんだが…
2020/04/16(木) 12:09:07.65
awkでやればできるよ!・・・全部BEGIN
これ萎えるw
これ萎えるw
2020/04/17(金) 09:28:05.07
フレッシュなニンニクジュースを飲めばコロナの菌が死滅する
2020/04/19(日) 04:34:10.20
この板の住民なら生ニンニクで腸内細菌死滅して病院送りになるのは知ってそう
2020/04/19(日) 04:48:20.74
言うほどUNIXやシェルスクリプトってコロナ菌に関係あるか?
2020/04/19(日) 13:15:29.97
[ と [[ の違いなんかも理解できてないまま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
_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
2020/04/19(日) 22:46:59.99
>>264
> ループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
まず for f in `cat $INPUT_FILE`を使うのはやめよう
シェルスクリプトでテキストファイルを読むならwhile + read を使う
そしてread は read してから read すると次の行を read する(当たり前だw)
> ループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
まず for f in `cat $INPUT_FILE`を使うのはやめよう
シェルスクリプトでテキストファイルを読むならwhile + read を使う
そしてread は read してから read すると次の行を read する(当たり前だw)
266名無しさん@お腹いっぱい。
2020/04/26(日) 02:43:28.05 一応それらしいのを書いてみました。
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
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
2020/04/26(日) 07:48:46.75
そもそも 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
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
2020/04/26(日) 07:49:15.89
× endはいらない。
○ exitはいらない。
○ exitはいらない。
2020/04/26(日) 13:23:56.84
後出しっぽくてすみません。
$INPUT_FILE は_TAG("S.T.A.R.T")や_TAG("E.N.D")と同じく固定名なので汎用性は不要なんです。
それにこの部分はscriptの一部で本体には引数があるため毎回script.sh 引数 < $INPUT_FILE とやるのはちょっと...
といって、このためだけに分割するのも...
$INPUT_FILE は_TAG("S.T.A.R.T")や_TAG("E.N.D")と同じく固定名なので汎用性は不要なんです。
それにこの部分はscriptの一部で本体には引数があるため毎回script.sh 引数 < $INPUT_FILE とやるのはちょっと...
といって、このためだけに分割するのも...
2020/04/26(日) 16:11:10.53
じゃあ
{
なかみ
} < "$INPUT_FILE"
とかすればいい
{
なかみ
} < "$INPUT_FILE"
とかすればいい
2020/12/09(水) 09:14:48.51
2021/03/01(月) 22:58:36.48
$ eval "<"
bash: 予期しないトークン `newline' 周辺に構文エラーがあります
これってどういうこと?
bash: 予期しないトークン `newline' 周辺に構文エラーがあります
これってどういうこと?
2021/03/02(火) 03:17:30.34
予期しないトークン が出てきたんだろ
2021/03/02(火) 09:29:15.67
そりゃ < をbashに渡すから
$ <
と同じ結果になる訳で
$ <
と同じ結果になる訳で
2021/03/02(火) 11:20:08.32
おふたりありがとう
たしかに
$ <
と同じ結果になった
でもnewlineというのはどこにも記述してないのにどうして `newline' なんだろう?と
たしかに
$ <
と同じ結果になった
でもnewlineというのはどこにも記述してないのにどうして `newline' なんだろう?と
2021/03/02(火) 11:55:19.88
英語の勉強をしましょう
277名無しさん@お腹いっぱい。
2021/03/02(火) 12:14:10.372021/03/02(火) 12:48:18.17
あー、そういうことか、なるほどわかりました
日本語の中に突然newlineが出てきて、しかもわざわざクォートされてるからてっきり予約語かと思い込んでいた
というか目に見えない予約語なんだろうけど
ありがとうございます
日本語の中に突然newlineが出てきて、しかもわざわざクォートされてるからてっきり予約語かと思い込んでいた
というか目に見えない予約語なんだろうけど
ありがとうございます
2021/03/02(火) 16:21:26.89
わかっとらんやんけ!
2021/03/14(日) 10:53:57.86
>>164
win鯖管か個人用途のみで使うなら7系はいいものだと思うけど、数百MB食うpwshがunix界隈で受け入れられるとはとても思えない
まあ新興非b系シェルは駆逐されるかもしれんが
そもそもまだMacとlinux主要ディストロにしか公式対応してないので
IT職でなく、単にツールキットを享受できればいい人ならpwshでいいと思うよ
たとえ趣味や仕事でも(だけど時代遅れな)b系シェルの技能は汎用性あるから、あえて普段から使うのも勉強になるよ
win鯖管か個人用途のみで使うなら7系はいいものだと思うけど、数百MB食うpwshがunix界隈で受け入れられるとはとても思えない
まあ新興非b系シェルは駆逐されるかもしれんが
そもそもまだMacとlinux主要ディストロにしか公式対応してないので
IT職でなく、単にツールキットを享受できればいい人ならpwshでいいと思うよ
たとえ趣味や仕事でも(だけど時代遅れな)b系シェルの技能は汎用性あるから、あえて普段から使うのも勉強になるよ
2021/03/14(日) 10:59:38.87
あと怒涛の互換性ブチ壊しバージョンアップ中だから、せっかく書いても一年で動かなくなる
まだソフトウェア開発には使えないのが現状
まだソフトウェア開発には使えないのが現状
2021/03/14(日) 17:45:37.35
シェルスクリプトの特徴は「人間がそのまま読むことが出来る1行1データのテキストを扱う」という点なんだわ
シェルスクリプトは分かりづらいからPerlやPythonを使うとか言ってるやつがいるけど
1行1データのテキストを扱うならば、シェルスクリプトが一番うまく処理できる
正確に言えば、シェルスクリプトだけじゃなくてUNIX系のCLIコマンドがそれを前提としたインターフェースになってる
CLIコマンド=シェルスクリプトのAPIなんだよ
pwshがunix界隈で受け入れられないのは、APIが全く違っていて互換性がないから
API=CLIコマンドなので、プログラマの多くはAPIコマンドを知ってる
シェルスクリプトがいつまでたってもPerlやPythonに置き換わらないのも
それらの言語はCLIコマンドというAPIを使わないから
CLIコマンドを使うならば、シェルスクリプトより簡潔に書ける言語が存在しない
シェルスクリプトは分かりづらいからPerlやPythonを使うとか言ってるやつがいるけど
1行1データのテキストを扱うならば、シェルスクリプトが一番うまく処理できる
正確に言えば、シェルスクリプトだけじゃなくてUNIX系のCLIコマンドがそれを前提としたインターフェースになってる
CLIコマンド=シェルスクリプトのAPIなんだよ
pwshがunix界隈で受け入れられないのは、APIが全く違っていて互換性がないから
API=CLIコマンドなので、プログラマの多くはAPIコマンドを知ってる
シェルスクリプトがいつまでたってもPerlやPythonに置き換わらないのも
それらの言語はCLIコマンドというAPIを使わないから
CLIコマンドを使うならば、シェルスクリプトより簡潔に書ける言語が存在しない
2021/03/31(水) 10:37:33.90
シェルなんだから外部コマンドは呼べるし、テキストも扱えるしそんなに変わらんのでは
そんなに変らんということはすなわち、わざわざunix環境で使うモチベとしては弱いと思うが
ドザーが流行りのwsl使うのには便利なんじゃね
そんなに変らんということはすなわち、わざわざunix環境で使うモチベとしては弱いと思うが
ドザーが流行りのwsl使うのには便利なんじゃね
2021/03/31(水) 10:41:33.46
昔ながらのwinコマンドは大体外部コマンドだけど、pwshはほとんど組み込みコマンドなのがなあ
slsとか分けて提供してくれればbetter grep/findとして個人的には使いたいんだが
slsとか分けて提供してくれればbetter grep/findとして個人的には使いたいんだが
285名無しさん@お腹いっぱい。
2021/03/31(水) 22:49:44.43 >>283
Windowsのコマンドはスクリプトから使うことを考慮されてない物が多い
例えば、copyコマンドは、copyすると
1 個のファイルをコピーしました。
とか人間のためのメッセージが出てくるからテキスト処理に向かない
バッチファイルは人間が操作するのと同じことただやるだけ
(出力を加工しない)なのでバッチファイルから使う分にはそれでもいいが
シェルスクリプトのように出力と入力をつないで処理することには向いていない
だからpwshはWindowsのコマンドを呼び出さない
一方pwshで使うAPIは1行1データのテキストにはなってないし
普段使ってる外部コマンドではない
どちらかと言えばPythonなどの関数に近い
Unix/Linuxの外部コマンド・・・1行1データのAPIインターフェースでCLIからも参照する
pwsh、Python、多くの言語・・・引数と戻り値のAPIインターフェースで言語内から参照しない
APIのインターフェースが大きく違っていて
Unix/Linuxの外部コマンドは改行の扱いが難しいなどの制限があるが
その制限の範囲内ではスクリプトからも人間からも使いやすくて
他の言語には置き換えることが出来ないんだよ
Windowsのコマンドはスクリプトから使うことを考慮されてない物が多い
例えば、copyコマンドは、copyすると
1 個のファイルをコピーしました。
とか人間のためのメッセージが出てくるからテキスト処理に向かない
バッチファイルは人間が操作するのと同じことただやるだけ
(出力を加工しない)なのでバッチファイルから使う分にはそれでもいいが
シェルスクリプトのように出力と入力をつないで処理することには向いていない
だからpwshはWindowsのコマンドを呼び出さない
一方pwshで使うAPIは1行1データのテキストにはなってないし
普段使ってる外部コマンドではない
どちらかと言えばPythonなどの関数に近い
Unix/Linuxの外部コマンド・・・1行1データのAPIインターフェースでCLIからも参照する
pwsh、Python、多くの言語・・・引数と戻り値のAPIインターフェースで言語内から参照しない
APIのインターフェースが大きく違っていて
Unix/Linuxの外部コマンドは改行の扱いが難しいなどの制限があるが
その制限の範囲内ではスクリプトからも人間からも使いやすくて
他の言語には置き換えることが出来ないんだよ
2021/04/01(木) 00:40:09.95
Windowsでシェルスクリプト動かそうとすると、パスの\のエスケープで気が狂いそうになるから
その辺捨てたパワーシェルの割り切りは、それはそれで理解できるけどなー
その辺捨てたパワーシェルの割り切りは、それはそれで理解できるけどなー
2021/04/01(木) 01:14:08.37
>>286
Windowsでシェルスクリプトって何を使ってるの?
パスの\のエスケープなんかしたことないよ
pwshはスクリプト言語としては悪くないと思うよ
ただPythonなんかと同じようなプログラミング用の言語ということ
Pythonにも当てはまるけどプログラミング用の言語は
シェルスクリプトとはスタイルが異なる。
シェルスクリプトは端末操作に特化した言語だから
プログラミングはしにくいが端末操作は得意
まあPowerShellでも普段からコマンドレット使って端末操作してます。
pwshでもコマンドレットをメインで使いますって人なら
シェルスクリプトと同じような感じに見えるかもしれないけど
そんな人いるのかな?
Windowsでシェルスクリプトって何を使ってるの?
パスの\のエスケープなんかしたことないよ
pwshはスクリプト言語としては悪くないと思うよ
ただPythonなんかと同じようなプログラミング用の言語ということ
Pythonにも当てはまるけどプログラミング用の言語は
シェルスクリプトとはスタイルが異なる。
シェルスクリプトは端末操作に特化した言語だから
プログラミングはしにくいが端末操作は得意
まあPowerShellでも普段からコマンドレット使って端末操作してます。
pwshでもコマンドレットをメインで使いますって人なら
シェルスクリプトと同じような感じに見えるかもしれないけど
そんな人いるのかな?
2021/04/01(木) 03:02:34.14
>>287
Windowsはダブルクォートの直前にバックスラッシュがある場合のみエスケープとして扱うということに一応なってる。
しかし実はWindowsではダブルクォートも引数の区切りも解釈するのはアプリケーションの仕事なので実は上記のように解釈される保証はない。
Windowsはダブルクォートの直前にバックスラッシュがある場合のみエスケープとして扱うということに一応なってる。
しかし実はWindowsではダブルクォートも引数の区切りも解釈するのはアプリケーションの仕事なので実は上記のように解釈される保証はない。
2021/04/01(木) 06:04:39.51
2021/04/14(水) 16:39:38.83
int main( int argc,char **argv){ printf("%s\n",argv[1]); return 0;}
みたいなプログラムを書いて
a.exe "abc xyz"
みたいに実行しても処理系によって出力が
"abc xyz"
だったり
abc xyz
だったり
"abc
だったり…そんな時代もあったね。
みたいなプログラムを書いて
a.exe "abc xyz"
みたいに実行しても処理系によって出力が
"abc xyz"
だったり
abc xyz
だったり
"abc
だったり…そんな時代もあったね。
2021/04/20(火) 16:39:52.31
SSDがいっぱいになってきたのでfindで各binを周りfileが吐いたリストをunstripped(だったか?)でgrep&stripするスクリプト書いた
半分くらいになるのなこれ…
今の所不具合は出てないからヨシ
おすすめ
半分くらいになるのなこれ…
今の所不具合は出てないからヨシ
おすすめ
2021/04/20(火) 16:48:14.77
>>287
ubuntuだけどbashからpwsh -cで便利なツールとして使うのがベスト
多少最適化されてそうなapt提供のプレコンパイル版でも60MiBあるから配布時依存に加えるのは厳しいのが悩み
私的ハックにはすごく重宝
ubuntuだけどbashからpwsh -cで便利なツールとして使うのがベスト
多少最適化されてそうなapt提供のプレコンパイル版でも60MiBあるから配布時依存に加えるのは厳しいのが悩み
私的ハックにはすごく重宝
2021/04/20(火) 16:53:51.68
2021/04/20(火) 16:55:18.39
>>291
golang製のバイナリってstripすると壊れるんじゃなかったっけ
golang製のバイナリってstripすると壊れるんじゃなかったっけ
2021/04/20(火) 17:07:12.66
2021/04/20(火) 18:04:12.33
学習コスト高そうだから何でも賢くキャストしてくれるキャスト器として使ってるわ
[xml]'<foo>...'くらいのカジュアルユース
年だからjqとか付いてけないしjsonもキャストして.付けてるタブ補完連打でアクセス
ただの型コレクションとして気兼ねなく使えばいい
[xml]'<foo>...'くらいのカジュアルユース
年だからjqとか付いてけないしjsonもキャストして.付けてるタブ補完連打でアクセス
ただの型コレクションとして気兼ねなく使えばいい
2021/04/21(水) 20:07:40.11
>>296
歳のせいにするな。お前の能力の問題だ。
歳のせいにするな。お前の能力の問題だ。
2021/04/21(水) 22:14:14.03
噂のpwsh試してみたけど、とりあえずコマンドライン作業中の電卓代わりにはpythonよりはいいな
子シェルだからパス通ってて、普通に演算子と数学関数が下拵え無しで使えるってだけだけど
64KBと打つと65536を返してくるのは遊び心かな?
まあスレ違いだねごめん
子シェルだからパス通ってて、普通に演算子と数学関数が下拵え無しで使えるってだけだけど
64KBと打つと65536を返してくるのは遊び心かな?
まあスレ違いだねごめん
2021/04/21(水) 22:37:37.09
電卓代わりでbc/dc思い出して遊ぼうと思ったら今時のlinuxにはdcはいってないのね
頭の体操にいいのに残念
頭の体操にいいのに残念
300名無しさん@お腹いっぱい。
2021/04/22(木) 09:18:28.19 普通パッケージぐらいは用意されていて入れれば入るんじゃない?
deb系なら apt-get install dc で使える
deb系なら apt-get install dc で使える
2021/04/22(木) 18:02:08.57
LLのREPL使えばええやん
2021/04/25(日) 11:29:37.47
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
do
[ $i = "予定1" ] && echo "予定1"; sleep 3
[ $i = "予定2" ] && echo "予定2"; sleep 3
[ $i = "予定3" ] && echo "予定3"; sleep 3
done
2021/05/01(土) 09:40:38.84
今日のIDすごいwww
304名無しさん@お腹いっぱい。
2021/05/02(日) 22:37:50.92 しらんがなー
2021/05/03(月) 22:39:37.02
シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
306名無しさん@お腹いっぱい。
2021/05/04(火) 00:29:14.02 >>305
そもそもCGIはすでに廃れてるって知ってる?
そもそもCGIはすでに廃れてるって知ってる?
307名無しさん@お腹いっぱい。
2021/05/04(火) 00:30:10.82 今どき本格的なサーバー側アプリをCGIで作るなんてないわけで
まあ簡単なツールぐらいならやるかもしれんけどさ
まあ簡単なツールぐらいならやるかもしれんけどさ
2021/05/04(火) 01:58:13.24
>>307
知らんのだがCGI以外でどう処理してるの?ジャバスクリプト?
知らんのだがCGI以外でどう処理してるの?ジャバスクリプト?
2021/05/04(火) 07:10:50.01
>>308
WebアプリケーションフレームワークがWebサーバ機能を持っていて、フロントエンドのWebサーバからリバースプロキシして使うのが多いかな。
だからWebサーバとアプリケーションの接続インターフェイスと言う感じじゃ無いんよ。
WebアプリケーションフレームワークがWebサーバ機能を持っていて、フロントエンドのWebサーバからリバースプロキシして使うのが多いかな。
だからWebサーバとアプリケーションの接続インターフェイスと言う感じじゃ無いんよ。
2021/05/04(火) 17:00:00.58
えっ、そうなの?
perlじゃ無くCGIがオワコンで、マトモwebサービス作成にはもう使われ無いのね。
perlじゃ無くCGIがオワコンで、マトモwebサービス作成にはもう使われ無いのね。
2021/05/06(木) 02:07:50.66
perl自体がオワコンかどうかの話は別として歴史の話をすると
初期はウェブサーバー+perlスクリプト、つまりCGIでウェブシステムが作られていた
もう2000年とかその頃の話よ。とほほのなんとかとかKentなんとかとかが幅を利かせていた
当時のプロ(ホームページ制作会社)でもそういったCGIを使っていた時代
その後はPHPが登場したが、これはウェブサーバーにPHPをモジュールとして組み込む
mod_phpが利用されていた。アクセスのたびにperlスクリプトを呼び出さないから速い
同じようにmod_perlというのもあった。
この頃のプロといえば自社でサーバーを保守管理するウェブサービス会社だったかな
その後から現在はアプリ自身でウェブサーバーとして起動するようになった
RailsとかPythonとかはそれが主。もちろんphpでもperlでもこの仕組が使える
クラウドの時代のプロのシステムはほぼこれ。もちろん今もホームページ制作会社はあるけど
ウェブサービス作ってる会社ってもうこんな感じじゃないでしょ?
アプリにウェブサーバーが内蔵されてると言っても、それはアプリに最適化されていて
静的コンテンツを配信するのには適していないから
>>309のいうように前段に普通のウェブサーバー(nginxやapache)を配置して
アプリ用のURLだけリバースプロキシでWebフレームワークにわたす仕組み
シェルスクリプトは、ブラウザにモジュールとして組み込んだり
シェルスクリプト自身をウェブサーバーにすることはできないからCGIオンリーで使うしか無い
と思ったらmod_bashなんてあるのなw
まあアクセス数が少ない個人用のシステムとか、特定のサーバーからアクセスしない
死活監視用のエンドポイント程度になら使っても良いんじゃね?
初期はウェブサーバー+perlスクリプト、つまりCGIでウェブシステムが作られていた
もう2000年とかその頃の話よ。とほほのなんとかとかKentなんとかとかが幅を利かせていた
当時のプロ(ホームページ制作会社)でもそういったCGIを使っていた時代
その後はPHPが登場したが、これはウェブサーバーにPHPをモジュールとして組み込む
mod_phpが利用されていた。アクセスのたびにperlスクリプトを呼び出さないから速い
同じようにmod_perlというのもあった。
この頃のプロといえば自社でサーバーを保守管理するウェブサービス会社だったかな
その後から現在はアプリ自身でウェブサーバーとして起動するようになった
RailsとかPythonとかはそれが主。もちろんphpでもperlでもこの仕組が使える
クラウドの時代のプロのシステムはほぼこれ。もちろん今もホームページ制作会社はあるけど
ウェブサービス作ってる会社ってもうこんな感じじゃないでしょ?
アプリにウェブサーバーが内蔵されてると言っても、それはアプリに最適化されていて
静的コンテンツを配信するのには適していないから
>>309のいうように前段に普通のウェブサーバー(nginxやapache)を配置して
アプリ用のURLだけリバースプロキシでWebフレームワークにわたす仕組み
シェルスクリプトは、ブラウザにモジュールとして組み込んだり
シェルスクリプト自身をウェブサーバーにすることはできないからCGIオンリーで使うしか無い
と思ったらmod_bashなんてあるのなw
まあアクセス数が少ない個人用のシステムとか、特定のサーバーからアクセスしない
死活監視用のエンドポイント程度になら使っても良いんじゃね?
2021/05/06(木) 11:37:17.18
ネタかなんかなの?このくだり
2021/05/07(金) 04:02:34.96
いや、マジレスだろ。
2021/05/07(金) 09:52:15.00
時系列はおかしいけども、仕組みとしては大体合ってるし、いいんじゃない?
2021/05/08(土) 11:58:10.94
間違ってると言うやつほど
どこが間違っているかを言わない
どこが間違っているかを言わない
2021/05/08(土) 19:01:34.99
しかしこれは CGI が使われなくなったと言われれば違和感はある Web サーバーがリバースプロキシに変化してアプリが Web サーバーを持ったに過ぎないのだろう
CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
2021/05/09(日) 02:29:54.79
2021/05/09(日) 08:40:11.68
もともとリバースプロキシの機能はウェブサーバーにあったのだから
どちらかと言えばウェブサーバーをリバースプロキシだけに使うように
使い方が変化してって言う方が適切だね
ちなみに開発時だとウェブサーバーはあまり使わない
ウェブサーバーとしての機能や性能は必要ないので
アプリ内臓の簡易ウェブサーバー機能で十分だから
どちらかと言えばウェブサーバーをリバースプロキシだけに使うように
使い方が変化してって言う方が適切だね
ちなみに開発時だとウェブサーバーはあまり使わない
ウェブサーバーとしての機能や性能は必要ないので
アプリ内臓の簡易ウェブサーバー機能で十分だから
2021/05/09(日) 08:52:57.10
>>316
> CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
一番の違いはアプリが常駐しているかどうか
CGIはアプリが常駐して無くてアクセスのたびにコマンドを実行する
このコマンドを実行するっていうのはかなり重い処理なのでパフォーマンスが出ない
特にシェルスクリプトなんか外部のコマンドを組み合わせて処理するものだから
1アクセスでシェルスクリプト本体の実行の他に
sedコマンド+grepコマンド+awkコマンド+jqコマンド・・・みたいになるから
Perlで作るよりも確実にパフォーマンスが悪くなる。Perlよりも悪い選択
それに対してCGIじゃない仕組みはサーバーマシン起動時に1回コマンドを起動するだけ
もし誰かに、これからのCGIはシェルスクリプト!シェルスクリプトでもこれだけの速度が出る!って
郵便番号から住所を検索するデモをみせてシェルスクリプトでシステム開発させようと洗脳する組織団体にそそのかされていたら
それアクセスが多い時にパフォーマンス出ますか?他の言語とベンチマークして比較していいですか?って聞いたら良いよ
郵便番号のデータなんてたかだか十数MBしかないしSSD使ってりゃ0.01秒未満で読み込めるのは当たり前
そんな低負荷なデモを数回見せた程度でパフォーマンスの検証なんてできやしない
> CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
一番の違いはアプリが常駐しているかどうか
CGIはアプリが常駐して無くてアクセスのたびにコマンドを実行する
このコマンドを実行するっていうのはかなり重い処理なのでパフォーマンスが出ない
特にシェルスクリプトなんか外部のコマンドを組み合わせて処理するものだから
1アクセスでシェルスクリプト本体の実行の他に
sedコマンド+grepコマンド+awkコマンド+jqコマンド・・・みたいになるから
Perlで作るよりも確実にパフォーマンスが悪くなる。Perlよりも悪い選択
それに対してCGIじゃない仕組みはサーバーマシン起動時に1回コマンドを起動するだけ
もし誰かに、これからのCGIはシェルスクリプト!シェルスクリプトでもこれだけの速度が出る!って
郵便番号から住所を検索するデモをみせてシェルスクリプトでシステム開発させようと洗脳する組織団体にそそのかされていたら
それアクセスが多い時にパフォーマンス出ますか?他の言語とベンチマークして比較していいですか?って聞いたら良いよ
郵便番号のデータなんてたかだか十数MBしかないしSSD使ってりゃ0.01秒未満で読み込めるのは当たり前
そんな低負荷なデモを数回見せた程度でパフォーマンスの検証なんてできやしない
2021/05/09(日) 11:14:52.20
>>319
fastcgiってcgiと呼んじゃダメなん?
fastcgiってcgiと呼んじゃダメなん?
2021/05/09(日) 11:52:38.01
>>320
FastCGIはCGIの環境変数や標準入出力の内容をカプセル化してsocketで通信するように定められているから無関係ではないんだけど、
環境変数とか標準入出力を使っているわけじゃないからやはりCGIでは無いと思うよ。
FastCGIはCGIの環境変数や標準入出力の内容をカプセル化してsocketで通信するように定められているから無関係ではないんだけど、
環境変数とか標準入出力を使っているわけじゃないからやはりCGIでは無いと思うよ。
2021/05/09(日) 14:19:11.63
そういやFastCGIなんて技術もあったな
あれも「プロセス起動が遅い」という問題を
プロセス終了をさせずにプロセスを使い回すことで
解決する技術なんだよな
シェルスクリプトでそれがやれるかっつーと無理だろうな
いやwikiによればhttps://ja.wikipedia.org/wiki/FastCGI
名前付きパイプもサポートしてるようだからから不可能じゃないのか?
でもまあシェルスクリプトから呼び出すコマンドは
どちらにしろプロセス起動になるわけで
シェルスクリプトで全部実装するならまだしも
普通のシェルスクリプトではあまり効果がないだろうな
あれも「プロセス起動が遅い」という問題を
プロセス終了をさせずにプロセスを使い回すことで
解決する技術なんだよな
シェルスクリプトでそれがやれるかっつーと無理だろうな
いやwikiによればhttps://ja.wikipedia.org/wiki/FastCGI
名前付きパイプもサポートしてるようだからから不可能じゃないのか?
でもまあシェルスクリプトから呼び出すコマンドは
どちらにしろプロセス起動になるわけで
シェルスクリプトで全部実装するならまだしも
普通のシェルスクリプトではあまり効果がないだろうな
2021/05/09(日) 14:26:02.10
英語だし読む気はないけどなんかそういう技術があるみたいだw
FastCGI shell script
https://stackoverflow.com/questions/4685045/fastcgi-shell-script
ここの Look at "Writing agents in sh: conversing through a pipe"
まあ一般的にシェルスクリプトでFastCGIは無理(無意味)やでって書かれてるようだね
FastCGI shell script
https://stackoverflow.com/questions/4685045/fastcgi-shell-script
ここの Look at "Writing agents in sh: conversing through a pipe"
まあ一般的にシェルスクリプトでFastCGIは無理(無意味)やでって書かれてるようだね
324名無しさん@お腹いっぱい。
2021/05/09(日) 14:40:26.25 んでさ>>305に聞きたいんだけど
> シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
ってどういう流れで誰に聞いたの?
二十年ぐらい前にコンピューターにちょっと詳しいだけの高校生や大学生の
会話で出てきた話だってのならわかるけどさ
今のウェブ開発ではCGIという単語自体でてこない
> シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
ってどういう流れで誰に聞いたの?
二十年ぐらい前にコンピューターにちょっと詳しいだけの高校生や大学生の
会話で出てきた話だってのならわかるけどさ
今のウェブ開発ではCGIという単語自体でてこない
2021/05/14(金) 08:14:28.21
>>324
年寄りと話すと、API叩くことをCGI呼び出すと表現するよ
年寄りと話すと、API叩くことをCGI呼び出すと表現するよ
2021/05/17(月) 12:58:38.74
アクセス数が少なければ今でもcgiで十分。
2021/05/17(月) 19:57:40.30
アクセス数少ないのが前提w
2021/05/17(月) 21:14:15.17
知り合いだけのサイトもありますし
2021/05/18(火) 00:26:19.32
>>328
仕事では使い物にならないって意味だよ
仕事では使い物にならないって意味だよ
2021/05/18(火) 00:27:32.81
レガシーシステムの改修でもないかぎりCGIなんて出てこないし
新規でCGIとかいい出したら、そんな会社は切り捨てた方が良い
新規でCGIとかいい出したら、そんな会社は切り捨てた方が良い
2021/05/18(火) 09:35:06.09
PHP fpm ってよく使われてるように思うけど技術的には Fast CGI なんでしょ?
2021/05/18(火) 12:12:30.96
cgiスレになって無いか?
2021/05/18(火) 14:51:57.87
0埋めした2桁数字文字をdeclare -iの変数に入れると時々エラーになるので
ぐぐったら0埋め数字は8進数扱いって、何か面倒だなぁ...
ぐぐったら0埋め数字は8進数扱いって、何か面倒だなぁ...
2021/05/18(火) 16:12:30.34
頭0は8進数ってC言語とか昔から使われてるけど
最近の言語は頭0を8進数とみなさないように変わってきてる気がするね
2桁とわかってるならdeclare -i i="${var#0}"でいけるよ
そうでない場合はdeclare -i i="10#$var"でいけるかな
bash以外だとダメかもしれんけど
最近の言語は頭0を8進数とみなさないように変わってきてる気がするね
2桁とわかってるならdeclare -i i="${var#0}"でいけるよ
そうでない場合はdeclare -i i="10#$var"でいけるかな
bash以外だとダメかもしれんけど
335名無しさん@お腹いっぱい。
2021/05/19(水) 02:39:42.52 ありがとうございます。
expr でどうにか凌ぎました。
expr でどうにか凌ぎました。
2021/05/19(水) 09:22:05.13
exprは遅いぞ
2021/05/19(水) 09:42:12.88
遅いけど、どんな環境でも
2021/05/19(水) 10:08:35.53
だからexprに一切メリットないって
2021/05/19(水) 18:39:51.53
計算するときにコンソールで expr 以外に何か良い方法ありますか
2021/05/19(水) 18:40:31.58
$((1+2)、bc、dc
なんでもあるやろ
なんでもあるやろ
2021/05/19(水) 22:49:05.88
awkで計算しろ
2021/05/20(木) 08:04:37.20
2021/05/20(木) 09:04:51.56
2021/05/20(木) 09:10:53.80
誰かPOSIX原理主義者とユニケージの関係教えてくれ
2021/05/20(木) 10:27:21.13
どちらも秘密主義だからな。俺も少し興味があるが
非公開の独自技術には興味なくて裏で糸を引いているやつらに興味がある
wikipediaを見る限りUSP研究所と金沢大学が手を組んでるっぽい
USP研究所がユニケージという開発手法で怪しげなビジネスをしていて
それにコネかなんかで金沢大学が手を貸して箔をつけてる感じ
もしくは金沢大学関係者が作ったのがUSP研究所なのかもな
POSIX原理主義者はUSP研究所もしくは金沢大学の関係者だと思われる
構成員の中の幹部クラスで多分3人ぐらいしかいない
ただ引っかかるのはユニケージとPOSIX原理主義が矛盾しているという点
POSIX原理主義はPOSIXのコマンドだけを使うと言ってるがユニケージは独自コマンドを押し付けている
ユニケージ=シェルスクリプト主義でそこから分岐したのが原理主義なのかもしれないな
非公開の独自技術には興味なくて裏で糸を引いているやつらに興味がある
wikipediaを見る限りUSP研究所と金沢大学が手を組んでるっぽい
USP研究所がユニケージという開発手法で怪しげなビジネスをしていて
それにコネかなんかで金沢大学が手を貸して箔をつけてる感じ
もしくは金沢大学関係者が作ったのがUSP研究所なのかもな
POSIX原理主義者はUSP研究所もしくは金沢大学の関係者だと思われる
構成員の中の幹部クラスで多分3人ぐらいしかいない
ただ引っかかるのはユニケージとPOSIX原理主義が矛盾しているという点
POSIX原理主義はPOSIXのコマンドだけを使うと言ってるがユニケージは独自コマンドを押し付けている
ユニケージ=シェルスクリプト主義でそこから分岐したのが原理主義なのかもしれないな
2021/05/20(木) 10:30:31.60
>>343
ネタとしてのオモロイだなw
東京ハンズで大規模対応でクラウドに移行して
それに対応できなくなって今では闇とか負債と言われてるんだっけな
https://www.hands-lab.com/tech/t5600/
ここにはBashのフレームワークってかいてあるな
BashってことはやっぱりPOSIX原理主義とも違うな
ネタとしてのオモロイだなw
東京ハンズで大規模対応でクラウドに移行して
それに対応できなくなって今では闇とか負債と言われてるんだっけな
https://www.hands-lab.com/tech/t5600/
ここにはBashのフレームワークってかいてあるな
BashってことはやっぱりPOSIX原理主義とも違うな
2021/05/20(木) 11:00:28.58
2021/05/20(木) 11:19:43.21
POSIX原理主義者「シェルスクリプトは遅くない!なぜなら郵便番号から住所を検索なんで一瞬で探せる!」
※CSVファイルは解凍した状態でたったの12MBです。
どんだけ小規模低負荷前提で吠えてるのかとw
※CSVファイルは解凍した状態でたったの12MBです。
どんだけ小規模低負荷前提で吠えてるのかとw
2021/05/20(木) 16:03:03.24
sql文を組み立てるシェルスクリプトを書きます
2021/05/21(金) 21:36:49.34
シェルスクリプトは連想配列が使えるから
原理的には高速
オーバーヘッドがない分
他の言語より早い場合が多いと思う
保守しにくいけど
原理的には高速
オーバーヘッドがない分
他の言語より早い場合が多いと思う
保守しにくいけど
2021/05/21(金) 21:43:40.33
オーバーヘッドって何のことだ?
2021/05/21(金) 22:08:05.49
ファイルサイズに依存するオーバーヘッドはメモリ上に載せる部分じゃろ?
全部載せてしまえば定数時間のはずだけど、上限とかなかったっけ
載せないで逐次処理なら固定長レコード上に添字でジャンプのデータベースには勝てない
載せても多分勝てないけど
全部載せてしまえば定数時間のはずだけど、上限とかなかったっけ
載せないで逐次処理なら固定長レコード上に添字でジャンプのデータベースには勝てない
載せても多分勝てないけど
2021/05/21(金) 22:16:12.19
英辞郎くらいなら適当に整形してgrepで引いてるな、5秒くらいかかるが…
毎回読み込まず、&で起動して配列抱えたままsleep、named pipeをポーリングてもらうか
毎回読み込まず、&で起動して配列抱えたままsleep、named pipeをポーリングてもらうか
2021/05/21(金) 22:31:20.56
前から舐めるから時間かかってるだけだな、見出し語辞書引きなら既にソートされてるので人力二分探索が楽か
イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
2021/05/21(金) 23:18:21.57
2021/05/21(金) 23:19:33.97
>>354
普通にSQLiteでも使ったほうが良いのでは?w
普通にSQLiteでも使ったほうが良いのでは?w
2021/05/21(金) 23:33:05.93
2021/05/22(土) 00:00:45.90
POSIX準拠だと連想配列ないけどねw
eval使えばそれっぽいことはできるけど
eval使えばそれっぽいことはできるけど
2021/05/22(土) 00:17:17.67
2021/05/22(土) 02:03:30.66
>>356
普段はdico(d)とかdict(d)使ってるよ、この用途には特化してる分sqlite3なんかより遥かに高速で優れてる
ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
英和の出来合いdbってdict.orgとかでも提供されてないしな
テキスト形式の単一辞書(~100MB)をgrep、数秒のラグなら十分許容できるだろう
取り敢えず事足りればいいんだよって思想です
普段はdico(d)とかdict(d)使ってるよ、この用途には特化してる分sqlite3なんかより遥かに高速で優れてる
ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
英和の出来合いdbってdict.orgとかでも提供されてないしな
テキスト形式の単一辞書(~100MB)をgrep、数秒のラグなら十分許容できるだろう
取り敢えず事足りればいいんだよって思想です
2021/05/22(土) 02:08:46.46
>>359
デーモンなんかの実装は大体そうでしょ
mkfifoでファイルのように読み書きできるパイプ作れるでしょ?
無限whileループの中で1秒程度sleep、パイプに書き込まれてるかreadでチェック(所謂原始的なポーリング)
デーモンなんかの実装は大体そうでしょ
mkfifoでファイルのように読み書きできるパイプ作れるでしょ?
無限whileループの中で1秒程度sleep、パイプに書き込まれてるかreadでチェック(所謂原始的なポーリング)
2021/05/22(土) 02:29:18.62
追伸>>361
プロセスの関係について答えてなかった
クライエントがコマンドライン引数を単にnamed pipeへ書き込むだけのシェルスクリプトでいいです
というか必須でないです
ぶっちゃけやることはecho query >fifo
それを$eiji queryと書けると分かりやすいというだけですね
プロセスの関係について答えてなかった
クライエントがコマンドライン引数を単にnamed pipeへ書き込むだけのシェルスクリプトでいいです
というか必須でないです
ぶっちゃけやることはecho query >fifo
それを$eiji queryと書けると分かりやすいというだけですね
2021/05/22(土) 02:36:55.49
老婆心かもしれないけど、常駐シェルスクリプトなんて何ら特別なものでないよ
常駐しないシェルスクリプト=exitの記述が存在している、あるいはeofに達するもの
常駐できるシェルスクリプト=signalやらで殺さなければexit/eofに達しないモノです
常駐しないシェルスクリプト=exitの記述が存在している、あるいはeofに達するもの
常駐できるシェルスクリプト=signalやらで殺さなければexit/eofに達しないモノです
2021/05/22(土) 02:44:59.50
shを常用するやつは居るが
流石にed常用するやつは居らんな
流石にed常用するやつは居らんな
2021/05/22(土) 02:59:57.65
edは生の改行文字食わせる必要あるし、sedのように;で区切れないから、コマンドラインから使いにくい…
printf %s\\n cmd1 cmd2 ...をeasyedとか名付けておけば、easyed cmd1 cmd2 ...で使いやすくなるね
ただ、sedやawkでカウンタ設定して何行後の処理を指定するような処理を書いている事に気づいたら、そういう処理はedの領分
前後の相対アドレスを+nのように簡潔に指定できる
あと、diffがedのコードを吐けるというのもあって、それをテンプレにして弄るとバッチ的な処理はより早く書けると思う
printf %s\\n cmd1 cmd2 ...をeasyedとか名付けておけば、easyed cmd1 cmd2 ...で使いやすくなるね
ただ、sedやawkでカウンタ設定して何行後の処理を指定するような処理を書いている事に気づいたら、そういう処理はedの領分
前後の相対アドレスを+nのように簡潔に指定できる
あと、diffがedのコードを吐けるというのもあって、それをテンプレにして弄るとバッチ的な処理はより早く書けると思う
2021/05/22(土) 05:16:06.47
2021/05/22(土) 05:16:37.76
× 起動するのも
○ 常駐するのも
○ 常駐するのも
2021/05/22(土) 05:19:29.71
もっと具体的に言えば、POSIX準拠だと
シェルスクリプトは双方向パイプを使えない
シェルスクリプトは双方向パイプを使えない
2021/05/22(土) 06:08:57.28
そこは似非精進の生臭坊主で行こう
2021/05/22(土) 06:15:51.15
>>354
> イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
前方一致検索ならそれでもいいと思うけど、中間一致や全文検索だと結局すべてのファイルをgrepしないといけない
SQLiteなら全文検索もあるようだ
http://ytyaru.hatena(ドット)com/entry/2017/07/19/000000
>>360
> ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
インデックスつけるのが面倒なんでしょ?
SQLiteならテーブル作ってデータを入れていくだけだよ
> イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
前方一致検索ならそれでもいいと思うけど、中間一致や全文検索だと結局すべてのファイルをgrepしないといけない
SQLiteなら全文検索もあるようだ
http://ytyaru.hatena(ドット)com/entry/2017/07/19/000000
>>360
> ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
インデックスつけるのが面倒なんでしょ?
SQLiteならテーブル作ってデータを入れていくだけだよ
2021/05/22(土) 06:20:59.68
>>370
原理主義者周辺にはNoSQLってこだわりがある。
原理主義者周辺にはNoSQLってこだわりがある。
2021/05/22(土) 07:32:30.98
原理主義者はNoSQLに何を使ってんの?
2021/05/22(土) 07:33:00.54
MongoDBとか?
2021/05/22(土) 07:58:28.04
使えるならnamed pipeが行儀良いと思うけど、ポーリングさせるならただのファイルでも環境変数でも何でもいいんでね
あんまりSSDへ頻繁に書き込みたくないなら環境変数か
個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら、ファイル分割で必要十分だろ
メモリも今時100MBくらい一時占めるのは有りだとしても、常駐させるとなるとチリツモ
あんまりSSDへ頻繁に書き込みたくないなら環境変数か
個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら、ファイル分割で必要十分だろ
メモリも今時100MBくらい一時占めるのは有りだとしても、常駐させるとなるとチリツモ
2021/05/22(土) 08:03:33.44
>>374
いや、ファイルや環境変数を使うというのはどうでも良くて
それらをどう使って実現するのか?って話だよ。
あなた、自動運転を実現するにはどうしたら良いか?って言う話に
AIを使えばできるんです。みたいなことしか言ってないよw
いや、ファイルや環境変数を使うというのはどうでも良くて
それらをどう使って実現するのか?って話だよ。
あなた、自動運転を実現するにはどうしたら良いか?って言う話に
AIを使えばできるんです。みたいなことしか言ってないよw
2021/05/22(土) 08:04:29.68
定期的に読みに行けばいいだけじゃないの?
2021/05/22(土) 08:05:46.31
> 個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら
個人用途であれば、その程度でも構わないってことには反論はしないけどね
C10K問題(クライアント1万台問題)が発生するような場合には、それじゃ使い物にならないけど
個人用途であれば、その程度でも構わないってことには反論はしないけどね
C10K問題(クライアント1万台問題)が発生するような場合には、それじゃ使い物にならないけど
2021/05/22(土) 08:08:59.98
>>376
もしかして
1. コマンド実行
2. 特定のディレクトリにファイルを作る
3. デーモンが1秒おきにそのディレクトリを監視している
4. デーモンはファイルを見つけたら処理をして新しく結果ファイルを作る
5. 1のコマンドは結果ファイルができるまで待ってて見つけたらその内容を表示する
って話?
もしかして
1. コマンド実行
2. 特定のディレクトリにファイルを作る
3. デーモンが1秒おきにそのディレクトリを監視している
4. デーモンはファイルを見つけたら処理をして新しく結果ファイルを作る
5. 1のコマンドは結果ファイルができるまで待ってて見つけたらその内容を表示する
って話?
2021/05/22(土) 08:10:30.45
この方法だと環境変数は無理っぽいな
2021/05/22(土) 08:12:00.68
・パイプで繋ぐと早い。
・標準入力を<でリダイレクトするより、パイプを通じてcatで流し込んだ方が早い。
経典に書いてあるw
・標準入力を<でリダイレクトするより、パイプを通じてcatで流し込んだ方が早い。
経典に書いてあるw
2021/05/22(土) 08:17:10.40
一つのnamed pipeに複数プロセスから同時に書き込んでも
データは混ざらないんだっけ?
データは混ざらないんだっけ?
2021/05/22(土) 08:18:16.07
手動で排他制御せなあかんやろ
2021/05/22(土) 08:20:44.48
ああ、ロックファイル使うのかw
2021/05/22(土) 08:37:55.55
デーモンがメモリにデータを蓄えておくって
原理主義者的にはどうなんだろう?w
原理主義者的にはどうなんだろう?w
2021/05/22(土) 08:47:09.09
>>378
おれはそう解釈するけど
結果もクエリも数行だろうから、環境変数の方がいい
標準sleepは1s単位なので微妙に要件満たせないけど、適当な代替コマンド用意できないなら2秒になってしまうが…
msec sleep便利よ
サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す
検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう
フォアグラウンドのクライアント側は$query設定して1s sleep、(既に設定されているはずの)$responseを標準出力へ書き出す
完了フラグ立てるとか面倒な事やるのはシェルスクリプトの領分超えてると思うわ
$responseが空ならエラー吐いて落とす
何回か走らせてみて、時間は適宜調整で決め打ちが楽だろう
おれはそう解釈するけど
結果もクエリも数行だろうから、環境変数の方がいい
標準sleepは1s単位なので微妙に要件満たせないけど、適当な代替コマンド用意できないなら2秒になってしまうが…
msec sleep便利よ
サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す
検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう
フォアグラウンドのクライアント側は$query設定して1s sleep、(既に設定されているはずの)$responseを標準出力へ書き出す
完了フラグ立てるとか面倒な事やるのはシェルスクリプトの領分超えてると思うわ
$responseが空ならエラー吐いて落とす
何回か走らせてみて、時間は適宜調整で決め打ちが楽だろう
2021/05/22(土) 08:51:16.35
古典技術ポーリング
2021/05/22(土) 09:05:22.83
2021/05/22(土) 09:07:41.80
ダサいけどtmpファイルか
2021/05/22(土) 09:07:47.64
> サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す
なんつーかシェル変数(環境変数)をグローバル変数とでも勘違いしてるような書き方だな
サーバースクリプトが$responseに書き出しても
それは他のプロセスからは見えないんだよ
なんつーかシェル変数(環境変数)をグローバル変数とでも勘違いしてるような書き方だな
サーバースクリプトが$responseに書き出しても
それは他のプロセスからは見えないんだよ
2021/05/22(土) 09:15:02.13
> 検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう
それだと中間一致には対応できない
それだと中間一致には対応できない
2021/05/22(土) 09:27:09.09
2021/05/22(土) 09:33:01.34
直接の親にならdeclareの拡張や文字列evalシェル関数で書き換えられるけど、兄弟の環境は変える手段無いのか
2021/05/22(土) 09:40:41.97
兄弟でもメインループの中でexport hoge=hageをファイルに書き出して互いにsourceすれば共有できるぞ
結局一時ファイル作ることになるから、それを許容するなら全部一時ファイルでやり取りするか、
それを嫌うならpsでPID特定して直接リダイレクト
結局一時ファイル作ることになるから、それを許容するなら全部一時ファイルでやり取りするか、
それを嫌うならpsでPID特定して直接リダイレクト
2021/05/22(土) 09:43:36.67
シェルスクリプトでTCPとかUDPとかどうです旦那
2021/05/22(土) 10:40:20.45
シェルスクリプトから離れてごめんだけど、dicodはちゃんとした辞書形式(索引-シーク位置)にコンパイルしなくても受け付けてくれたはずだよ、dictは使ってないので分からん
emacsの何とか形式ってやつがマニュアルに記載あったはず、単なる見出し+テキストのプレーンテキスト
マニュアルが激しく読みにくいけどsedあたりで頑張ってみたら
まあ索引付けないならgrepより速くなる保証もないわけだけど
曖昧検索や部分一致、逆引き、履歴等々色々高度な事もできるので、例え遅くてもやる価値はあるかと
emacsの何とか形式ってやつがマニュアルに記載あったはず、単なる見出し+テキストのプレーンテキスト
マニュアルが激しく読みにくいけどsedあたりで頑張ってみたら
まあ索引付けないならgrepより速くなる保証もないわけだけど
曖昧検索や部分一致、逆引き、履歴等々色々高度な事もできるので、例え遅くてもやる価値はあるかと
2021/05/22(土) 10:54:30.10
これね
https://puszcza.gnu.org.ua/software/dico/manual/dico.html#outline
PDICクライアントは
見出し セパーレータ テキスト(改行等エスケープ) セパレータ 関連語等のメタデータ
でエクスポートできたはずなので、sed等でセパレータ後にタグ前置、次いでセパレータを改行に置換すれば大体おんなじ構造
下の方見るとpythonの辞書(ハッシュ実装)も受け付けるようなので、もしパフォーマンスに不満があれば次に試すと良さそう
https://puszcza.gnu.org.ua/software/dico/manual/dico.html#outline
PDICクライアントは
見出し セパーレータ テキスト(改行等エスケープ) セパレータ 関連語等のメタデータ
でエクスポートできたはずなので、sed等でセパレータ後にタグ前置、次いでセパレータを改行に置換すれば大体おんなじ構造
下の方見るとpythonの辞書(ハッシュ実装)も受け付けるようなので、もしパフォーマンスに不満があれば次に試すと良さそう
2021/05/22(土) 11:03:27.84
あー
descriptionとinfoタグは辞書についてのもので、項目はヘッダと本文のみ、メタデータは対応してないか
まあ本文に含めてしまって、逆引きで代替できると思う…
descriptionとinfoタグは辞書についてのもので、項目はヘッダと本文のみ、メタデータは対応してないか
まあ本文に含めてしまって、逆引きで代替できると思う…
2021/05/22(土) 11:18:26.85
>>391
> PID把握して/proc以下のfdに書き込む必要あるのか
え?そんなことできるんか?
/proc以下のファイルは調べることが出来るわけで
そんなこと出来たら不正なデータをインジェクションできてしまう気がするんだが
> PID把握して/proc以下のfdに書き込む必要あるのか
え?そんなことできるんか?
/proc以下のファイルは調べることが出来るわけで
そんなこと出来たら不正なデータをインジェクションできてしまう気がするんだが
399398
2021/05/22(土) 11:22:16.30 マジか・・・。できたわw
400398
2021/05/22(土) 11:23:12.33 あー、でもprocが必要だからmacOSじゃ無理?
401398
2021/05/22(土) 11:31:23.11 あ、勘違いっぽい。こんな感じで1〜10の頭に>をつけて出力させてる間に
seq 10 | { echo $BASHPID; while read a; do echo "> $a"; sleep 5; done; }
他の端末から echo aaa > /proc/<PID>/fd/1 ってやったら
確かに 1〜10 の間に出力が割り込まれたけど頭に>はついていなかった
seq 10 | { echo $BASHPID; while read a; do echo "> $a"; sleep 5; done; }
他の端末から echo aaa > /proc/<PID>/fd/1 ってやったら
確かに 1〜10 の間に出力が割り込まれたけど頭に>はついていなかった
2021/05/22(土) 11:33:56.66
>>398
プラットフォームによって違うと思うけど、ubuntuなら/proc/PID/fd/0|1|2、何だったかのunixではstdin|out|errが各プロセスのfile descriptorへのシムリンクになってるはず(/dev以下、/tmpとか)
自分の起動したプロセスなら当然rw権限はある、無ければそもそも入出力できないよ
システムに関わるデーモンなんかはroot権限で走ってるはずなので、セキュリティ的に問題は起きない
プラットフォームによって違うと思うけど、ubuntuなら/proc/PID/fd/0|1|2、何だったかのunixではstdin|out|errが各プロセスのfile descriptorへのシムリンクになってるはず(/dev以下、/tmpとか)
自分の起動したプロセスなら当然rw権限はある、無ければそもそも入出力できないよ
システムに関わるデーモンなんかはroot権限で走ってるはずなので、セキュリティ的に問題は起きない
403398
2021/05/22(土) 11:40:45.06 連投ごめん。標準入力のファイルディスクリプタは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 個の数字が出力されると思いきや
それ以上の適当な文字を出力させられる。
これセキュリティ的に大丈夫なん?
んで、すこし変えてこんなふうにして実行してみたんだけど
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 個の数字が出力されると思いきや
それ以上の適当な文字を出力させられる。
これセキュリティ的に大丈夫なん?
404398
2021/05/22(土) 11:44:28.31 うーん、自分しか読み書きできないから大丈夫・・・なのか?
それにしてもコマンドの出力結果の間に出力を割り込ませられるとはwww
それにしてもコマンドの出力結果の間に出力を割り込ませられるとはwww
2021/05/22(土) 11:52:44.59
echo helloでコンソールに文字が出るのも、キーボードから入力できるのも、ファイルをディスクに書き出すのも、シェルが暗黙のうちにそのデバイスファイル群を繋ぎ合わせてる結果
なんら特別な事じゃないよ
なんら特別な事じゃないよ
406398
2021/05/22(土) 11:57:08.22 proc使えば別プロセスの環境変数も読み込める・・・と思ったら起動時の環境変数か。
ってことは別プロセスから新たに子プロセスを起動すれば
まあいろいろできそうだけど、どっちみちprocが必要なんだよな
>>405
それはそうだけどproc=カーネルがあるプロセスの情報を
他のプロセスに公開してるからできることだよね?
macOSとかはprocがないから、内部的にはデバイスファイル郡を
つなぎ合わせていたとしてもそれが他のプロセスからは見れないはず
いずれにしろPOSIX標準ではなさそう
ってことは別プロセスから新たに子プロセスを起動すれば
まあいろいろできそうだけど、どっちみちprocが必要なんだよな
>>405
それはそうだけどproc=カーネルがあるプロセスの情報を
他のプロセスに公開してるからできることだよね?
macOSとかはprocがないから、内部的にはデバイスファイル郡を
つなぎ合わせていたとしてもそれが他のプロセスからは見れないはず
いずれにしろPOSIX標準ではなさそう
2021/05/22(土) 12:12:52.06
そもそもカーネルやシステム中核プロセスが不可視であるべき、ってのは常識なのか?
ディレクトリの閲覧権限はxとwで制限できるから、そりゃ隠れてるのも居るかもしれないけどさ
Macは使わないので分からんが、windowsだってタスクマネージャ開けばユーザー権限で干渉不可なシステムプロセスがゾロゾロ動いてるの見えるけど
ディレクトリの閲覧権限はxとwで制限できるから、そりゃ隠れてるのも居るかもしれないけどさ
Macは使わないので分からんが、windowsだってタスクマネージャ開けばユーザー権限で干渉不可なシステムプロセスがゾロゾロ動いてるの見えるけど
2021/05/22(土) 12:37:32.55
OpenBSDでは5.7からprocfsは削除された
https://www.openbsd.org/plus57.html
> Deleted procfs (always suffered from race conditions and is now unused).
procfsを削除しました(常に競合状態に悩まされ、現在は使用されていません)
https://www.openbsd.org/plus57.html
> Deleted procfs (always suffered from race conditions and is now unused).
procfsを削除しました(常に競合状態に悩まされ、現在は使用されていません)
2021/05/22(土) 12:40:36.82
UNIXの全てがファイルという考えは面白かったが
本当に全てがファイルであるというは正しい考えなのだろうか?
本当に全てがファイルであるというは正しい考えなのだろうか?
2021/05/22(土) 12:58:05.17
読み書き出来るならファイルと見做せるんじゃね
環境変数なんかは読み書きできるけどファイルじゃないね
cpuは一応procにcpuinfoあるけど、別にフルアクセスできるわけじゃなし形だけね
lsofやpsで情報が得られるが、lsでアクセスできないならファイルとして抽象化されていない、でいいのかな(procfsが無いならlsできない、でいいの?)
それならOSのレベルで抽象化しなくても、シェルのレベルでファイルシステムのように見せる事もできる
windowsがそうだ)
cmdの振る舞いを見るとOSレベルでの一貫性は皆無だけど、pwshからはプロセス、レジストリ、環境変数まで全部ファイルシステムとして読み書きできるわけで
環境変数なんかは読み書きできるけどファイルじゃないね
cpuは一応procにcpuinfoあるけど、別にフルアクセスできるわけじゃなし形だけね
lsofやpsで情報が得られるが、lsでアクセスできないならファイルとして抽象化されていない、でいいのかな(procfsが無いならlsできない、でいいの?)
それならOSのレベルで抽象化しなくても、シェルのレベルでファイルシステムのように見せる事もできる
windowsがそうだ)
cmdの振る舞いを見るとOSレベルでの一貫性は皆無だけど、pwshからはプロセス、レジストリ、環境変数まで全部ファイルシステムとして読み書きできるわけで
2021/05/22(土) 13:02:29.53
> (procfsが無いならlsできない、でいいの?)
無理やりlsで表示させるんじゃなくて
別の形のコマンドを作るべきじゃなかったのか?ということ
無理やりlsで表示させるんじゃなくて
別の形のコマンドを作るべきじゃなかったのか?ということ
2021/05/22(土) 15:40:34.99
>>408
race conditionって具体的に何だろ、デバイスファイルに読み書き競合、あるいは排他制御でブロッキング頻発か
event pollみたいな仕組みはlinux固有だっけ?
どう上手くやろうがfdのやりくりをする方式はスケーラブルじゃないと思ってる
多重I/Oでパフォーマンス向上とか言ってOSに過剰なfd要求コール送り続けてるんだから
race conditionって具体的に何だろ、デバイスファイルに読み書き競合、あるいは排他制御でブロッキング頻発か
event pollみたいな仕組みはlinux固有だっけ?
どう上手くやろうがfdのやりくりをする方式はスケーラブルじゃないと思ってる
多重I/Oでパフォーマンス向上とか言ってOSに過剰なfd要求コール送り続けてるんだから
2021/05/22(土) 17:08:31.51
>>412
たぶん情報を取得したが取得中にリアルタイムで情報が変わってしまい
矛盾した情報になってしまったとかじゃね?
もしくは複数のファイルから取得した情報が矛盾してしまうとか
情報を取得してからそれを利用するまでの間に時間があるから
取得した情報が信用できないというのは当然として少なくとも取得した時点では
それらの情報は矛盾しないようにスナップショットである必要がある
たぶん情報を取得したが取得中にリアルタイムで情報が変わってしまい
矛盾した情報になってしまったとかじゃね?
もしくは複数のファイルから取得した情報が矛盾してしまうとか
情報を取得してからそれを利用するまでの間に時間があるから
取得した情報が信用できないというのは当然として少なくとも取得した時点では
それらの情報は矛盾しないようにスナップショットである必要がある
2021/05/22(土) 22:12:21.51
例えば歯抜け連番名ファイルを詰めて連番にする場合
for f in renban* ; do
mv $f 新ファイル名
done
とやると、該当ファイルが0個でもループ内の mv を実行しようとしてエラーになります。
ループ前に該当ファイルの有無のチェックが不要な方法はないでしょうか?
for f in renban* ; do
mv $f 新ファイル名
done
とやると、該当ファイルが0個でもループ内の mv を実行しようとしてエラーになります。
ループ前に該当ファイルの有無のチェックが不要な方法はないでしょうか?
2021/05/22(土) 22:12:33.00
2021/05/22(土) 22:35:09.95
>>414
たぶんrenban*がfに入るってるよね
モダンなシェルならsetで好きな挙動選べるよ
(bashならnullglobとかglobfailとか)
ただ、わざわざその一文の為にオプションいじくるよりは普通にチェックした方がいいと思うよ
たまにおまじない書き忘れて頭ひねったりするから
たぶんrenban*がfに入るってるよね
モダンなシェルならsetで好きな挙動選べるよ
(bashならnullglobとかglobfailとか)
ただ、わざわざその一文の為にオプションいじくるよりは普通にチェックした方がいいと思うよ
たまにおまじない書き忘れて頭ひねったりするから
2021/05/23(日) 06:00:13.67
こんな感じかなあ?
set -- renban*
[ $# -eq 1 ] && [ ! -e "$1" ] && set --
for f in "$@"; do
mv $f 新ファイル名
done
でもまあ、ファイル名一覧を取得してからmvしてる間に
ファイルが別プロセスによって消されてリすることがあるから
どちらにしろmvがエラーになる可能性はあるんだよね
set -- renban*
[ $# -eq 1 ] && [ ! -e "$1" ] && set --
for f in "$@"; do
mv $f 新ファイル名
done
でもまあ、ファイル名一覧を取得してからmvしてる間に
ファイルが別プロセスによって消されてリすることがあるから
どちらにしろmvがエラーになる可能性はあるんだよね
2021/05/23(日) 10:42:49.61
ls renban* | while read f;do mv $f 新ファイル名; done
だとループには入らないけど、ファイルがないときにlsがエラー吐くねw
find -maxdepth 1 -name "*.csv" | while read f;mv $f 新ファイル名;done
これでどう?w
> ファイルが別プロセスによって消されてリすることがあるから
↑もちろんこの問題は避けられないけどね。
だとループには入らないけど、ファイルがないときにlsがエラー吐くねw
find -maxdepth 1 -name "*.csv" | while read f;mv $f 新ファイル名;done
これでどう?w
> ファイルが別プロセスによって消されてリすることがあるから
↑もちろんこの問題は避けられないけどね。
2021/05/23(日) 10:45:47.34
どうせワンタイムだろうしあんまり細かいこと気にしてるとハゲるぞー
といいつつ
もしrenbanが何万にものぼるとして、globしてからmvに取り掛かるまでの時間差が気になるんだったら
findに-name 'renban*'を処理させ、アクションの逐次実行を指定する;を渡せば隙は(ほぼ)ないはず
-exec {} target$suffix \;
+を渡すと速いけどバッチ処理だからglobとおんなじ
といいつつ
もしrenbanが何万にものぼるとして、globしてからmvに取り掛かるまでの時間差が気になるんだったら
findに-name 'renban*'を処理させ、アクションの逐次実行を指定する;を渡せば隙は(ほぼ)ないはず
-exec {} target$suffix \;
+を渡すと速いけどバッチ処理だからglobとおんなじ
2021/05/23(日) 10:55:53.30
>>419
find -maxdepth 1 -name "renban*" -exec mv {} 新ファイル名 \;
かw
そうだね、それが正解だw
(なんでもパイプで渡してしまう悪いくせを晒してしまった…w)
find -maxdepth 1 -name "renban*" -exec mv {} 新ファイル名 \;
かw
そうだね、それが正解だw
(なんでもパイプで渡してしまう悪いくせを晒してしまった…w)
2021/05/23(日) 10:57:03.17
>>418
スルーしてほしいってのが要望のようだけど、対象指定をミスったなら失敗する方が健全だと思います
スルーしてほしいってのが要望のようだけど、対象指定をミスったなら失敗する方が健全だと思います
2021/05/23(日) 11:15:08.17
>>421
まあ、依頼主の要望を可能な限り叶えたまでさ。
あとは好みと状況でどちらでもお好きな方をw
ただ、この場合lsでやっつけてるけど、本当はlsの出力はそんなにあてにして
いいものではないので、気をつけて。
いろんな意味でfind -execの方が正統だよ。
まあ、依頼主の要望を可能な限り叶えたまでさ。
あとは好みと状況でどちらでもお好きな方をw
ただ、この場合lsでやっつけてるけど、本当はlsの出力はそんなにあてにして
いいものではないので、気をつけて。
いろんな意味でfind -execの方が正統だよ。
423419
2021/05/23(日) 12:19:18.50 shのglobはソート済みが保証されてたと思うけど、findはどうだったか自信がない…
誰か試せる人補足よろしく
誰か試せる人補足よろしく
2021/05/23(日) 13:00:38.86
ソートしてから逐次実行してるんなら期待してたアトミック性は無いねー
2021/05/23(日) 13:14:58.68
>>423
findはディスクに忠実にファイルシステム上の順番だね。
そして、globは確かにソートされてるようだ。
ちなみにlsもソートされるし、それはオプションで変えられる、と。
一応、環境書いとくと、Fedora33のbashにて
findはディスクに忠実にファイルシステム上の順番だね。
そして、globは確かにソートされてるようだ。
ちなみにlsもソートされるし、それはオプションで変えられる、と。
一応、環境書いとくと、Fedora33のbashにて
2021/05/23(日) 13:36:53.66
2021/05/23(日) 13:40:34.27
globかlsのたypoです
2021/05/24(月) 02:05:05.30
414です
回答ありがとうございます。
ループ前チェックは何だか美しくないように思えたので(個人の感想です)
0個なら即doneに移る方法はないものかとお尋ねした次第です。
0個でも一度はループに入るという仕様が続いているのはきっと何か意味があるのでしょうね。
回答ありがとうございます。
ループ前チェックは何だか美しくないように思えたので(個人の感想です)
0個なら即doneに移る方法はないものかとお尋ねした次第です。
0個でも一度はループに入るという仕様が続いているのはきっと何か意味があるのでしょうね。
2021/05/24(月) 08:05:21.35
ループじゃなくて*の展開の仕様だよ
合理的に考えれば、展開を指示してマッチ無しならば0件にヒットしたとして何も返さないか空文字
展開が失敗したと考えてエラーのどちらかだろう
多分深い意味はないから気にすんな
合理的に考えれば、展開を指示してマッチ無しならば0件にヒットしたとして何も返さないか空文字
展開が失敗したと考えてエラーのどちらかだろう
多分深い意味はないから気にすんな
2021/05/24(月) 08:08:28.58
いや気にしなきゃだめか
ココがヘンだよbshくらいの気持ちで構えてれば、案外可愛く思えてくるぞ
ココがヘンだよbshくらいの気持ちで構えてれば、案外可愛く思えてくるぞ
431名無しさん@お腹いっぱい。
2021/05/24(月) 09:50:48.812021/05/24(月) 10:20:26.93
lsとglobがソートされるってどこに書いてあったっけ?
前に見た気がするけど英語の中から探すのめんどいw
前に見た気がするけど英語の中から探すのめんどいw
2021/05/24(月) 10:48:30.44
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なんたらを処理しようとしてるのに、関係ないファイルを処理してしまう。
おそらく安全側に倒したからだと思ってるんだがいい例が思いつかないな
例えば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なんたらを処理しようとしてるのに、関係ないファイルを処理してしまう。
2021/05/24(月) 20:33:55.32
一つでもあればループ内を実行して、(それ以上)無ければ抜ける。
だから、(最初から)無ければそのまま抜けて欲しいな、と。
該当するものが無いのだからループ内を実行するのは無意味だし。
だから、(最初から)無ければそのまま抜けて欲しいな、と。
該当するものが無いのだからループ内を実行するのは無意味だし。
435名無しさん@お腹いっぱい。
2021/06/06(日) 22:14:34.25 標準出力の速度を制限したり、通信速度を表示するコマンドを探しています。どなたか知りませんか?
2021/06/07(月) 00:11:53.58
>>435
pvコマンド(Pipe Viewer)でどうよ
pvコマンド(Pipe Viewer)でどうよ
437名無しさん@お腹いっぱい。
2021/06/07(月) 11:25:09.09438名無しさん@お腹いっぱい。
2021/06/15(火) 00:01:20.06 sed の 's/foo/bar/'
スラッシュ直前の【s】って何の意味でしょうか?
g:global
i:ignore
のような意味ありますか?
またman以外でこのような略語を調べるサイトなどありますでしょうか?
スラッシュ直前の【s】って何の意味でしょうか?
g:global
i:ignore
のような意味ありますか?
またman以外でこのような略語を調べるサイトなどありますでしょうか?
2021/06/15(火) 00:58:11.44
440名無しさん@お腹いっぱい。
2021/06/15(火) 01:15:20.43 >>439
ありがとうございます
ありがとうございます
2021/06/15(火) 11:14:03.04
edコマンドで気になってるのはv
versed subst?
でもversedって多分古語だしなあ…
exec grep -v "$@"にvrepと名付けることにした
versed subst?
でもversedって多分古語だしなあ…
exec grep -v "$@"にvrepと名付けることにした
2021/06/15(火) 15:03:29.77
>>441
grep の -v は --invert-match だから inVert substitute じゃねーの?
grep の -v は --invert-match だから inVert substitute じゃねーの?
2021/07/28(水) 19:08:57.09
_数字列_数字列_数字列_を含む文字列から先頭の数字列だけを取り出したいので
前段階としてそれより前の部分を切り出すために
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 になってしまいます。
どうすればいいでしょうか?
前段階としてそれより前の部分を切り出すために
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 になってしまいます。
どうすればいいでしょうか?
2021/07/28(水) 19:47:08.66
どう言った用途に使うんでしょうかね
2021/07/28(水) 21:32:13.47
446名無しさん@お腹いっぱい。
2021/07/30(金) 07:50:18.18 >>443
そうなるように書いていますけど?
そうなるように書いていますけど?
447名無しさん@お腹いっぱい。
2021/07/30(金) 07:51:44.84 彼はsubstringの概念がないんでしょうかね。
2021/07/30(金) 08:39:43.50
任意個数の数字だけの塊をglobは表現できないので、お題の変換は無理
2021/08/08(日) 22:00:16.40
書き込めるかテスト
2021/08/08(日) 22:07:53.75
>>443
こんな感じでいけるんでね?前段階の話すっ飛ばして答えだけど
テストしてないので動かなくても知らん
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
こんな感じでいけるんでね?前段階の話すっ飛ばして答えだけど
テストしてないので動かなくても知らん
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
2021/08/08(日) 22:24:57.80
>>445のいうように、sedで一行それも大したことない正規表現で済むな
シェルスクリプトだけという課題の制限でもなければ
シェルスクリプトだけという課題の制限でもなければ
2021/08/09(月) 01:15:27.49
シェルスクリプトで無理といった途端
シェルスクリプトの実装が出てきたんで
慌てて取り繕ったか?w
シェルスクリプトの実装が出てきたんで
慌てて取り繕ったか?w
2021/08/09(月) 01:42:06.59
ねじ曲がりすぎ
そんな発想になるのは、お前>>450ぽいな
そんな発想になるのは、お前>>450ぽいな
2021/08/09(月) 13:03:23.04
俺は面白いと思うぞ、やりたくないけどな
bashやzshならパターンの否定が使えるextglobオプション+%パラメータ展開を使うのが多分一番楽かと
bashやzshならパターンの否定が使えるextglobオプション+%パラメータ展開を使うのが多分一番楽かと
2021/08/18(水) 19:41:40.78
藤林丈司
2021/08/31(火) 05:29:27.62
引数を表示するのに
echo $1
だけのスクリプトファイルを作って実行するのですが
なぜか引数が1&2等の場合にうまくいきません
echo $1
だけのスクリプトファイルを作って実行するのですが
なぜか引数が1&2等の場合にうまくいきません
2021/08/31(火) 05:46:42.81
そうなんですね
2021/08/31(火) 11:29:04.37
標準出力とエラー出力を引数にしたいってことループしないそれ
2021/08/31(火) 11:54:53.66
2021/08/31(火) 12:07:22.10
単に
sh scriptfile.sh 1&2
ってやってしまってるだけじゃないの
呼び出す側の問題
echoで展開後に&が問題になることはないのでクォートしなくても問題にはならない。クォートした方がいいけど
sh scriptfile.sh 1&2
ってやってしまってるだけじゃないの
呼び出す側の問題
echoで展開後に&が問題になることはないのでクォートしなくても問題にはならない。クォートした方がいいけど
2021/09/01(水) 00:03:03.07
2021/09/01(水) 02:30:08.96
そんなわかりきったことを
マウントとりたがりすぎ
マウントとりたがりすぎ
2021/09/01(水) 03:42:36.41
2021/09/01(水) 11:21:33.57
間違った指摘してたくせにw
何で常時偉そうにしなきゃならんのだかだが、自覚ないアホか
何で常時偉そうにしなきゃならんのだかだが、自覚ないアホか
2021/09/02(木) 16:02:37.40
コマンド展開で質問。
echo $(...) | sed ...
みたいなスクリプトで、$(...)内のコマンドが失敗したとき、そこでエラー終了してほしいんだけど、ムリ?
set -eしても、これには効果がないもよう。
echo $(...) | sed ...
みたいなスクリプトで、$(...)内のコマンドが失敗したとき、そこでエラー終了してほしいんだけど、ムリ?
set -eしても、これには効果がないもよう。
2021/09/02(木) 17:36:39.83
コマンド置換ではムリだねえ
2021/09/02(木) 17:47:03.78
>コマンド置換ではムリだねえ
コマンドの引数にあるのはね
コマンド置換でも変数に入れるだけなら終了ステータス返る/見れる=-eなら止まる。そっちはやってるとかあるだろうけど、いちおう
コマンドの引数にあるのはね
コマンド置換でも変数に入れるだけなら終了ステータス返る/見れる=-eなら止まる。そっちはやってるとかあるだろうけど、いちおう
2021/09/03(金) 12:16:10.43
え?馬鹿なの?
var=$(...)
echo "$var" | sed ...
ってするだけじゃん
var=$(...)
echo "$var" | sed ...
ってするだけじゃん
2021/09/03(金) 12:25:07.03
すでにそう書かれてるだろうに
2021/09/03(金) 12:30:46.29
流れとか関係なくどこまで知っているのか想定もせず、
偉ぶれると思ったら食いつくいつもの馬鹿だろな
偉ぶれると思ったら食いつくいつもの馬鹿だろな
2021/09/03(金) 12:47:59.60
口は悪いけどみんなと仲良くしたいだけなんです大目に見てあげてください
2021/09/03(金) 12:51:54.14
>>470
おまえこそ、いつものマウンターマウンターだな。w
おまえこそ、いつものマウンターマウンターだな。w
2021/09/03(金) 13:51:00.00
>>471
そうでもないそうではないようだけどw
そうでもないそうではないようだけどw
2021/09/03(金) 15:15:28.44
2021/09/04(土) 07:46:40.91
だからさ、もう結論出てるんだよ
var=$(...)
echo "$var" | sed ...
こう書けば終わり
var=$(...)
echo "$var" | sed ...
こう書けば終わり
2021/09/05(日) 01:55:02.26
きも
2021/09/08(水) 16:22:00.10
sedのホールドスペースは、その内容を削除するにはどうすれば?
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
2021/09/08(水) 16:43:31.22
2021/09/08(水) 17:50:14.30
おう
2021/09/27(月) 09:26:46.66
怪しげなシェル芸が宣伝中
【広告記事】今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
ttps://type.jp/et/feature/14070/
【広告記事】今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
ttps://type.jp/et/feature/14070/
2021/11/03(水) 02:25:59.11
空白行でいくつかのブロックに分割されたテキストにて、
文字列にマッチするブロックを出力する方法を探してます
たとえば
111
222
222
aaa
222
333
333
333
のようなテキスト中から、aaaを検索した際に、その前後の空白行に囲まれたブロックである
222
222
aaa
222
という結果を得たいです
いまは最初にブロックごとに一時ファイルを作り、それぞれに対してgrepにて検索し
マッチしたファイルを出力、としているのですがブロックが20万ほどあり、
分割も検索も遅くて困ってます
該当するブロックは3〜5個程度なので、むしろgrepでマッチする行番号を調べる
→テキストをless等でひらき該当行へジャンプ
→そのブロックをコピペ
の方が早いくらいでして
文字列にマッチするブロックを出力する方法を探してます
たとえば
111
222
222
aaa
222
333
333
333
のようなテキスト中から、aaaを検索した際に、その前後の空白行に囲まれたブロックである
222
222
aaa
222
という結果を得たいです
いまは最初にブロックごとに一時ファイルを作り、それぞれに対してgrepにて検索し
マッチしたファイルを出力、としているのですがブロックが20万ほどあり、
分割も検索も遅くて困ってます
該当するブロックは3〜5個程度なので、むしろgrepでマッチする行番号を調べる
→テキストをless等でひらき該当行へジャンプ
→そのブロックをコピペ
の方が早いくらいでして
2021/11/03(水) 02:48:59.29
Linux板くだ質スレでいい加減嫌われたから流れてきたって感じかな
> ブロックが20万ほどあり
この時点でデータ構造の方を考え直すべき
> ブロックが20万ほどあり
この時点でデータ構造の方を考え直すべき
2021/11/03(水) 06:26:04.06
\n\n(\n...)ではない \nをスペース(やタブなど)に | grep '\<aaa\>' | スペース(やタブなどにしたの)を\nに
2021/11/03(水) 09:59:44.46
テキトーに色々
$ 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
$ 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
2021/11/03(水) 10:06:32.55
$ 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'
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'
2021/11/03(水) 10:07:40.48
$ 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)
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)
2021/11/03(水) 10:07:44.97
*(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'
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'
2021/11/04(木) 20:48:41.95
481です
いろいろな方法について情報ありがとうございます
参考にさせていただき、取り入れていこうと思います
いろいろな方法について情報ありがとうございます
参考にさせていただき、取り入れていこうと思います
2021/11/19(金) 02:41:59.96
特定の文字列で始まるファイルが存在するかの判断はどうすればいいでしょうか
ぐぐって見つけた ls を使う方法
if ls $f* > /dev/null 2>&1
then
echo $f で始まるファイルがあります
fi
だと該当ファイルが存在しない場合に
...にアクセスできません: そのようなファイルやディレクトリはありません
というエラーメッセージが表示されます。
また、
for g in $f* ; do
echo $f で始まるファイル $g があります
done
だと該当ファイルがない場合でもループの中に入ってしまいます。
ぐぐって見つけた ls を使う方法
if ls $f* > /dev/null 2>&1
then
echo $f で始まるファイルがあります
fi
だと該当ファイルが存在しない場合に
...にアクセスできません: そのようなファイルやディレクトリはありません
というエラーメッセージが表示されます。
また、
for g in $f* ; do
echo $f で始まるファイル $g があります
done
だと該当ファイルがない場合でもループの中に入ってしまいます。
2021/11/19(金) 03:28:14.33
find使うのはスクリプトじゃないから関係ないか
2021/11/19(金) 10:37:01.91
2021/11/19(金) 10:51:08.20
>>489
あと、forの場合は、シェルが対象がなくてglob展開できない場合はglobそのままの値となる。forの場合に限らずglobはそういうもの
for g in $f*
の場合は、g が $f* になるので、展開されずにそのままなのかチェックするのは必要
for g in $f*; do
[ "$g" = "$f*" ] && { echo 展開できませんでした; break; }
な感じで
あと、forの場合は、シェルが対象がなくてglob展開できない場合はglobそのままの値となる。forの場合に限らずglobはそういうもの
for g in $f*
の場合は、g が $f* になるので、展開されずにそのままなのかチェックするのは必要
for g in $f*; do
[ "$g" = "$f*" ] && { echo 展開できませんでした; break; }
な感じで
2021/11/19(金) 11:01:48.57
>forの場合に限らずglobはそういうもの
なので、
if [ "$(echo $f*)" != "$f*" ]
then
echo $f で始まるファイルがあります
fi
とかとも書ける
zshでnomatchだと余計なメッセージが出るし、>>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど、いちおう
なので、
if [ "$(echo $f*)" != "$f*" ]
then
echo $f で始まるファイルがあります
fi
とかとも書ける
zshでnomatchだと余計なメッセージが出るし、>>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど、いちおう
2021/11/19(金) 11:07:42.62
2021/11/19(金) 12:04:30.54
zshネタ、シェルスクリプトではなくて zsh script になってしまうが
null_glob
ってのもあるんだな
setopt null_glob
ってすると、エラーメッセージは出ないわ、globに当てはまらない場合globを入れない/消すわで、>>489のどっちも動くようになるな
そんな応えは求めてないだろうけどw
null_glob
ってのもあるんだな
setopt null_glob
ってすると、エラーメッセージは出ないわ、globに当てはまらない場合globを入れない/消すわで、>>489のどっちも動くようになるな
そんな応えは求めてないだろうけどw
2021/11/19(金) 12:07:54.26
ああ、bashにもnullglobって同じようなのがあるのか
シェルスクリプトという汎用ではなく各シェル固有独特の機能なので使わないだろけど
シェルスクリプトという汎用ではなく各シェル固有独特の機能なので使わないだろけど
2021/11/19(金) 12:11:32.22
2021/11/19(金) 23:23:19.51
489です
ありがとうございます。
とても参考になりました。
ありがとうございます。
とても参考になりました。
2021/11/21(日) 19:09:01.55
コマンドの出力を(だけ)ではなく、シェルそのものの出力(=コマンドの出力もになる)を消すなら
if (exec 1>/dev/null;exec 2>&1;ls $f*); then
echo $f で始まるファイルがあります
fi
て現在のシェル環境を変更(元に戻すのが面倒なのでサブシェルでそこの環境を変更)で消すというのもできたな
if (exec 1>/dev/null;exec 2>&1;ls $f*); then
echo $f で始まるファイルがあります
fi
て現在のシェル環境を変更(元に戻すのが面倒なのでサブシェルでそこの環境を変更)で消すというのもできたな
2021/11/21(日) 19:15:56.45
>if (exec 1>/dev/null;exec 2>&1;ls $f*); then
execのディスクリプタ操作は羅列ができるようなのね
if (exec 1>/dev/null 2>&1;ls $f*); then
の方が良さげか
execのディスクリプタ操作は羅列ができるようなのね
if (exec 1>/dev/null 2>&1;ls $f*); then
の方が良さげか
2021/11/21(日) 22:35:21.95
>>489
check() {
set -- "$1"*
[ -e "$1" ]
}
最短だとこうかな?
set -- "$1"* でシェルのglob展開を用いて位置パラメーターにセットする
ファイルが見つかった場合、そのファイル名が$1に入る
ファイルが見つからなかった場合、"$1"*という文字列が入る
まずありえないとは思うけど"$1*"という名前にアスタリスクが含まれた
ファイルがある可能性を考えると>>492よりも-eでチェックした方が良い
と>>494で書いてあったかw
>>493
> >>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど
ls $f* は意味がない。シェルのglob展開されてからlsを実行してる。
つまりls file1 file2 file3 のようなものを実行してるだけ。
呼び出す前にすでにファイル一覧を取得してる
単に呼び出しコストが高い[ -e ] になってる
check() {
set -- "$1"*
[ -e "$1" ]
}
最短だとこうかな?
set -- "$1"* でシェルのglob展開を用いて位置パラメーターにセットする
ファイルが見つかった場合、そのファイル名が$1に入る
ファイルが見つからなかった場合、"$1"*という文字列が入る
まずありえないとは思うけど"$1*"という名前にアスタリスクが含まれた
ファイルがある可能性を考えると>>492よりも-eでチェックした方が良い
と>>494で書いてあったかw
>>493
> >>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど
ls $f* は意味がない。シェルのglob展開されてからlsを実行してる。
つまりls file1 file2 file3 のようなものを実行してるだけ。
呼び出す前にすでにファイル一覧を取得してる
単に呼び出しコストが高い[ -e ] になってる
2021/11/21(日) 23:15:10.23
見た目っ言ってるだろ
そんなコスト気にする必要もないから、見た目とそっちの方を重視してだよ
そんなコスト気にする必要もないから、見た目とそっちの方を重視してだよ
2021/11/21(日) 23:18:58.18
他人の提案を直接ダメ出しして自分の知識自慢をしたがり、
マウント取るのが目的なやつは他のシェルスクリプトスレでも居るけど、
同じやつかな
マウント取るのが目的なやつは他のシェルスクリプトスレでも居るけど、
同じやつかな
2021/11/21(日) 23:19:33.52
lsの見た目の何がいいの?
ファイルリストを取得しても何やってるのか意味わからんでしょ
ファイルリストを取得しても何やってるのか意味わからんでしょ
2021/11/21(日) 23:20:38.15
2021/11/21(日) 23:21:00.73
lsはファイルがあるか確認するのに普通に使ってるだろ、手打ちで
2021/11/21(日) 23:22:25.30
2021/11/21(日) 23:31:25.93
でたw
自分が説明できてないだけなのに
裏が読めてないと相手のせいにする
詐欺師の手段と同じ
自分が説明できてないだけなのに
裏が読めてないと相手のせいにする
詐欺師の手段と同じ
2021/11/21(日) 23:34:45.43
自分にある意味ダメ出しされたらイキリマ来るくせに。変なやつ
説明できないとか似たようなフレーズはあいつもすぐにしてたなあ
巣に帰れよw
説明できないとか似たようなフレーズはあいつもすぐにしてたなあ
巣に帰れよw
2021/11/21(日) 23:40:47.87
「裏を読めない」と言った時点で
自分で書いてないって言ってるのってわかってないのかな?
思い込み激しすぎるんだよな
例のPOSIX原理主義者みたいだw
自分で書いてないって言ってるのってわかってないのかな?
思い込み激しすぎるんだよな
例のPOSIX原理主義者みたいだw
2021/11/21(日) 23:46:30.79
読めませんでしたと素直に言えよ
わざわざ見た目って言ってるのはなんなのかは、細かいこと言うなら、
また、そこまで食い下がるならそれぐらい裏読めよ
せめて、読めませんでしたと素直になれよ。他人にダメ出しばっかしてないで
自分にダメ出しされたらイキリまくるくせに、他人にダメ出しはするって、
マジでマウント取るのが目的でしかないだろう
マウント取るためだから素直には人の言うことは読めないから、
イキリまくることになるんだろうなと
そのしつこさはやはりなっていう
マウント取るためだからしつこく食い下がるんだろうなあ...
わざわざ見た目って言ってるのはなんなのかは、細かいこと言うなら、
また、そこまで食い下がるならそれぐらい裏読めよ
せめて、読めませんでしたと素直になれよ。他人にダメ出しばっかしてないで
自分にダメ出しされたらイキリまくるくせに、他人にダメ出しはするって、
マジでマウント取るのが目的でしかないだろう
マウント取るためだから素直には人の言うことは読めないから、
イキリまくることになるんだろうなと
そのしつこさはやはりなっていう
マウント取るためだからしつこく食い下がるんだろうなあ...
2021/11/22(月) 00:00:02.71
書いてないものは読めません
アホすぎる
アホすぎる
2021/11/22(月) 00:00:26.12
POSIX原理主義者って本当みたいだなw
2021/11/22(月) 00:02:28.08
書いてないものは読めません
って短絡的に言えちゃうのは確かにアホだな、それが攻撃的な人格のヤツがなら
って短絡的に言えちゃうのは確かにアホだな、それが攻撃的な人格のヤツがなら
2021/11/22(月) 00:08:40.31
>>513
自らアホ晒してるだけだぞ
なんでPOSIX原理主義者に結びつけるのか意味わからん
もちろんあんな自ら手足縛るのは嫌いだ/必要ないし、イキってる姿勢はもっと嫌いだし
ホント短絡的だな。トンチンカンな決めつけばかりって何したいんだか
自らアホ晒してるだけだぞ
なんでPOSIX原理主義者に結びつけるのか意味わからん
もちろんあんな自ら手足縛るのは嫌いだ/必要ないし、イキってる姿勢はもっと嫌いだし
ホント短絡的だな。トンチンカンな決めつけばかりって何したいんだか
2021/11/22(月) 00:09:15.81
説明不足を他人のせいにするのが流行ってるの?
2021/11/22(月) 00:10:39.73
相手によるだろう
2021/11/22(月) 00:16:59.61
2021/11/22(月) 00:18:57.19
また思い込みで語ってるw
2021/11/22(月) 00:23:14.57
2021/11/22(月) 00:29:52.48
俺がPOSIX原理主義者だとしたいなら、
POSIX原理主義者のくせに知識不足でマウント取られた恨みがあるから
かな
だとしてもPOSIX原理主義者に結びつける説明にはなってないなあ
カオスだな。ここまでにしとこか
POSIX原理主義者のくせに知識不足でマウント取られた恨みがあるから
かな
だとしてもPOSIX原理主義者に結びつける説明にはなってないなあ
カオスだな。ここまでにしとこか
2021/11/22(月) 02:10:39.67
2021/11/22(月) 02:11:59.82
>>520
510には「POSIX原理主義者」に知識不足でマウント取られた過去があって
恨みがあるから「POSIX原理主義者」という言葉を持ち出した
ってことでしょ
510がマウントとられてぐぬぬとなった時に、510には相手がPOSIX原理主義者のように思えたらしいというだけで
本当にPOSIX原理主義者かどうかさえ不明だし、誰がPOSIX原理主義者かなんてどうでもいい
510には「POSIX原理主義者」に知識不足でマウント取られた過去があって
恨みがあるから「POSIX原理主義者」という言葉を持ち出した
ってことでしょ
510がマウントとられてぐぬぬとなった時に、510には相手がPOSIX原理主義者のように思えたらしいというだけで
本当にPOSIX原理主義者かどうかさえ不明だし、誰がPOSIX原理主義者かなんてどうでもいい
2021/11/22(月) 02:13:47.43
>>522
言語新作は病気だよ
言語新作は病気だよ
2021/11/22(月) 03:28:05.45
>>523
無理があるだろう
無理があるだろう
2021/12/11(土) 11:26:25.87
fishについて質問です
fish_vi_key_bindingsを入力するとviモードに入りプロンプトの左にモードステイタスが表示されますが、
$XDG_CONFIG_HOME/fish/config.fish にfish_vi_key_bindingsを記入した場合はログイン後すぐにviモードか使えますがモードステイタスが表示されません
どうやったら表示出来ますか?
fish_vi_key_bindingsを入力するとviモードに入りプロンプトの左にモードステイタスが表示されますが、
$XDG_CONFIG_HOME/fish/config.fish にfish_vi_key_bindingsを記入した場合はログイン後すぐにviモードか使えますがモードステイタスが表示されません
どうやったら表示出来ますか?
2021/12/11(土) 13:46:58.57
fish_prompt
2021/12/11(土) 13:48:39.11
fish_mode_prompt
2021/12/11(土) 13:49:12.15
を、$XDG_CONFIG_HOME/fish/config.fish に書いてるんじゃないの
2021/12/11(土) 15:39:24.15
>>529
どうもありがとうございます
それらは書かれていませんが、こう書かれてありましたのでコメントアウトしてみたらモードが表示されるようになりました
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
どうもありがとうございます
それらは書かれていませんが、こう書かれてありましたのでコメントアウトしてみたらモードが表示されるようになりました
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
2021/12/11(土) 15:48:57.02
インサートモードの時に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
function fish_user_key_bindings
fish_vi_key_bindings
bind -M insert -m default jj backward-char force-repaint
end
2022/02/26(土) 23:09:30.57
端末では正常な
$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)
$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)
533名無しさん@お腹いっぱい。
2022/02/27(日) 07:10:41.81 >>532
理由はよく分からないけど extglob が on ならエラーにならないね
理由はよく分からないけど extglob が on ならエラーにならないね
2022/02/27(日) 09:42:18.76
>>532
シバンでググれ
シバンでググれ
2022/02/27(日) 19:45:20.55
なんかbashの仕様のグダグダなところを踏んだって感じだな。
エスケープされていない生の ( は基本的にwordの途中に出てこないので、
w3+( ときたところでsyntax errorになる。
ところが、shopt -s extglob しておくと、
+(hoge|fuga) みたいなパターンマッチを許すため、
w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。
*( も可。しかし、/( と -( は不可。
おとなしく $(( )) を使っておくのが吉。
エスケープされていない生の ( は基本的にwordの途中に出てこないので、
w3+( ときたところでsyntax errorになる。
ところが、shopt -s extglob しておくと、
+(hoge|fuga) みたいなパターンマッチを許すため、
w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。
*( も可。しかし、/( と -( は不可。
おとなしく $(( )) を使っておくのが吉。
2022/02/28(月) 06:45:21.62
自分が理解できないからって
bashのせいにするのは恥ずかしい行為
bashのせいにするのは恥ずかしい行為
2022/03/08(火) 18:54:54.29
grepとかで使える正規表現の「\s」は、manページのどこに書いてますか?
「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。
「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。
2022/03/10(木) 22:56:33.04
declare -i n; n="3/2" は通るのに、n="1.5" が通らないのはなぜだろ
2022/03/10(木) 23:31:05.02
エラーで出ている通り、
リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない
数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない
てとこかな
リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない
数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない
てとこかな
2022/03/10(木) 23:46:00.98
2022/03/11(金) 00:08:44.90
>>540,537
いや、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のでもなく他の資料を当たるしかないかな
いや、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のでもなく他の資料を当たるしかないかな
2022/03/11(金) 00:14:53.27
2022/03/11(金) 12:03:17.08
>>540-542
やっぱり記載漏れかな?
理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。
個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。
やっぱり記載漏れかな?
理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。
個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。
2022/03/11(金) 12:17:43.20
>>543
他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ
他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ
2022/03/11(金) 16:00:00.94
>>544
たしかにinfo grepには「\s」が書いてあるな。
でもinfo bashには書かれてなくて、man 3 regexに回されてるような。
結局はinfoでも解決しなさそうな気がするんだけど、違う?
info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは?
まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。
たしかにinfo grepには「\s」が書いてあるな。
でもinfo bashには書かれてなくて、man 3 regexに回されてるような。
結局はinfoでも解決しなさそうな気がするんだけど、違う?
info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは?
まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。
546あぼーん
NGNGあぼーん
2022/05/12(木) 22:19:26.11
シェルスクリプトの [ -a (AND) と -o (OR) ] は非推奨だかんね
https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521
には -a や -o ではなく && と || を使うように書かれています。
否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?
https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521
には -a や -o ではなく && と || を使うように書かれています。
否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?
2022/05/13(金) 01:22:03.48
2022/05/13(金) 16:01:08.55
2022/05/14(土) 23:52:35.51
昔のFreeBSDでは
[ -n abc -lt 5 ]
みたいのが通った記憶
[ gnu 8.30で今試すとextra argument '['
と怒られる
手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな
[ -n abc -lt 5 ]
みたいのが通った記憶
[ gnu 8.30で今試すとextra argument '['
と怒られる
手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな
2022/05/15(日) 03:02:55.37
シェルスクリプトって息が長いから
そういう使うべきじゃないものも残っていて困るね
さすがに古すぎる機能は互換性切り捨てた方が良くない?
そういう使うべきじゃないものも残っていて困るね
さすがに古すぎる機能は互換性切り捨てた方が良くない?
2022/05/15(日) 12:09:01.91
whileの、条件が偽でも一度はループって仕様が不思議
2022/05/15(日) 15:51:51.12
そんな仕様なんて無いし
シェルスクリプトに文句言ってるやつの8割は
自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる
シェルスクリプトに文句言ってるやつの8割は
自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる
2022/05/15(日) 17:54:30.30
do while をシェルスクリプトでどう実現するかって話もWeb上であるけど、
それなんの話ってことになるわな
それなんの話ってことになるわな
2022/05/23(月) 13:54:54.31
ぐぐっても見つけられないんだけど
functionの中のlocal変数に整数属性付与って出来ないのかな?
functionの中のlocal変数に整数属性付与って出来ないのかな?
2022/05/23(月) 23:44:52.02
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になるだろ?
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になるだろ?
2022/05/24(火) 01:33:27.87
ぐぐるな!
黙って
man sh
黙って
man sh
2022/05/24(火) 17:18:15.58
2022/05/25(水) 00:13:58.24
3つの引数を必要とする関数があります。
x=$1 y=$2 ANS=$3の絶対値
$3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。
x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。
質問:整数配列の宣言はできますか?
x=$1 y=$2 ANS=$3の絶対値
$3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。
x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。
質問:整数配列の宣言はできますか?
2022/05/25(水) 01:04:48.10
2022/05/25(水) 01:06:31.16
>>559
昨日、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
大盛りねぎだくギョク。これが通の頼み方。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。
答え:できまsん
昨日、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
大盛りねぎだくギョク。これが通の頼み方。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。
答え:できまsん
2022/05/31(火) 05:07:04.68
ありがとうございます。
色々やってみたら、配列として宣言しなくても使えるようです。
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
色々やってみたら、配列として宣言しなくても使えるようです。
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
2022/07/31(日) 09:46:48.93
ちょっとスレチかもですが、
for filename in *
とかでカレントディレクトリにあるファイル名を得る場合、どんな順番なのでしょうか?
ディレクトリエントリ順とか、ファイル名順とか。
for filename in *
とかでカレントディレクトリにあるファイル名を得る場合、どんな順番なのでしょうか?
ディレクトリエントリ順とか、ファイル名順とか。
2022/07/31(日) 11:17:31.68
ある程度ファイルがあるところで
echo *
すればわかる
echo *
すればわかる
2022/07/31(日) 12:25:43.85
2022/07/31(日) 17:53:21.88
>>563
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
名前順
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
名前順
2022/07/31(日) 17:56:03.40
>>566,563
SORTしないというオプションもあるが、その場合には順番の決まりなんてないということになるね
SORTしないというオプションもあるが、その場合には順番の決まりなんてないということになるね
2022/07/31(日) 19:31:44.03
質問者の使ってるシェルはposix準拠なのか
2022/07/31(日) 19:47:57.19
2022/08/02(火) 17:31:23.07
POSIX準拠が当たり前、
POSIXにはない/POSIXで足らない勝手に拡張部分で独自が当たり前
って当たり前がわからないんだろな
拡張するにしてもPOSIXをベース+αって馬鹿でもわかりそうなもんだが
機能的に必要最低限のPOSIXを無視する利益なんてないだろに
POSIXにはない/POSIXで足らない勝手に拡張部分で独自が当たり前
って当たり前がわからないんだろな
拡張するにしてもPOSIXをベース+αって馬鹿でもわかりそうなもんだが
機能的に必要最低限のPOSIXを無視する利益なんてないだろに
2022/08/02(火) 19:09:16.74
POSIXを無視する利益は互換性でしょ?
今までの動きを変えたらだめ
今までの動きを変えたらだめ
2022/08/02(火) 20:31:00.79
>POSIXを無視する利益は互換性
www
>今までの動きを変えたらだめ
前段からそれになるとか無茶苦茶
POSIXの経緯、POSIXは何をベースに作られたか勉強してきてから寝言言うんだよ
www
>今までの動きを変えたらだめ
前段からそれになるとか無茶苦茶
POSIXの経緯、POSIXは何をベースに作られたか勉強してきてから寝言言うんだよ
2022/08/03(水) 09:45:22.85
皆様ありがとうございました。シェルはbashです。
名前順的に最後のファイル名を得るには
for filename in * ; do
:
done
とするしかないようですね。
でもKDEのDolphineの自然なソート(ゼロパディング分の0を無視)のようなオプションは欲しいかも
名前順的に最後のファイル名を得るには
for filename in * ; do
:
done
とするしかないようですね。
でもKDEのDolphineの自然なソート(ゼロパディング分の0を無視)のようなオプションは欲しいかも
2022/08/03(水) 14:26:27.63
2022/08/03(水) 20:32:58.41
2022/08/03(水) 20:34:34.24
https://qiita.com/richmikan@github/items/bd4b21cf1fe503ab2e5c#tr%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
> POSIXに準拠してないSystem V実装が悪いと言ってしまえばそれまでなのだが、
> 歴史の上ではPOSIXよりも早いのでそれをいうのもまた理不尽というもの。ではどうすればいいか。
> POSIXに準拠してないSystem V実装が悪いと言ってしまえばそれまでなのだが、
> 歴史の上ではPOSIXよりも早いのでそれをいうのもまた理不尽というもの。ではどうすればいいか。
577名無しさん@お腹いっぱい。
2022/08/04(木) 09:47:52.75578名無しさん@お腹いっぱい。
2022/08/05(金) 10:23:52.722022/08/05(金) 10:46:42.12
>>578
ファイル名に改行が入る場合はどうすればいいのでしょうか?
ファイル名に改行が入る場合はどうすればいいのでしょうか?
2022/08/08(月) 18:30:05.02
自分ならまずそういうアホなファイル名を変更するが
権限がなければまあ
find -print0 | xargs -0
くらいだな
権限がなければまあ
find -print0 | xargs -0
くらいだな
2022/08/08(月) 21:06:49.38
2022/08/14(日) 20:39:40.32
POSIX準拠じゃなくてもFreeBSDで動くけどな
POSIXにないのでも、ツール間で合わせ合う、どっちかがどっちかに似せるというのは普通にあるしな
POSIXにないのでも、ツール間で合わせ合う、どっちかがどっちかに似せるというのは普通にあるしな
2022/08/14(日) 21:19:42.49
POSIXにないオプションは使用禁止だ
そんなものを使うと持続性がなくなる
なんらかの理由で別のOSに変更になった時
システムは動かなくなってデータはただのゴミになる
何度言えば理解できるのか
そんなものを使うと持続性がなくなる
なんらかの理由で別のOSに変更になった時
システムは動かなくなってデータはただのゴミになる
何度言えば理解できるのか
2022/08/15(月) 12:57:39.48
はいはい、原理主義ごくろうさん
使ってる本人次第でしかないのに押し付けとかホント原理主義者は
使ってる本人次第でしかないのに押し付けとかホント原理主義者は
2022/08/15(月) 13:03:07.61
原理主義者は自惚れてるけど無知さがだだ漏れる
無知さを隠す誤魔化すためのマウント取りでしかない
無知さを隠す誤魔化すためのマウント取りでしかない
586名無しさん@お腹いっぱい。
2022/08/15(月) 13:26:13.07 リッチー大佐はC言語も使える
ただし分割コンパイルやmakeといった高度な機能は使わない
そんなものはなくてもシェルスクリプトでmake.shを作れば良いからだ
ただし分割コンパイルやmakeといった高度な機能は使わない
そんなものはなくてもシェルスクリプトでmake.shを作れば良いからだ
2022/08/15(月) 13:28:32.48
>>581
pkg install findutils
pkg install findutils
2022/08/15(月) 14:25:12.28
それ入れなくてもFreeBSDのfindで可能だけどな
がっつりGNU依存のにしても、それ入れる+ちょっとパス修正だけだわな
がっつりGNU依存のにしても、それ入れる+ちょっとパス修正だけだわな
2022/08/15(月) 16:04:55.82
BSDのfindなら
find 場所 -print0 | xargs -0
find 場所 -print0 | xargs -0
2022/08/15(月) 20:36:03.11
持続性なら、もはやPOSIXよりも、Linuxのほうがいいのでは。
2022/08/16(火) 12:18:54.66
posixってソフトウェア規格でしょ?
2022/08/16(火) 12:28:09.90
ソフトウェア規格って?
公式ページでも見れば?
公式ページでも見れば?
2022/09/19(月) 12:12:56.52
bashの関数で文字列を返したい場合、その関数名を文字列名称に使うことは仕様的に可能ですか?
function kotae () {
kotae=$1$2
}
kotae ab cd
echo $kotae
function kotae () {
kotae=$1$2
}
kotae ab cd
echo $kotae
2022/09/23(金) 09:54:01.90
2022/09/23(金) 09:55:09.11
concはkotaeの間違い
頭の中で勝手に命名しちゃった
頭の中で勝手に命名しちゃった
2022/09/24(土) 14:46:59.72
2022/10/28(金) 02:25:37.28
bash 5.2.2(1)で最初の!だけ全角の
echo "abc!? xyz!"
は通るのに、半角にすると
echo "abcecho "abc!? xyz!"
>
になってしまいます。
一対の"で通すにはどうすればいいのでしょうか?
>>594-596
ありがとうございます。
printfのvオプションは初めて知りました。
echo "abc!? xyz!"
は通るのに、半角にすると
echo "abcecho "abc!? xyz!"
>
になってしまいます。
一対の"で通すにはどうすればいいのでしょうか?
>>594-596
ありがとうございます。
printfのvオプションは初めて知りました。
2022/10/28(金) 13:13:38.41
ヒストリ機能
知らない/活用してないならオフにしておくべき
対話モードでしか機能しないから切っても特に問題はない
知らない/活用してないならオフにしておくべき
対話モードでしか機能しないから切っても特に問題はない
2022/10/29(土) 10:43:22.22
バックスラッシュをつけてエスケープ。
2022/11/06(日) 16:47:34.57
恥を忍んで質問させて下さい:
Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、
Autoconf/Autotoolsが普及した理由って何でしょう?
1)Perlよりm4の方が普及してた(どっちも文法はアレだけど)
2)というかPerl嫌いな人が少なくなかった
3)そのほか(開発モデルとか)
...imakeって何だっけ?
Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、
Autoconf/Autotoolsが普及した理由って何でしょう?
1)Perlよりm4の方が普及してた(どっちも文法はアレだけど)
2)というかPerl嫌いな人が少なくなかった
3)そのほか(開発モデルとか)
...imakeって何だっけ?
601名無しさん@お腹いっぱい。
2022/11/06(日) 18:24:19.31 Autoconf/AutotoolsはGNUだからじゃね?しらんけど
2022/11/07(月) 01:26:02.31
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]
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]
2022/11/07(月) 06:20:59.25
6行以上書いたからじゃね?
2022/11/07(月) 07:38:39.12
>>602
クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる
少し時間を空ければ大丈夫なはず
てか、サーバーは何?
クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる
少し時間を空ければ大丈夫なはず
てか、サーバーは何?
605602
2022/11/07(月) 11:40:12.512022/11/08(火) 09:01:57.74
もしかしてファイル転送を多重化しようとしてるのかな そういうオプションがあったような気がするけどね rsync
2022/11/08(火) 23:15:42.53
はい、ぶたがみーるー
まあ、ここにも俺がいるわけですけどねw
まあ、ここにも俺がいるわけですけどねw
2023/03/27(月) 06:41:34.11
バックしまーす
2023/06/18(日) 23:35:36.05
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:その他': 有効な識別子ではありません
とエラーになるのですが、どうすればいいでしょうか?
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:その他': 有効な識別子ではありません
とエラーになるのですが、どうすればいいでしょうか?
610名無しさん@お腹いっぱい。
2023/06/19(月) 06:14:08.74 -p に渡っているのは " [Yes/No" だけで、残りの "$1" と "]: " は yn と同じく変数名として解釈されている
read -p " [Yes/No $1 ]: " yn
read -p " [Yes/No $1 ]: " yn
2023/06/23(金) 17:18:03.40
テスト
2023/08/23(水) 21:31:25.96
これってどうしてそうなのだろう?
2023/08/27(日) 18:57:22.73
readコマンドの引数にダブルクォートを使ってるからだぬ
だから>>610氏が指摘しているコトになってるぬ
だから>>610氏が指摘しているコトになってるぬ
2024/02/20(火) 08:47:58.81
先にBを算出することもなく変数の追加もなしで処理2を1箇所にすることは可能でしょうか?
if [ A ]; then
Bを算出
if [ B ]; then
処理1
else
処理2
fi
処理2
fi
if [ A ]; then
Bを算出
if [ B ]; then
処理1
else
処理2
fi
処理2
fi
2024/02/20(火) 14:15:04.07
2度目のエルスを書かなければいいだけじゃなくて?
616名無しさん@お腹いっぱい。
2024/02/20(火) 17:32:39.42 >>615
「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。
出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。
が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。
なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。
「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。
出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。
が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。
なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。
2024/02/22(木) 06:05:52.23
>>614
else 足りなくね
処理2を1度または2度実行するのに、1箇所にしたいとかイミフ
!Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw
Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に
else 足りなくね
処理2を1度または2度実行するのに、1箇所にしたいとかイミフ
!Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw
Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に
2024/02/22(木) 18:42:19.24
{ ifを何重にもネストしたブロック } || 処理2
みたいなのでも
みたいなのでも
619名無しさん@お腹いっぱい。
2024/03/14(木) 17:20:13.74 while ...do
処理1
done <<=LIST=
リスト1
=LIST=
while ...do
処理2
done <<=LIST=
リスト1
=LIST=
てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、
while ...do
処理1
処理2
done <<=LIST=
ではあかん。
処理1
done <<=LIST=
リスト1
=LIST=
while ...do
処理2
done <<=LIST=
リスト1
=LIST=
てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、
while ...do
処理1
処理2
done <<=LIST=
ではあかん。
620名無しさん@お腹いっぱい。
2024/03/14(木) 18:05:33.59 ヒアドキュメントの中で変数を展開できます。
LIST_CONTENT="リスト1
...
"
while read s; do
printf '%s\n' "${s}"
done <<LIST
${LIST_CONTENT}"
LIST
LIST_CONTENT="リスト1
...
"
while read s; do
printf '%s\n' "${s}"
done <<LIST
${LIST_CONTENT}"
LIST
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【対日戦略】中国とロシア、対日共闘で一致 「軍国主義復活に反撃」… ★5 [BFU★]
- 【文春】松岡昌宏が「日本テレビへの戸惑い」を語った!「鉄腕DASHの出演について、我々に進退を決める選択肢はないんだなと思った」 [Ailuropoda melanoleuca★]
- 【話題】おでんの好きな具は?! 「だいこん」「たまご」「もち巾着」「ちくわぶ」「こんにゃく」「牛すじ」★2 [ひぃぃ★]
- カルボナーラ論争勃発…イタリアの農相がイタリア風の商品に“怒りの投稿” [夜のけいちゃん★]
- 【社会】丸亀製麺12月24日は15時30分で閉店 従業員とその家族のため [あずささん★]
- 売買春は「性を買う側の尊厳も害される」…平口洋法務相… 東大法学部卒、元高級官僚議員の「素顔」とは [少考さん★]
- 高市早苗「黙って俺に投資しろ」→日本国債暴落止まらず [709039863]
- じゃん拳、グー🏡💥👊😅👊💥🏡
- amazon配送、流石に創造力の欠如が限界突破して炎上wwwwwwwwwwwwwwwwwwwww [329329848]
- タバコ違法化、日本人の9割が賛成 [279254606]
- ネトウヨ「俺等が望む東アジアはこれな。」画像ペタッ 1万いいね [165981677]
- 日本人「鍋美味しかったね!じゃあみんな喉奥に手突っ込んでゲロ吐いてー」
