1 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/08/02(木) 05:22:16.82 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 ・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています 最新の仕様はこちらへ pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」 から参照することができます。) ・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆうな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した
381 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 06:08:57.28 .net] そこは似非精進の生臭坊主で行こう
382 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 06:15:51.15 .net] >>358 > イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる 前方一致検索ならそれでもいいと思うけど、中間一致や全文検索だと結局すべてのファイルをgrepしないといけない SQLiteなら全文検索もあるようだ ytyaru.hatena (ドット)com/entry/2017/07/19/000000 >>364 > ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ インデックスつけるのが面倒なんでしょ? SQLiteならテーブル作ってデータを入れていくだけだよ
383 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 06:20:59.68 .net] >>374 原理主義者周辺にはNoSQLってこだわりがある。
384 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 07:32:30.98 .net] 原理主義者はNoSQLに何を使ってんの?
385 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 07:33:00.54 .net] MongoDBとか?
386 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 07:58:28.04 .net] 使えるならnamed pipeが行儀良いと思うけど、ポーリングさせるならただのファイルでも環境変数でも何でもいいんでね あんまりSSDへ頻繁に書き込みたくないなら環境変数か 個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら、ファイル分割で必要十分だろ メモリも今時100MBくらい一時占めるのは有りだとしても、常駐させるとなるとチリツモ
387 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:03:33.44 .net] >>378 いや、ファイルや環境変数を使うというのはどうでも良くて それらをどう使って実現するのか?って話だよ。 あなた、自動運転を実現するにはどうしたら良いか?って言う話に AIを使えばできるんです。みたいなことしか言ってないよw
388 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:04:29.68 .net] 定期的に読みに行けばいいだけじゃないの?
389 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:05:46.31 .net] > 個人コマンドラインツールで一秒で返ってくれば問題ないという要件なら 個人用途であれば、その程度でも構わないってことには反論はしないけどね C10K問題(クライアント1万台問題)が発生するような場合には、それじゃ使い物にならないけど
390 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:08:59.98 .net] >>380 もしかして 1. コマンド実行 2. 特定のディレクトリにファイルを作る 3. デーモンが1秒おきにそのディレクトリを監視している 4. デーモンはファイルを見つけたら処理をして新しく結果ファイルを作る 5. 1のコマンドは結果ファイルができるまで待ってて見つけたらその内容を表示する って話?
391 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:10:30.45 .net] この方法だと環境変数は無理っぽいな
392 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:12:00.68 .net] ・パイプで繋ぐと早い。 ・標準入力を<でリダイレクトするより、パイプを通じてcatで流し込んだ方が早い。 経典に書いてあるw
393 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:17:10.40 .net] 一つのnamed pipeに複数プロセスから同時に書き込んでも データは混ざらないんだっけ?
394 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:18:16.07 .net] 手動で排他制御せなあかんやろ
395 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:20:44.48 .net] ああ、ロックファイル使うのかw
396 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:37:55.55 .net] デーモンがメモリにデータを蓄えておくって 原理主義者的にはどうなんだろう?w
397 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:47:09.09 .net] >>382 おれはそう解釈するけど 結果もクエリも数行だろうから、環境変数の方がいい 標準sleepは1s単位なので微妙に要件満たせないけど、適当な代替コマンド用意できないなら2秒になってしまうが… msec sleep便利よ サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す 検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう フォアグラウンドのクライアント側は$query設定して1s sleep、(既に設定されているはずの)$responseを標準出力へ書き出す 完了フラグ立てるとか面倒な事やるのはシェルスクリプトの領分超えてると思うわ $responseが空ならエラー吐いて落とす 何回か走らせてみて、時間は適宜調整で決め打ちが楽だろう
398 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 08:51:16.35 .net] 古典技術ポーリング
399 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:05:22.83 .net] >>389 > 結果もクエリも数行だろうから、環境変数の方がいい いやいや環境変数は子プロセスには伝搬するけど デーモンとコマンドのように親子関係にないでは やり取りできないんだよ
400 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:07:41.80 .net] ダサいけどtmpファイルか
401 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:07:47.64 .net] > サーバスクリプトは$queryを1s sleepしながらループしてチェック、空で無ければクリアして検索に入り、$responseに書き出す なんつーかシェル変数(環境変数)をグローバル変数とでも勘違いしてるような書き方だな サーバースクリプトが$responseに書き出しても それは他のプロセスからは見えないんだよ
402 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:15:02.13 .net] > 検索時間をa-zの26ファイルに分けて検索時間を1/26~0.1s程度にまで削減、コードも頭文字とファイル名に整合が取れて短くなるだろう それだと中間一致には対応できない
403 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:27:09.09 .net] >>393 たしかに クライエントから起動するわけじゃないから、コマンド置換やsourceも使えないし、PID把握して/proc以下のfdに書き込む必要あるのか readするって言ってる>>365 の方が多分俺より賢いな 面倒だからやっぱ一時ファイルで…
404 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:33:01.34 .net] 直接の親にならdeclareの拡張や文字列evalシェル関数で書き換えられるけど、兄弟の環境は変える手段無いのか
405 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:40:41.97 .net] 兄弟でもメインループの中でexport hoge=hageをファイルに書き出して互いにsourceすれば共有できるぞ 結局一時ファイル作ることになるから、それを許容するなら全部一時ファイルでやり取りするか、 それを嫌うならpsでPID特定して直接リダイレクト
406 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 09:43:36.67 .net] シェルスクリプトでTCPとかUDPとかどうです旦那
407 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 10:40:20.45 .net] シェルスクリプトから離れてごめんだけど、dicodはちゃんとした辞書形式(索引-シーク位置)にコンパイルしなくても受け付けてくれたはずだよ、dictは使ってないので分からん emacsの何とか形式ってやつがマニュアルに記載あったはず、単なる見出し+テキストのプレーンテキスト マニュアルが激しく読みにくいけどsedあたりで頑張ってみたら まあ索引付けないならgrepより速くなる保証もないわけだけど 曖昧検索や部分一致、逆引き、履歴等々色々高度な事もできるので、例え遅くてもやる価値はあるかと
408 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 10:54:30.10 .net] これね https://puszcza.gnu.org.ua/software/dico/manual/dico.html#outline PDICクライアントは 見出し セパーレータ テキスト(改行等エスケープ) セパレータ 関連語等のメタデータ でエクスポートできたはずなので、sed等でセパレータ後にタグ前置、次いでセパレータを改行に置換すれば大体おんなじ構造 下の方見るとpythonの辞書(ハッシュ実装)も受け付けるようなので、もしパフォーマンスに不満があれば次に試すと良さそう
409 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 11:03:27.84 .net] あー descriptionとinfoタグは辞書についてのもので、項目はヘッダと本文のみ、メタデータは対応してないか まあ本文に含めてしまって、逆引きで代替できると思う…
410 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 11:18:26.85 .net] >>395 > PID把握して/proc以下のfdに書き込む必要あるのか え?そんなことできるんか? /proc以下のファイルは調べることが出来るわけで そんなこと出来たら不正なデータをインジェクションできてしまう気がするんだが
411 名前:398 mailto:sage [2021/05/22(土) 11:22:16.30 .net] マジか・・・。できたわw
412 名前:398 mailto:sage [2021/05/22(土) 11:23:12.33 .net] あー、でもprocが必要だからmacOSじゃ無理?
413 名前:398 mailto:sage [2021/05/22(土) 11:31:23.11 .net] あ、勘違いっぽい。こんな感じで1〜10の頭に>をつけて出力させてる間に seq 10 | { echo $BASHPID; while read a; do echo "> $a"; sleep 5; done; } 他の端末から echo aaa > /proc/<PID>/fd/1 ってやったら 確かに 1〜10 の間に出力が割り込まれたけど頭に>はついていなかった
414 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 11:33:56.66 .net] >>402 プラットフォームによって違うと思うけど、ubuntuなら/proc/PID/fd/0|1|2、何だったかのunixではstdin|out|errが各プロセスのfile descriptorへのシムリンクになってるはず(/dev以下、/tmpとか) 自分の起動したプロセスなら当然rw権限はある、無ければそもそも入出力できないよ システムに関わるデーモンなんかはroot権限で走ってるはずなので、セキュリティ的に問題は起きない
415 名前:398 mailto:sage [2021/05/22(土) 11:40:45.06 .net] 連投ごめん。標準入力のファイルディスクリプタは0だった んで、すこし変えてこんなふうにして実行してみたんだけど for i in $(seq 10); do sleep 5; echo "$i"; done | { echo $BASHPID; while read a; do echo "> $a"; sleep 5; done; } 本当に他端末から出力の間に割り込ませられたよ・・・ seq 10 してるから 10 個の数字が出力されると思いきや それ以上の適当な文字を出力させられる。 これセキュリティ的に大丈夫なん?
416 名前:398 mailto:sage [2021/05/22(土) 11:44:28.31 .net] うーん、自分しか読み書きできないから大丈夫・・・なのか? それにしてもコマンドの出力結果の間に出力を割り込ませられるとはwww
417 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 11:52:44.59 .net] echo helloでコンソールに文字が出るのも、キーボードから入力できるのも、ファイルをディスクに書き出すのも、シェルが暗黙のうちにそのデバイスファイル群を繋ぎ合わせてる結果 なんら特別な事じゃないよ
418 名前:398 mailto:sage [2021/05/22(土) 11:57:08.22 .net] proc使えば別プロセスの環境変数も読み込める・・・と思ったら起動時の環境変数か。 ってことは別プロセスから新たに子プロセスを起動すれば まあいろいろできそうだけど、どっちみちprocが必要なんだよな >>409 それはそうだけどproc=カーネルがあるプロセスの情報を 他のプロセスに公開してるからできることだよね? macOSとかはprocがないから、内部的にはデバイスファイル郡を つなぎ合わせていたとしてもそれが他のプロセスからは見れないはず いずれにしろPOSIX標準ではなさそう
419 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 12:12:52.06 .net] そもそもカーネルやシステム中核プロセスが不可視であるべき、ってのは常識なのか? ディレクトリの閲覧権限はxとwで制限できるから、そりゃ隠れてるのも居るかもしれないけどさ Macは使わないので分からんが、windowsだってタスクマネージャ開けばユーザー権限で干渉不可なシステムプロセスがゾロゾロ動いてるの見えるけど
420 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 12:37:32.55 .net] OpenBSDでは5.7からprocfsは削除された https://www.openbsd.org/plus57.html > Deleted procfs (always suffered from race conditions and is now unused). procfsを削除しました(常に競合状態に悩まされ、現在は使用されていません)
421 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 12:40:36.82 .net] UNIXの全てがファイルという考えは面白かったが 本当に全てがファイルであるというは正しい考えなのだろうか?
422 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 12:58:05.17 .net] 読み書き出来るならファイルと見做せるんじゃね 環境変数なんかは読み書きできるけどファイルじゃないね cpuは一応procにcpuinfoあるけど、別にフルアクセスできるわけじゃなし形だけね lsofやpsで情報が得られるが、lsでアクセスできないならファイルとして抽象化されていない、でいいのかな(procfsが無いならlsできない、でいいの?) それならOSのレベルで抽象化しなくても、シェルのレベルでファイルシステムのように見せる事もできる windowsがそうだ) cmdの振る舞いを見るとOSレベルでの一貫性は皆無だけど、pwshからはプロセス、レジストリ、環境変数まで全部ファイルシステムとして読み書きできるわけで
423 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 13:02:29.53 .net] > (procfsが無いならlsできない、でいいの?) 無理やりlsで表示させるんじゃなくて 別の形のコマンドを作るべきじゃなかったのか?ということ
424 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 15:40:34.99 .net] >>412 race conditionって具体的に何だろ、デバイスファイルに読み書き競合、あるいは排他制御でブロッキング頻発か event pollみたいな仕組みはlinux固有だっけ? どう上手くやろうがfdのやりくりをする方式はスケーラブルじゃないと思ってる 多重I/Oでパフォーマンス向上とか言ってOSに過剰なfd要求コール送り続けてるんだから
425 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 17:08:31.51 .net] >>416 たぶん情報を取得したが取得中にリアルタイムで情報が変わってしまい 矛盾した情報になってしまったとかじゃね? もしくは複数のファイルから取得した情報が矛盾してしまうとか 情報を取得してからそれを利用するまでの間に時間があるから 取得した情報が信用できないというのは当然として少なくとも取得した時点では それらの情報は矛盾しないようにスナップショットである必要がある
426 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 22:12:21.51 .net] 例えば歯抜け連番名ファイルを詰めて連番にする場合 for f in renban* ; do mv $f 新ファイル名 done とやると、該当ファイルが0個でもループ内の mv を実行しようとしてエラーになります。 ループ前に該当ファイルの有無のチェックが不要な方法はないでしょうか?
427 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 22:12:33.00 .net] >>416 懐しいw pollがSVRで、BSDがselectってやつかな?w Linuxは両方使えたが、少くとも昔のLinuxカーネルでは実装はほぼ同じだったけどな…
428 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/22(土) 22:35:09.95 .net] >>418 たぶんrenban*がfに入るってるよね モダンなシェルならsetで好きな挙動選べるよ (bashならnullglobとかglobfailとか) ただ、わざわざその一文の為にオプションいじくるよりは普通にチェックした方がいいと思うよ たまにおまじない書き忘れて頭ひねったりするから
429 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 06:00:13.67 .net] こんな感じかなあ? set -- renban* [ $# -eq 1 ] && [ ! -e "$1" ] && set -- for f in "$@"; do mv $f 新ファイル名 done でもまあ、ファイル名一覧を取得してからmvしてる間に ファイルが別プロセスによって消されてリすることがあるから どちらにしろmvがエラーになる可能性はあるんだよね
430 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 10:42:49.61 .net] ls renban* | while read f;do mv $f 新ファイル名; done だとループには入らないけど、ファイルがないときにlsがエラー吐くねw find -maxdepth 1 -name "*.csv" | while read f;mv $f 新ファイル名;done これでどう?w > ファイルが別プロセスによって消されてリすることがあるから ↑もちろんこの問題は避けられないけどね。
431 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 10:45:47.34 .net] どうせワンタイムだろうしあんまり細かいこと気にしてるとハゲるぞー といいつつ もしrenbanが何万にものぼるとして、globしてからmvに取り掛かるまでの時間差が気になるんだったら findに-name 'renban*'を処理させ、アクションの逐次実行を指定する;を渡せば隙は(ほぼ)ないはず -exec {} target$suffix \; +を渡すと速いけどバッチ処理だからglobとおんなじ
432 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 10:55:53.30 .net] >>423 find -maxdepth 1 -name "renban*" -exec mv {} 新ファイル名 \; かw そうだね、それが正解だw (なんでもパイプで渡してしまう悪いくせを晒してしまった…w)
433 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 10:57:03.17 .net] >>422 スルーしてほしいってのが要望のようだけど、対象指定をミスったなら失敗する方が健全だと思います
434 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 11:15:08.17 .net] >>425 まあ、依頼主の要望を可能な限り叶えたまでさ。 あとは好みと状況でどちらでもお好きな方をw ただ、この場合lsでやっつけてるけど、本当はlsの出力はそんなにあてにして いいものではないので、気をつけて。 いろんな意味でfind -execの方が正統だよ。
435 名前:419 mailto:sage [2021/05/23(日) 12:19:18.50 .net] shのglobはソート済みが保証されてたと思うけど、findはどうだったか自信がない… 誰か試せる人補足よろしく
436 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 13:00:38.86 .net] ソートしてから逐次実行してるんなら期待してたアトミック性は無いねー
437 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 13:14:58.68 .net] >>427 findはディスクに忠実にファイルシステム上の順番だね。 そして、globは確かにソートされてるようだ。 ちなみにlsもソートされるし、それはオプションで変えられる、と。 一応、環境書いとくと、Fedora33のbashにて
438 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 13:36:53.66 .net] >>429 ありがとう 探索ツールである性質上もしやと思ったらやっぱりそうか じゃあglob+ソートかlsだね 危なかった
439 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/23(日) 13:40:34.27 .net] globかlsのたypoです
440 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/24(月) 02:05:05.30 .net] 414です 回答ありがとうございます。 ループ前チェックは何だか美しくないように思えたので(個人の感想です) 0個なら即doneに移る方法はないものかとお尋ねした次第です。 0個でも一度はループに入るという仕様が続いているのはきっと何か意味があるのでしょうね。
441 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/24(月) 08:05:21.35 .net] ループじゃなくて*の展開の仕様だよ 合理的に考えれば、展開を指示してマッチ無しならば0件にヒットしたとして何も返さないか空文字 展開が失敗したと考えてエラーのどちらかだろう 多分深い意味はないから気にすんな
442 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/24(月) 08:08:28.58 .net] いや気にしなきゃだめか ココがヘンだよbshくらいの気持ちで構えてれば、案外可愛く思えてくるぞ
443 名前:名無しさん@お腹いっぱい。 [2021/05/24(月) 09:50:48.81 .net] >>423 > どうせワンタイムだろうしあんまり細かいこと気にしてるとハゲるぞー うっせーハゲ!
444 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/24(月) 10:20:26.93 .net] lsとglobがソートされるってどこに書いてあったっけ? 前に見た気がするけど英語の中から探すのめんどいw
445 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/24(月) 10:48:30.44 .net] globで見つからなかった時、検索した文字列を返すのは おそらく安全側に倒したからだと思ってるんだがいい例が思いつかないな 例えばcmd renban* hoge.tar.gzだったら普通は引数が2個以上になると思うが 見つからない時cmd hoge.tar.gzとなって危険とか もしくはエラーメッセージをわかりやすく出すのが目的だったりするのかな? 空ディレクトリでls renban*を実行した時 「renban*」という文字列を返せば、エラーメッセージは分かりやすい > ls: 'renban*' にアクセスできません: そのようなファイルやディレクトリはありません 空文字を返せば、エラーメッセージは分かりにくい > ls: '' にアクセスできません: そのようなファイルやディレクトリはありません 何も返さなければ、何も表示せず正常終了 ・・・あ、これかw 空ディレクトリでない(file1 file2 file3というファイルが有る)場合renban*が 何も返さないとlsが実行されるからfile1 file2 file3と表示されるんだ renbanなんたらを処理しようとしてるのに、関係ないファイルを処理してしまう。
446 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/05/24(月) 20:33:55.32 .net] 一つでもあればループ内を実行して、(それ以上)無ければ抜ける。 だから、(最初から)無ければそのまま抜けて欲しいな、と。 該当するものが無いのだからループ内を実行するのは無意味だし。
447 名前:名無しさん@お腹いっぱい。 [2021/06/06(日) 22:14:34.25 .net] 標準出力の速度を制限したり、通信速度を表示するコマンドを探しています。どなたか知りませんか?
448 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/06/07(月) 00:11:53.58 .net] >>439 pvコマンド(Pipe Viewer)でどうよ
449 名前:名無しさん@お腹いっぱい。 [2021/06/07(月) 11:25:09.09 .net] >>440 ありがとうございました!
450 名前:名無しさん@お腹いっぱい。 [2021/06/15(火) 00:01:20.06 .net] sed の 's/foo/bar/' スラッシュ直前の【s】って何の意味でしょうか? g:global i:ignore のような意味ありますか? またman以外でこのような略語を調べるサイトなどありますでしょうか?
451 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/06/15(火) 00:58:11.44 .net] >>442 substituteのs info sedより > 3.3 The s Command > The s command (as in substitute) is (略)
452 名前:名無しさん@お腹いっぱい。 [2021/06/15(火) 01:15:20.43 .net] >>443 ありがとうございます
453 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/06/15(火) 11:14:03.04 .net] edコマンドで気になってるのはv versed subst? でもversedって多分古語だしなあ… exec grep -v "$@"にvrepと名付けることにした
454 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/06/15(火) 15:03:29.77 .net] >>445 grep の -v は --invert-match だから inVert substitute じゃねーの?
455 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/07/28(水) 19:08:57.09 .net] _数字列_数字列_数字列_を含む文字列から先頭の数字列だけを取り出したいので 前段階としてそれより前の部分を切り出すために echo ${文字列%_*[0-9]_*[0-9]_*[0-9]_*} としてみたのですが、 aaa_bbb_ccc_ddd_eee_123_4_567_xxxxx_123yyy_4f6_789c_zzz の場合には aaa_bbb_ccc_ddd_eee ではなく aaa_bbb_ccc_ddd_eee_123 になってしまいます。 どうすればいいでしょうか?
456 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/07/28(水) 19:47:08.66 .net] どう言った用途に使うんでしょうかね
457 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/07/28(水) 21:32:13.47 .net] >>447 シェルの変数置換じゃなくて、sedで置換したほうがええやろ。 まっとうな正規表現が使えるしな。
458 名前:名無しさん@お腹いっぱい。 [2021/07/30(金) 07:50:18.18 .net] >>447 そうなるように書いていますけど?
459 名前:名無しさん@お腹いっぱい。 [2021/07/30(金) 07:51:44.84 .net] 彼はsubstringの概念がないんでしょうかね。
460 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/07/30(金) 08:39:43.50 .net] 任意個数の数字だけの塊をglobは表現できないので、お題の変換は無理
461 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/08(日) 22:00:16.40 .net] 書き込めるかテスト
462 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/08(日) 22:07:53.75 .net] >>447 こんな感じでいけるんでね?前段階の話すっ飛ばして答えだけど テストしてないので動かなくても知らん isnum() { case "$1" in *[!0-9]*) return 1 ;; *) return 0 ;; esac } str="aaa_bbb_ccc_ddd_eee_123_4_567_xxxxx_123yyy_4f6_789c_zzz" IFS="_" set -- $str while [ "$#" -gt 0 ]; do if isnum "$1" && isnum "$2" && isnum "$3"; then echo "$1" fi shift done
463 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/08(日) 22:24:57.80 .net] >>449 のいうように、sedで一行それも大したことない正規表現で済むな シェルスクリプトだけという課題の制限でもなければ
464 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/09(月) 01:15:27.49 .net] シェルスクリプトで無理といった途端 シェルスクリプトの実装が出てきたんで 慌てて取り繕ったか?w
465 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/09(月) 01:42:06.59 .net] ねじ曲がりすぎ そんな発想になるのは、お前>>454 ぽいな
466 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/09(月) 13:03:23.04 .net] 俺は面白いと思うぞ、やりたくないけどな bashやzshならパターンの否定が使えるextglobオプション+%パラメータ展開を使うのが多分一番楽かと
467 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/18(水) 19:41:40.78 .net] 藤林丈司
468 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/31(火) 05:29:27.62 .net] 引数を表示するのに echo $1 だけのスクリプトファイルを作って実行するのですが なぜか引数が1&2等の場合にうまくいきません
469 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/31(火) 05:46:42.81 .net] そうなんですね
470 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/31(火) 11:29:04.37 .net] 標準出力とエラー出力を引数にしたいってことループしないそれ
471 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/31(火) 11:54:53.66 .net] >>460 クォートしろ。 echo "$1"
472 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/08/31(火) 12:07:22.10 .net] 単に sh scriptfile.sh 1&2 ってやってしまってるだけじゃないの 呼び出す側の問題 echoで展開後に&が問題になることはないのでクォートしなくても問題にはならない。クォートした方がいいけど
473 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/01(水) 00:03:03.07 .net] >>464 クォートしろ。 sh scriptfile.sh "1&2"
474 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/01(水) 02:30:08.96 .net] そんなわかりきったことを マウントとりたがりすぎ
475 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/01(水) 03:42:36.41 .net] >>466 マウントマウントうざ。 >>460 には「わかりきったこと」ではないのに。
476 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/01(水) 11:21:33.57 .net] 間違った指摘してたくせにw 何で常時偉そうにしなきゃならんのだかだが、自覚ないアホか
477 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/02(木) 16:02:37.40 .net] コマンド展開で質問。 echo $(...) | sed ... みたいなスクリプトで、$(...)内のコマンドが失敗したとき、そこでエラー終了してほしいんだけど、ムリ? set -eしても、これには効果がないもよう。
478 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/02(木) 17:36:39.83 .net] コマンド置換ではムリだねえ
479 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/02(木) 17:47:03.78 .net] >コマンド置換ではムリだねえ コマンドの引数にあるのはね コマンド置換でも変数に入れるだけなら終了ステータス返る/見れる=-eなら止まる。そっちはやってるとかあるだろうけど、いちおう
480 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 12:16:10.43 .net] え?馬鹿なの? var=$(...) echo "$var" | sed ... ってするだけじゃん
481 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 12:25:07.03 .net] すでにそう書かれてるだろうに
482 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 12:30:46.29 .net] 流れとか関係なくどこまで知っているのか想定もせず、 偉ぶれると思ったら食いつくいつもの馬鹿だろな
483 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 12:47:59.60 .net] 口は悪いけどみんなと仲良くしたいだけなんです大目に見てあげてください
484 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 12:51:54.14 .net] >>474 おまえこそ、いつものマウンターマウンターだな。w
485 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 13:51:00.00 .net] >>475 そうでもないそうではないようだけどw
486 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/03(金) 15:15:28.44 .net] >>470 ,471 どーも。 やっぱそうか。。。 -o substfailとかあってもいいのに。 >>471 > そっちはやってる うん、書かなかったけど、やってはみてた。 でもやめた。 なんかひっかかるし、いずれ誤って直しそうだし。 declare/set/exportで書いたら失敗が無視されることも気になる。
487 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/04(土) 07:46:40.91 .net] だからさ、もう結論出てるんだよ var=$(...) echo "$var" | sed ... こう書けば終わり
488 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/05(日) 01:55:02.26 .net] きも
489 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/08(水) 16:22:00.10 .net] sedのホールドスペースは、その内容を削除するにはどうすれば? とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
490 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/08(水) 16:43:31.22 .net] sed https://mevius.5ch.net/test/read.cgi/unix/1085730992/
491 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/08(水) 17:50:14.30 .net] おう
492 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/27(月) 09:26:46.66 .net] 怪しげなシェル芸が宣伝中 【広告記事】今、ユニケージ開発手法にギークが熱
493 名前:カするワケ【USP研究所代表&オープンソースOSコミッター対談】 ttps://type.jp/et/feature/14070/ [] [ここ壊れてます]
494 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 02:25:59.11 .net] 空白行でいくつかのブロックに分割されたテキストにて、 文字列にマッチするブロックを出力する方法を探してます たとえば 111 222 222 aaa 222 333 333 333 のようなテキスト中から、aaaを検索した際に、その前後の空白行に囲まれたブロックである 222 222 aaa 222 という結果を得たいです いまは最初にブロックごとに一時ファイルを作り、それぞれに対してgrepにて検索し マッチしたファイルを出力、としているのですがブロックが20万ほどあり、 分割も検索も遅くて困ってます 該当するブロックは3〜5個程度なので、むしろgrepでマッチする行番号を調べる →テキストをless等でひらき該当行へジャンプ →そのブロックをコピペ の方が早いくらいでして
495 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 02:48:59.29 .net] Linux板くだ質スレでいい加減嫌われたから流れてきたって感じかな > ブロックが20万ほどあり この時点でデータ構造の方を考え直すべき
496 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 06:26:04.06 .net] \n\n(\n...)ではない \nをスペース(やタブなど)に | grep '\<aaa\>' | スペース(やタブなどにしたの)を\nに
497 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 09:59:44.46 .net] テキトーに色々 $ for i in {1..2000000}; do echo aaaa; echo bbbb; echo cccc; echo $i; echo dddd; echo eeee; echo ffff; echo gggg; echo; done > aaa $ time (awk 'function keepp () { if (matched) { for (i=0 ; i < nkeeps ; i++) print keeps[i]; print } matched=0; nkeeps=0 } NF == 0 { keepp(); next } { keeps[nkeeps++]=$0; if ($1 == "1414213") matched=1 } END{ keepp() }' < aaa ) real 0m10.556s user 0m10.281s sys 0m0.271s $ time (awk 'NF == 0 { print; next } { printf "%s ", $0 }' < aaa | grep '\<1414213\>' | tr ' ' '\n') real 0m11.101s user 0m1.177s sys 0m12.259s $ time (tr '\n' ' ' < aaa | sed -e 's/ /\ /g' | grep '\<1414213\>' | tr ' ' '\n') real 0m2.344s user 0m1.452s sys 0m0.814s $ time (tr '\n' ' ' < aaa | sed -e 's/ */\ /g' | grep '\<1414213\>' | tr ' ' '\n') real 0m3.678s user 0m1.484s sys 0m1.078s
498 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 10:06:32.55 .net] $ time sh smf1.sh real 0m4.088s user 0m2.324s sys 0m3.803s $ cat smf1.sh #!/bin/sh SMF=/tmp/xxx [ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS' #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { const size_t BUFFER_SIZE = 1024 * 1024 + 1; char *buffer = (char *)malloc(BUFFER_SIZE); while (fgets(buffer, BUFFER_SIZE, stdin) != NULL) { char *ep = buffer + strlen(buffer) - 1; if (ep >= buffer && *ep == '\n') *ep = '\0'; if (buffer[0] == '\0') putc('\n', stdout); else printf("%s ", buffer); } return 0; } EOS [ $? -ne 0 ] && exit 1; } $SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'
499 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 10:07:40.48 .net] $ time sh smf2.sh real 0m0.717s user 0m0.381s sys 0m0.436s #!/bin/sh SMF=/tmp/xxx [ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS' #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { const size_t BUFFER_SIZE = 1024 * 1024; char *srcbuff = (char *)malloc(BUFFER_SIZE); char *dstbuff = (char *)malloc(BUFFER_SIZE+1); char *const de = dstbuff + BUFFER_SIZE - 1; int numLFs = 0; size_t len; while ((len = fread(srcbuff, 1, BUFFER_SIZE, stdin)) > 0) { char *sp = srcbuff; char *const sep = sp + len - 1; char *dp = dstbuff; char c; while (sp <= sep) { if ((c = *(sp++)) == '\n') numLFs++; else{ if (numLFs > 1) *(dp++) = '\n'; else if (numLFs == 1)
500 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/03(水) 10:07:44.97 .net] *(dp++) = ' '; numLFs = 0; *(dp++) = c; } } fwrite(dstbuff, 1, (size_t)(dp - dstbuff), stdout); } return 0; } EOS [ $? -ne 0 ] && exit 1; } $SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'
501 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/04(木) 20:48:41.95 .net] 481です いろいろな方法について情報ありがとうございます 参考にさせていただき、取り入れていこうと思います
502 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 02:41:59.96 .net] 特定の文字列で始まるファイルが存在するかの判断はどうすればいいでしょうか ぐぐって見つけた ls を使う方法 if ls $f* > /dev/null 2>&1 then echo $f で始まるファイルがあります fi だと該当ファイルが存在しない場合に ...にアクセスできません: そのようなファイルやディレクトリはありません というエラーメッセージが表示されます。 また、 for g in $f* ; do echo $f で始まるファイル $g があります done だと該当ファイルがない場合でもループの中に入ってしまいます。
503 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 03:28:14.33 .net] find使うのはスクリプトじゃないから関係ないか
504 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 10:37:01.91 .net] >>493 zshでじゃないの そういう余計なオプション(nomatch)がデフォでオンになってるのでオフにする setopt nonomatch
505 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 10:51:08.20 .net] >>493 あと、forの場合は、シェルが対象がなくてglob展開できない場合はglobそのままの値となる。forの場合に限らずglobはそういうもの for g in $f* の場合は、g が $f* になるので、展開されずにそのままなのかチェックするのは必要 for g in $f*; do [ "$g" = "$f*" ] && { echo 展開できませんでした; break; } な感じで
506 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 11:01:48.57 .net] >forの場合に限らずglobはそういうもの なので、 if [ "$(echo $f*)" != "$f*" ] then echo $f で始まるファイルがあります fi とかとも書ける zshでnomatchだと余計なメッセージが出るし、>>493 のls使ってる方が見た目なにしたいのかわかりやすいと思うけど、いちおう
507 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 11:07:42.62 .net] >>496 ああ、念のためには元globとの比較ではなくて -e する方がいいな [ "$g" = "$f*" ] でなくて [ -e "$g" ]
508 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 12:04:30.54 .net] zshネタ、シェルスクリプトではなくて zsh script になってしまうが null_glob ってのもあるんだな setopt null_glob ってすると、エラーメッセージは出ないわ、globに当てはまらない場合globを入れない/消すわで、>>493 のどっちも動くようになるな そんな応えは求めてないだろうけどw
509 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 12:07:54.26 .net] ああ、bashにもnullglobって同じようなのがあるのか シェルスクリプトという汎用ではなく各シェル固有独特の機能なので使わないだろけど
510 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 12:11:32.22 .net] そして、bashにも failglob ってあるのか。オンになってたら>>493 はbashでも似たような動きになるか bashはデフォではオンではないので、zshだろと思うけど
511 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/19(金) 23:23:19.51 .net] 489です ありがとうございます。 とても参考になりました。
512 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 19:09:01.55 .net] コマンドの出力を(だけ)ではなく、シェルそのものの出力(=コマンドの出力もになる)を消すなら if (exec 1>/dev/null;exec 2>&1;ls $f*); then echo $f で始まるファイルがあります fi て現在のシェル環境を変更(元に戻すのが面倒なのでサブシェルでそこの環境を変更)で消すというのもできたな
513 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 19:15:56.45 .net] >if (exec 1>/dev/null;exec 2>&1;ls $f*); then execのディスクリプタ操作は羅列ができるようなのね if (exec 1>/dev/null 2>&1;ls $f*); then の方が良さげか
514 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 22:35:21.95 .net] >>493 check() { set -- "$1"* [ -e "$1" ] } 最短だとこうかな? set -- "$1"* でシェルのglob展開を用いて位置パラメーターにセットする ファイルが見つかった場合、そのファイル名が$1に入る ファイルが見つからなかった場合、"$1"*という文字列が入る まずありえないとは思うけど"$1*"という名前にアスタリスクが含まれた ファイルがある可能性を考えると>>496 よりも-eでチェックした方が良い と>>498 で書いてあったかw >>497 > >>493 のls使ってる方が見た目なにしたいのかわかりやすいと思うけど ls $f* は意味がない。シェルのglob展開されてからlsを実行してる。 つまりls file1 file2 file3 のようなものを実行してるだけ。 呼び出す前にすでにファイル一覧を取得してる 単に呼び出しコストが高い[ -e ] になってる
515 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:15:10.23 .net] 見た目っ言ってるだろ そんなコスト気にする必要もないから、見た目とそっちの方を重視してだよ
516 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:18:58.18 .net] 他人の提案を直接ダメ出しして自分の知識自慢をしたがり、 マウント取るのが目的なやつは他のシェルスクリプトスレでも居るけど、 同じやつかな
517 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:19:33.52 .net] lsの見た目の何がいいの? ファイルリストを取得しても何やってるのか意味わからんでしょ
518 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:20:38.15 .net] >>507 > 同じやつかな 違うけど、お前が知識不足でマウント取られたやつだってのはよくわかったよw
519 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:21:00.73 .net] lsはファイルがあるか確認するのに普通に使ってるだろ、手打ちで
520 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:22:25.30 .net] >>509 見た目って言ってる裏を読めないで決めつけられてもな 同じやつとしか思えないその短絡的なレス
521 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:31:25.93 .net] でたw 自分が説明できてないだけなのに 裏が読めてないと相手のせいにする 詐欺師の手段と同じ
522 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:34:45.43 .net] 自分にある意味ダメ出しされたらイキリマ来るくせに。変なやつ 説明できないとか似たようなフレーズはあいつもすぐにしてたなあ 巣に帰れよw
523 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:40:47.87 .net] 「裏を読めない」と言った時点で 自分で書いてないって言ってるのってわかってないのかな? 思い込み激しすぎるんだよな 例のPOSIX原理主義者みたいだw
524 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/21(日) 23:46:30.79 .net] 読めませんでしたと素直に言えよ わざわざ見た目って言ってるのはなんなのかは、細かいこと言うなら、 また、そこまで食い下がるならそれぐらい裏読めよ せめて、読めませんでしたと素直になれよ。他人にダメ出しばっかしてないで 自分にダメ出しされたらイキリまくるくせに、他人にダメ出しはするって、 マジでマウント取るのが目的でしかないだろう マウント取るためだから素直には人の言うことは読めないから、 イキリまくることになるんだろうなと そのしつこさはやはりなっていう マウント取るためだからしつこく食い下がるんだろうなあ...
525 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:00:02.71 .net] 書いてないものは読めません アホすぎる
526 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:00:26.12 .net] POSIX原理主義者って本当みたいだなw
527 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:02:28.08 .net] 書いてないものは読めません って短絡的に言えちゃうのは確かにアホだな、それが攻撃的な人格のヤツがなら
528 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:08:40.31 .net] >>517 自らアホ晒してるだけだぞ なんでPOSIX原理主義者に結びつけるのか意味わからん もちろんあんな自ら手足縛るのは嫌いだ/必要ないし、イキってる姿勢はもっと嫌いだし ホント短絡的だな。トンチンカンな決めつけばかりって何したいんだか
529 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:09:15.81 .net] 説明不足を他人のせいにするのが流行ってるの?
530 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:10:39.73 .net] 相手によるだろう
531 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:16:59.61 .net] >>519 > なんでPOSIX原理主義者に結びつけるのか意味わからん そりゃPOSIX原理主義者に知識不足でマウント取られた恨みがあるから、というぐらいは読めるよねえ
532 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:18:57.19 .net] また思い込みで語ってるw
533 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:23:14.57 .net] >>522 イミフすぎな文で、読めないぞ 誰がPOSIX原理主義者なの? 裏読めないやつがPOSIX原理主義者ってことになる文だと思うけど、その文は POSIX原理主義者って出てきたのは、>>514 だぞ >>514 がPOSIX原理主義者?>>514 のレスの相手であろう俺がPOSIX原理主義者??
534 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 00:29:52.48 .net] 俺がPOSIX原理主義者だとしたいなら、 POSIX原理主義者のくせに知識不足でマウント取られた恨みがあるから かな だとしてもPOSIX原理主義者に結びつける説明にはなってないなあ カオスだな。ここまでにしとこか
535 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 02:10:39.67 .net] >>524 × POSIX原理主義者 ○ 例のPOSIX原理主義者 シェルスクリプトスレでは、意味が全然変わる。w
536 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 02:11:59.82 .net] >>524 510には「POSIX原理主義者」に知識不足でマウント取られた過去があって 恨みがあるから「POSIX原理主義者」という言葉を持ち出した ってことでしょ 510がマウントとられてぐぬぬとなった時に、510には相手がPOSIX原理主義者のように思えたらしいというだけで 本当にPOSIX原理主義者かどうかさえ不明だし、誰がPOSIX原理主義者かなんてどうでもいい
537 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 02:13:47.43 .net] >>526 言語新作は病気だよ
538 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/11/22(月) 03:28:05.45 .net] >>527 無理があるだろう
539 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/11(土) 11:26:25.87 .net] fishについて質問です fish_vi_key_bindingsを入力するとviモードに入りプロンプトの左にモードステイタスが表示されますが、 $XDG_CONFIG_HOME/fish/config.fish にfish_vi_key_bindingsを記入した場合はログイン後すぐにviモードか使えますがモードステイタスが表示されません どうやったら表示出来ますか?
540 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/11(土) 13:46:58.57 .net] fish_prompt
541 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/11(土) 13:48:39.11 .net] fish_mode_prompt
542 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/11(土) 13:49:12.15 .net] を、$XDG_CONFIG_HOME/fish/config.fish に書いてるんじゃないの
543 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/11(土) 15:39:24.15 .net] >>533 どうもありがとうございます それらは書かれていませんが、こう書かれてありましたのでコメントアウトしてみたらモードが表示されるようになりました function hybrid_bindings --description "Vi-style bindings that inherit emacs-style bindings in all modes" for mode in insert default visual fish_default_key_bindings -M $mode end fish_vi_key_bindings --no-erase end set -g fish_key_bindings hybrid_bindings
544 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/11(土) 15:48:57.02 .net] インサートモードの時にjjを押したらノーマルモードに戻りたくてfish_user_key_bindingsに以下のように書いたらまたモードが消えました function fish_user_key_bindings fish_vi_key_bindings bind -M insert -m default jj backward-char force-repaint end
545 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/26(土) 23:09:30.57 .net] 端末では正常な $declare -i w0=180 w1=30 w2=20 w3=50 ; w3=w3+(w0-w1)/10-1 ; echo $w3 ですが、shファイルで使うとなぜかエラーになります。(w? の数値は違います) 予期しないトークン `(' 周辺に構文エラーがあります w3=w3+(w0-w1)/10-1 ですが、分割すると通ります。 w2=(w0-w1)/10 ; w3=w3+w2-1 理由をご存知でしたら教えて下さい。 GNU bash, バージョン 5.0.17(1)
546 名前:名無しさん@お腹いっぱい。 [2022/02/27(日) 07:10:41.81 .net] >>536 理由はよく分からないけど extglob が on ならエラーにならないね
547 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/27(日) 09:42:18.76 .net] >>536 シバンでググれ
548 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/27(日) 19:45:20.55 .net] なんかbashの仕様のグダグダなところを踏んだって感じだな。 エスケープされていない生の ( は基本的にwordの途中に出てこないので、 w3+( ときたところでsyntax errorになる。 ところが、shopt -s extglob しておくと、 +(hoge|fuga) みたいなパターンマッチを許すため、 w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。 *( も可。しかし、/( と -( は不可。 おとなしく $(( )) を使っておくのが吉。
549 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/02/28(月) 06:45:21.62 .net] 自分が理解できないからって bashのせいにするのは恥ずかしい行為
550 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/08(火) 18:54:54.29 .net] grepとかで使える正規表現の「\s」は、manページのどこに書いてますか? 「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。
551 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/10(木) 22:56:33.04 .net] declare -i n; n="3/2" は通るのに、n="1.5" が通らないのはなぜだろ
552 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/10(木) 23:31:05.02 .net] エラーで出ている通り、 リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない 数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない てとこかな
553 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/10(木) 23:46:00.98 .net] リテラル じゃなく、右辺中 か >>541 manには無さげかな。manには無いがPOSIXのドキュメントには詳しくある
554 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 00:08:44.90 .net] >>544 ,541 いや、POSIXのドキュメントには無いな 個々の実装での
555 名前:Cまぐれ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のでもなく他の資料を当たるしかないかな [] [ここ壊れてます]
556 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 00:14:53.27 .net] ああ、決まり事を規定する団体が規定してるドキュメントでは ユニコードコンソーシアム のがある https://unicode.org/reports/tr18/ これを実装していればだが
557 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 12:03:17.08 .net] >>544-546 やっぱり記載漏れかな? 理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。 個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。
558 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 12:17:43.20 .net] >>547 他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ
559 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/03/11(金) 16:00:00.94 .net] >>548 たしかにinfo grepには「\s」が書いてあるな。 でもinfo bashには書かれてなくて、man 3 regexに回されてるような。 結局はinfoでも解決しなさそうな気がするんだけど、違う? info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは? まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。
560 名前:あぼーん mailto:あぼーん [NG NG.net] あぼーん
561 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/12(木) 22:19:26.11 .net] シェルスクリプトの [ -a (AND) と -o (OR) ] は非推奨だかんね https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521 には -a や -o ではなく && と || を使うように書かれています。 否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?
562 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/13(金) 01:22:03.48 .net] >>551 知らなかった。 勉強になった
563 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/13(金) 16:01:08.55 .net] >>551 いいんじゃね? ただ [ "$a" != "$b" ] や [ ! "$a" = "$b" ] ってしないとだめだけど あと ! [ "$a" = "$b" ] でもよさそう
564 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/14(土) 23:52:35.51 .net] 昔のFreeBSDでは [ -n abc -lt 5 ] みたいのが通った記憶 [ gnu 8.30で今試すとextra argument '[' と怒られる 手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな
565 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 03:02:55.37 .net] シェルスクリプトって息が長いから そういう使うべきじゃないものも残っていて困るね さすがに古すぎる機能は互換性切り捨てた方が良くない?
566 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 12:09:01.91 .net] whileの、条件が偽でも一度はループって仕様が不思議
567 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 15:51:51.12 .net] そんな仕様なんて無いし シェルスクリプトに文句言ってるやつの8割は 自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる
568 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/15(日) 17:54:30.30 .net] do while をシェルスクリプトでどう実現するかって話もWeb上であるけど、 それなんの話ってことになるわな
569 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/23(月) 13:54:54.31 .net] ぐぐっても見つけられないんだけど functionの中のlocal変数に整数属性付与って出来ないのかな?
570 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/23(月) 23:44:52.02 .net] bashの話だとして普通に整数属性付いてるぞ? bash -c 'v=1+2; foo() { local v; declare -i v; v=3+4; echo $v; }; foo; echo $v' 7 1+2 というかdeclareで-gをつけない限り デフォルトでlocalになるだろ?
571 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/24(火) 01:33:27.87 .net] ぐぐるな! 黙って man sh
572 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/24(火) 17:18:15.58 .net] >>560 ありがとうございます。 declare はスクリプトファイルの先頭でしか使ったことがなかったのでループ内(や関数)でも使えるとは知りませんでした。 なるほど、それならデフォルトlocalですね。 >>561 使い方の例を見て学ぶタイプなので^^
573 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/25(水) 00:13:58.24 .net] 3つの引数を必要とする関数があります。 x=$1 y=$2 ANS=$3の絶対値 $3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。 x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。 質問:整数配列の宣言はできますか?
574 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/25(水) 01:04:48.10 .net] >>562 内部的にはlocalとかreadonlyとか変数に属性つけるやつは 内部的にはdeclareかtypesetの別名
575 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/25(水) 01:06:31.16 .net] >>563 昨日、近所の吉野家行ったんです。吉野家。 そしたらなんか人がめちゃくちゃいっぱいで座れないんです。 で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。 もうね、アホかと。馬鹿かと。 お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。 150円だよ、150円。 なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。 よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。 お前らな、150円やるからその席空けろと。 吉野家ってのはな、もっと殺伐としてるべきなんだよ。 Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、 刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。 で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。 そこでまたぶち切れですよ。 あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。 得意げな顔して何が、つゆだくで、だ。 お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。 お前、つゆだくって言いたいだけちゃうんかと。 吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、 ねぎだく、これだね。 大盛りねぎだくギョク。これが通の頼み方。 ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。 で、それに大盛りギョク(玉子)。これ最強。 しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。 素人にはお薦め出来ない。 まあお前らド素人は、牛鮭定食でも食ってなさいってこった。 答え:できまsん
576 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/05/31(火) 05:07:04.68 .net] ありがとうございます。 色々やってみたら、配列として宣言しなくても使えるようです。 declare -i i a[0] a[1] ; a[0]=3 ; a[1]=6 ; i=1 ; a[$i]=${a[$i]}+1 ; echo a=${a[$i]} a=7
577 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 09:46:48.93 .net] ちょっとスレチかもですが、 for filename in * とかでカレントディレクトリにあるファイル名を得る場合、どんな順番なのでしょうか? ディレクトリエントリ順とか、ファイル名順とか。
578 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 11:17:31.68 .net] ある程度ファイルがあるところで echo * すればわかる
579 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 12:25:43.85 .net] >>567 お使いのシェルのマニュアル見ろってさ https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1020788530
580 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 17:53:21.88 .net] >>567 GLOB POSIXに規定されてる The glob() function shall store the number of matched pathnames into pglob->gl_pathc and a pointer to a list of pointers to pathnames into pglob->gl_pathv. The pathnames shall be in sort order as defined by the current setting of the LC_COLLATE category 名前順
581 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 17:56:03.40 .net] >>570 ,567 SORTしないというオプションもあるが、その場合には順番の決まりなんてないということになるね
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 19:31:44.03 .net] 質問者の使ってるシェルはposix準拠なのか
583 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/07/31(日) 19:47:57.19 .net] >>572 > □お約束 > ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/02(火) 17:31:23 .net] POSIX準拠が当たり前、 POSIXにはない/POSIXで足らない勝手に拡張部分で独自が当たり前 って当たり前がわからないんだろな 拡張するにしてもPOSIXをベース+αって馬鹿でもわかりそうなもんだが 機能的に必要最低限のPOSIXを無視する利益なんてないだろに
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/02(火) 19:09:16.74 .net] POSIXを無視する利益は互換性でしょ? 今までの動きを変えたらだめ
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/02(火) 20:31:00.79 .net] >POSIXを無視する利益は互換性 www >今までの動きを変えたらだめ 前段からそれになるとか無茶苦茶 POSIXの経緯、POSIXは何をベースに作られたか勉強してきてから寝言言うんだよ
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 09:45:22.85 .net] 皆様ありがとうございました。シェルはbashです。 名前順的に最後のファイル名を得るには for filename in * ; do : done とするしかないようですね。 でもKDEのDolphineの自然なソート(ゼロパディング分の0を無視)のようなオプションは欲しいかも
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 14:26:27.63 .net] >>577 > 名前順的に最後のファイル名を得るには 普通に ls -r | head -1 でよくね?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 20:32:58.41 .net] >>576 何をベースにってBSDベースでしょ? SolarisとかはSystemVベースだからtrコマンドの挙動が違う 互換性を重視してPOSIXを無視してる
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/03(水) 20:34:34.24 .net] https://qiita.com/richmikan@github/items/bd4b21cf1fe503ab2e5c#tr%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89 > POSIXに準拠してないSystem V実装が悪いと言ってしまえばそれまでなのだが、 > 歴史の上ではPOSIXよりも早いのでそれをいうのもまた理不尽というもの。ではどうすればいいか。
591 名前:名無しさん@お腹いっぱい。 [2022/08/04(木) 09:47:52.75 .net] >>576 おら。ちゃんとPOSIXの経緯調べてきたか? 黙ってないでなんとかいえや
592 名前:名無しさん@お腹いっぱい。 [2022/08/05(金) 10:23:52.72 .net] >>577 sh ではできるだけパイプで処理することを考えるんだ もちろん for, while などが必要な局面はあるが パイプで済むなら速くて簡潔でフィルターとして組み合わせられる
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/05(金) 10:46:42.12 .net] >>582 ファイル名に改行が入る場合はどうすればいいのでしょうか?
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/08(月) 18:30:05.02 .net] 自分ならまずそういうアホなファイル名を変更するが 権限がなければまあ find -print0 | xargs -0 くらいだな
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/08(月) 21:06:49.38 .net] >>584 POSIX準拠じゃないので FreeBSDで動きませんw
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/14(日) 20:39:40.32 .net] POSIX準拠じゃなくてもFreeBSDで動くけどな POSIXにないのでも、ツール間で合わせ合う、どっちかがどっちかに似せるというのは普通にあるしな
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/14(日) 21:19:42.49 .net] POSIXにないオプションは使用禁止だ そんなものを使うと持続性がなくなる なんらかの理由で別のOSに変更になった時 システムは動かなくなってデータはただのゴミになる 何度言えば理解できるのか
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 12:57:39.48 .net] はいはい、原理主義ごくろうさん 使ってる本人次第でしかないのに押し付けとかホント原理主義者は
599 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 13:03:07.61 .net] 原理主義者は自惚れてるけど無知さがだだ漏れる 無知さを隠す誤魔化すためのマウント取りでしかない
600 名前:名無しさん@お腹いっぱい。 [2022/08/15(月) 13:26:13.07 .net] リッチー大佐はC言語も使える ただし分割コンパイルやmakeといった高度な機能は使わない そんなものはなくてもシェルスクリプトでmake.shを作れば良いからだ
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 13:28:32.48 .net] >>585 pkg install findutils
602 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 14:25:12.28 .net] それ入れなくてもFreeBSDのfindで可能だけどな がっつりGNU依存のにしても、それ入れる+ちょっとパス修正だけだわな
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 16:04:55.82 .net] BSDのfindなら find 場所 -print0 | xargs -0
604 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/15(月) 20:36:03.11 .net] 持続性なら、もはやPOSIXよりも、Linuxのほうがいいのでは。
605 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/16(火) 12:18:54.66 .net] posixってソフトウェア規格でしょ?
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/08/16(火) 12:28:09.90 .net] ソフトウェア規格って? 公式ページでも見れば?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/19(月) 12:12:56.52 .net] bashの関数で文字列を返したい場合、その関数名を文字列名称に使うことは仕様的に可能ですか? function kotae () { kotae=$1$2 } kotae ab cd echo $kotae
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/23(金) 09:54:01.90 .net] >>597 関数と変数の名前空間は別なので別に構わない、そして宣言(declare)してなければ変数concはグローバル ややこしいのでそういう使い方のおすすめはしない
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/23(金) 09:55:09.11 .net] concはkotaeの間違い 頭の中で勝手に命名しちゃった
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/09/24(土) 14:46:59.72 .net] >>597 そのようなことをしたい場合はこうする function kotae () { printf -v $1 "%s" $2$3 } kotae ret ab cd echo $ret
611 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/10/28(金) 02:25:37.28 .net] bash 5.2.2(1)で最初の!だけ全角の echo "abc!? xyz!" は通るのに、半角にすると echo "abcecho "abc!? xyz!" > になってしまいます。 一対の"で通すにはどうすればいいのでしょうか? >>598-600 ありがとうございます。 printfのvオプションは初めて知りました。
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/10/28(金) 13:13:38.41 .net] ヒストリ機能 知らない/活用してないならオフにしておくべき 対話モードでしか機能しないから切っても特に問題はない
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/10/29(土) 10:43:22.22 .net] バックスラッシュをつけてエスケープ。
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/06(日) 16:47:34.57 .net] 恥を忍んで質問させて下さい: Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、 Autoconf/Autotoolsが普及した理由って何でしょう? 1)Perlよりm4の方が普及してた(どっちも文法はアレだけど) 2)というかPerl嫌いな人が少なくなかった 3)そのほか(開発モデルとか) ...imakeって何だっけ?
615 名前:名無しさん@お腹いっぱい。 [2022/11/06(日) 18:24:19.31 .net] Autoconf/AutotoolsはGNUだからじゃね?しらんけど
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/07(月) 01:26:02.31 .net] rsync -avR -e ssh ... rsync -avR -e ssh ... このように6行以上書くとエラーになるんですがどうしてでしょう? ssh: connect to host xxxx: Connection refused rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(228) [sender=3.2.3]
617 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/07(月) 06:20:59.25 .net] 6行以上書いたからじゃね?
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/07(月) 07:38:39.12 .net] >>606 クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる 少し時間を空ければ大丈夫なはず てか、サーバーは何?
619 名前:602 mailto:sage [2022/11/07(月) 11:40:12.51 .net] >>608 ありがとうございます。そうでしたか。 コマンドの内容と関係無さそうだったので迷いました。 接続先のサーバーは自宅のraspiです。
620 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/08(火) 09:01:57.74 .net] もしかしてファイル転送を多重化しようとしてるのかな そういうオプションがあったような気がするけどね rsync
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2022/11/08(火) 23:15:42.53 .net] はい、ぶたがみーるー まあ、ここにも俺がいるわけですけどねw
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/03/27(月) 06:41:34.11 .net] バックしまーす
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/06/18(日) 23:35:36.05 .net] function YesNo { local yn while true; do read -p " [Yes/No" "$1" "]: " yn case $yn in [Yy]*) return 0 ;; [Nn]*) return 1 ;; [Ee]*) if [ ! "$1" = "" ]; then return 2; fi ;; esac done } #main YesNo ":いいえ /Else:その他" echo $? exit 実行すると、read: `:いいえ /Else:その他': 有効な識別子ではありません とエラーになるのですが、どうすればいいでしょうか?
624 名前:名無しさん@お腹いっぱい。 [2023/06/19(月) 06:14:08.74 .net] -p に渡っているのは " [Yes/No" だけで、残りの "$1" と "]: " は yn と同じく変数名として解釈されている read -p " [Yes/No $1 ]: " yn
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/06/23(金) 17:18:03.40 .net] テスト
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/08/23(水) 21:31:25.96 .net] これってどうしてそうなのだろう?
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/08/27(日) 18:57:22.73 .net] readコマンドの引数にダブルクォートを使ってるからだぬ だから>>614 氏が指摘しているコトになってるぬ
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/20(火) 08:47:58.81 .net] 先にBを算出することもなく変数の追加もなしで処理2を1箇所にすることは可能でしょうか? if [ A ]; then Bを算出 if [ B ]; then 処理1 else 処理2 fi 処理2 fi
629 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/20(火) 14:15:04.07 .net] 2度目のエルスを書かなければいいだけじゃなくて?
630 名前:名無しさん@お腹いっぱい。 [2024/02/20(火) 17:32:39.42 .net] >>619 「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。 出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。 が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。 なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/22(木) 06:05:52.23 .net] >>618 else 足りなくね 処理2を1度または2度実行するのに、1箇所にしたいとかイミフ !Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/02/22(木) 18:42:19.24 .net] { ifを何重にもネストしたブロック } || 処理2 みたいなのでも
633 名前:名無しさん@お腹いっぱい。 [2024/03/14(木) 17:20:13.74 .net] while ...do 処理1 done <<=LIST= リスト1 =LIST= while ...do 処理2 done <<=LIST= リスト1 =LIST= てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、 while ...do 処理1 処理2 done <<=LIST= ではあかん。
634 名前:名無しさん@お腹いっぱい。 [2024/03/14(木) 18:05:33.59 .net] ヒアドキュメントの中で変数を展開できます。 LIST_CONTENT="リスト1 ... " while read s; do printf '%s\n' "${s}" done <<LIST ${LIST_CONTENT}" LIST
635 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています