1 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:07:26.41 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 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の方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その25 echo.2ch.net/test/read.cgi/unix/1439563321/
402 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:46:18.65 .net] とりあえず何がしたいかを書け そんな汚いもん見せられても何がしたいのか分かりにくい
403 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:51:57.00 .net] PATH潰すんなら外部コマンドはフルパスで書かんと
404 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:02:38.34 .net] フルパスで書かないといけなかったんですね…
405 名前:修正してみたらできました、ありがとうございます! [] [ここ壊れてます]
406 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:11:58.47 .net] ようわからんがsavelogコマンドみたいなことがしたいのか
407 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:27:19.72 .net] PATHがきしょい
408 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:33:20.43 .net] >>399 「フルパスで書かなきゃいけない」のではない $PATHを上書きするのがマズい
409 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:35:16.21 .net] これ1〜6までファイル全部消えるんじゃね?
410 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:35:32.78 .net] 1から6まで
411 名前:400 mailto:sage [2017/10/26(木) 15:37:15.23 .net] あ、すまん勘違い 逆だった
412 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:21:22.80 .net] 5を6にリネーム~0を1にリネーム そのあと最新のログを0にリネームじゃないかな どっちにしろゴリ押し感半端ないが
413 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:30:18.25 .net] >>402 $PATHって環境変数ですよね… 何故気づかなかったんだろう お恥ずかしい限りです
414 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:37:04.75 .net] あーそういうことか、403のお陰でやりたいことは分かった
415 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 18:34:54.50 .net] こうすればわかりやすいですかね #!/bin/sh DIR=/var/log/ FILE=dnsmasq.log; START=0 for i in `seq 1 6` do DEC=`expr $i - 1` cd $DIR mv "${FILE}.${DEC}" "${FILE}.${i}" done cd $DIR mv $FILE "${FILE}.${START}" exit 0
416 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 18:56:39.92 .net] 毎回cdするのは無駄やろ
417 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 19:01:29.48 .net] 個人的にexpr嫌いなのもあって$(())使っちゃうな mv "${FILE}.$((i-1))" "${FILE}.$i" あとseq間違ってね? seq 6 1 -1
418 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 19:25:35.16 .net] これだと全部ログ.0になっちゃいますね ありがとうございます!
419 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 17:54:16.26 .net] logrotateの真似したいのかな
420 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 19:36:18.05 .net] 素直にそっち使った方が楽に出来るよね
421 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 22:25:53.38 .net] そっちを使うほうが楽、ということを学習するにはまずは自分で書いてみて、大変だぜてことを理解しないと
422 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:10:26.11 .net] 昔solarisで見たlogrotateはshell scriptだった どこかで見れれば参考になるかも
423 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:39:18.79 .net] あれはあんまりきれいじゃないから参考にしない方がいい
424 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:48:20.70 .net] この /usr/lib/newsyslog ね www.tcp-ip.or.jp/~ikken/intra/check.txt
425 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 15:47:40.56 .net] シェルスクリプト https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/debianutils/4.4/file/usr/bin/savelog マニュアルページ https://manpages.debian.org/jessie/debianutils/savelog.8.ja.html
426 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/02(木) 04:12:26.82 .net] これ? https://goo.gl/En6m3D www.bityet.us/s7b47si.jpg
427 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 04:26:36.66 .net] X Windows System で,どの IMF が用いられているか判別する方法を考えている。 思い付いたのは $XMODIFIERS 環境変数を用いた case $XMODIFIERS in   *ibus)     local _imf=ibus     ;;   *fcitx)     local _imf=fcitx     ;;   *uim)     local _imf=uim     ;;   *SCIM)     local _imf=scim     ;; esac なんだけど,$XMODIFIERS が必ず設定されているとは限らないし,なんか漏らしてる気がしてならん……。
428 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 04:29:53.86 .net] ツールで投稿したら空白がエラいことになった。すまん。
429 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 07:20:14.85 .net] Shell Scriptのコメントアウトに # @(#) Foo is foo. みたいな文字を書いておいて $ what ./foo.sh とやると Foo is foo という表示がでるというようなwhatコマンドがあるらしいのですが 手元のFedora26に見付かりません。($ dnf search what, $ dnf provides what) どこかにありますでしょうか。
430 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 08:32:21.55 .net] Linuxの質問はLinux板で
431 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 10:09:39.61 .net] >>423 whatはかつて使われていたSCCSというソースコード管理システムに入っていたコマンド 現在はGNU CSSCがSCCSと同等の機能を提供している なのでcsscというパッケージを探す なければhttps://www.gnu.org/software/cssc/へGO!
432 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:39:18.57 .net] case文で $1がhogeで、$2がhageの場合のみ処理Aを実行する みたいなのできないでしょうか?
433 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:49:53.05 .net] 入れ子にすりゃいい
434 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:56:36.27 .net] $1にも$2にも含まれ得ない文字を区切りにして連結
435 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 16:00:08.82 .net] >>425 ありがとうございます。依存地獄に嵌ってしまいあきらめました,教えてもらったのにすいません。 また,御礼がおそくなってもうしわけないです。
436 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 16:22:06.48 .net] caseで実装するなら入れ子かね しかしここでも髪の話するのか
437 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 17:07:40.56 .net] >>427 >>428 >>430 入れ子にできることを全然知らず こんな感じかなでやってみたらいけました 皆さん短時間にありがとうございます >>430 他意はありませんw
438 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 18:39:46.60 .net] >>430 気にし過ぎだろ さっさと剃れよ
439 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 09:15:00.24 .net] すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます そうならない方法はあるのでしょうか exec < file.tsv while read LINE do ARRAY=(${LINE}) done
440 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 10:11:05.91 .net] >>433 変数の参照部分を引用符で囲むとか。 #!/bin/sh - exec < file.tsv while read LINE; do ARRAY=("$LINE") done echo "$ARRAY" IFS の値を空にするとか。 #!/bin/sh - IFS= exec < file.tsv while read LINE; do ARRAY=($LINE) done echo $ARRAY
441 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 10:16:16.70 .net] あ,5ch ってコード貼るのまずいんだっけ。しくったな。 まあこんなくだらないコードに著作権云々関係ないかw
442 名前:名無しさん@お腹いっぱい。 [2017/12/02(土) 10:37:47.62 .net] >>433 bash なら mapfile がある(別名 readarray) -t オプションで各行末尾の改行を取除く mapfile -t ARRAY <file.tsv
443 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/03(日) 07:15:44.68 .net] 早速検証してみます、ありがとうございます!
444 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/05(火) 08:37:43.17 .net] 検証した結果、IFSを改行のみにして読み込み、その文字列をCutで抜くで達成できました こうしないと空文字の列が詰まってしまいました IFS_BAK=IFS IFS=$'¥n' exec < file.tsv while read LINE do echo "${LINE}" | cut -f1 >> tmp1.txt echo "${LINE}" | cut -f2 >> tmp2.txt done IFS=IFS_BAK
445 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/05(火) 09:20:20.37 .net] >>438 重箱の隅を突くようで悪いが,その書き方をするならシェバンは #!/usr/bin/bash にしておけ。 $'string' は Bash の独自拡張だった気がする。
446 名前:433 [2017/12/06(水) 10:04:48.53 .net] >>433 今ごろ勘違いに気づいた mapfileじゃ全然見当外れじゃないか…なんかごめん たとえば IFS=$'\t' line="${IFS}b" このとき a=(${line}) で a=("" "b") となるのを期待しているのだけど、実際にはクオートしていないので a=( b) と同じことになって、先頭の「空の列」は残らない かといってクオートしたら a=("${line}") これはタブ区切りで分割されることなく行全体がそのままになるので意味がない… ということだよね >>438 のようにファイルに書き出すだけなら、そう
447 名前:やってcutでやるのが扱いやすそうだけど もしどうしても配列にする必要があるときは、こんな感じでどうだろう https://ideone.com/uPfCwc 空だと消えてしまうなら空にならないよう何か入れとけばいいじゃない(配列にしてから取り除く) という案 [] [ここ壊れてます]
448 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/11(月) 05:34:31.40 .net] >>440 回答が遅れてすみませんでした なるほど…その手はいけるんですね ありがとうございます、活用させていただきます 自分は今回縛りがあってbashだけでやっているのですが、可能なら他のスクリプトに任すべきかな…(´・ω・`)
449 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/14(木) 00:31:41.37 .net] そこは「他のシェルに」じゃないか
450 名前:名無しさん@お腹いっぱい。 [2017/12/29(金) 06:50:06.02 .net] 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 PPEE18BYYA
451 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 17:53:30.81 .net] はじめまして 早速で申し訳ないのですが、以下のシェルスクリプトでdoを含むコマンドが一切使用できません。理由と解決策を教えてください。 #!/bin/sh dir=`dirname ${0}` echo -n "探す拡張子=" read que ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}') if [ -z "${ans}" ];then echo "${que}は見つかりませんでした。\n終了します。" exit else echo "${ans}" fi
452 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 17:59:26.22 .net] >>444 すみません訂正します。 select文のみどこに書いてもSyntax error: "do" unexpectedというエラー出てしまいます。
453 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 18:43:33.26 .net] doが何のこと言ってるのかよくわからんが実行の仕方が間違ってんじゃね まず問題がどこにあるかを明確に切り分けろ
454 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 20:31:51.74 .net] >>446 さっき書き直したのですが、改善しませんでした。 エラー内容はさっきと同じで、 Syntax error: "do" unexpectedです。 441でも、どこに記述しても変わらなかったため、問題の部分を消して使っていたので、doの部分を貼り忘れてました。すみませんでした。 #!/bin/sh dir=`dirname ${0}` echo -n "検索する拡張子:" read que while [ -z "${que}" ] do #ここのdoは問題なし。 echo -n "拡張子を入力してください。\n検索する拡張子:" read que done ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}') if [ -z "${ans}" ];then echo "${que}は見つかりませんでした。\n終了します。" exit else echo "${ans}" fi #============ここから問題の部分=========== select var in ${ans}終了 do if [ ${var} = 終了 ];then exit fi if [ ${que} = gz -o xz];then tar -xf ${dir}${var} fi done
455 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 20:59:27.67 .net] xz ]やないの? シンタックスエラーって出てるんだからまず自分を疑おう
456 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 21:01:57.76 .net] どこに貼ってもだめならselectの構文がなんかおかしいんじゃないの
457 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 21:16:18.25 .net] >>448 スペース入れても変わりませんでした。 >>449 構文がおかしい部分を自分では見つけられませんでした。
458 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 21:41:13.34 .net] do unexpectedなら直前の「${ans}終了」ちゃうんけ
459 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 22:01:36.46 .net] >>451 変数じゃなくしても、終了を消しても、別の変数に変えてもSyntax error: "do" unexpectedは消えませんでした。
460 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 22:17:55.91 .net] とりあえず「間違いなく動作する」select構文をまず単品で書け ネットのコピペでも構わん。出来る限りシンプルなやつで 動いたならそれを少しずつ改造して動かしてを繰り返しつつお前の目的に近づけろ
461 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 22:28:27.56 .net] shでselectってできたっけ
462 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 23:44:18.33 .net] SC2039: In
463 名前: POSIX sh, select loops are undefined. bashならとりあえず動く、#!/bin/bash にしとけば [] [ここ壊れてます]
464 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 23:56:10.56 .net] >>453 ありがとうございます。コピペ&作り直しでできました。 >>454 Ubuntuでやっていたのでできました。 >>455 書き換えました。 皆様ありがとうございました。 もしかしたら似たようなものがすでにあるかもしれませんが、とりあえずできたものを>>454 に貼っておきます。
465 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 23:57:24.21 .net] #!/bin/bash PS3="入力してください:" menu="曖昧 前方一致 後方一致 完全一致 拡張子" echo "検索するディレクトリを入力してください 入力しなかった場合、このファイルがあるディレクトリを検索します。" while [ -z "${dir}" ] do echo -n "ディレクトリ入力:" read dir if [ -e "${dir}" ];then break else unset dir echo "そのようなディレクトリはありません。" fi done echo "検索方法を選択してください:" >>455 に続く
466 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 23:58:02.00 .net] >>457 続き select var in ${menu} do echo ["${var}"]で検索します。 echo -n "検索する単語を入力してください:" read que case "${var}" in 曖昧) ans=$(find ${dir} -name *"${que}"*);; 前方一致) ans=$(find ${dir} -name "${que}"*);; 後方一致) ans=$(find ${dir} -name *"${que}");; 完全一致) ans=$(find ${dir} -name "${que}");; 拡張子) ans=$(find ${dir} -name *."${que}");; esac echo "${ans}" exit done
467 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/09(火) 07:32:28.94 .net] 正直見辛いしその程度なら一行コマンド打つんでいらないっす
468 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/09(火) 12:43:53.77 .net] * が展開されてうまく動かなかった
469 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/09(火) 20:01:44.41 .net] Linuxの話ならLinux板で聞いてください
470 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/10(水) 13:12:44.56 .net] odコマンドって規定で行番号は付くは省略するわでほんとUNIX哲学的じゃねーな xxdとかのほうが遥かに扱いやすいわ
471 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/10(水) 16:21:53.96 .net] 行番号ちゃうし
472 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/11(木) 12:57:39.11 .net] od -An -v
473 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 15:24:43.34 .net] 規定がっていう話でしょ それと同じで ls も規定で勝手に表示を整えるのをやめてほしい。 Plan 9のlsは規定でls -1みたいな挙動らしいけど。
474 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 15:30:27.80 .net] 規定なら従っといた方がいいじゃん 罰則あるかもしれんし
475 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 15:31:53.68 .net] それは規約じゃ
476 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 19:01:27.06 .net] default = 既定
477 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 22:58:37.21 .net] 違反すると罰則あるのは規定じゃなくて規約だろって話
478 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 10:57:30.90 .net] だから「Default=規定」って書いたんじゃねーの? 規約じゃないって意味で。
479 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 11:45:22.78 .net] ワケワカメ
480 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 15:52:04.52 .net] なんだこの流れ 全員頭悪いの?
481 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 16:00:17.68 .net] 流れ?
482 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 16:20:16.87 .net] 全次郎?
483 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 17:49:06.78 .net] 規約じゃなくて規定なら別に従う必要ないって話なだけじゃないのか
484 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 17:50:28.44 .net] default=既定≠規定
485 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 19:12:18.41 .net] >>465 の誤字を>>466 が茶化したのに理解されずにグダグダになった流れ
486 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 19:28:08.33 .net] すまん誤字に全く気付かなかった
487 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 19:34:54.90 .net] あーなるほどそういうことか。 普通に「既定」に脳内変換してたせいで意味不明な喧嘩に見えてたわ
488 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/15(月) 00:06:01.79 .net] 脳内変換てw馬鹿なだけやんかw
489 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/15(月) 08:02:47.35 .net] すぐそうやって火種を撒く……
490 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/15(月) 22:28:34.05 .net] $'\n' こういう $'何か' っていう書き方って bash 限定? sh でもいける?
491 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/16(火) 12:48:12.73 .net] bash限定
492 名前:名無しさん@お腹いっぱい。 mailto:age [2018/01/16(火) 15:07:55.74 .net] POSIX xargs pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html には-0オプションがありませんが,どうにかしてxargsにナル文字区切りのデータを渡せませんかね。 もしくは xargs -0 がエラーになるOSをご存知でしたら教えて下
493 名前:さい。 FreeBSD, MacOS, Debian GNU/Linuxともにxargsに-0オプションはありました。 [] [ここ壊れてます]
494 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/16(火) 16:09:39.07 .net] Solarisとかあやしそうだね
495 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/17(水) 00:51:10.26 .net] >>485 そうみたいね https://unix.stackexchange.com/questions/67193/solaris-xargs-command-for-solaris https://docs.oracle.com/cd/E19253-01/819-1210/6n3j74k03/index.html
496 名前:481 mailto:sage [2018/01/17(水) 04:46:35.14 .net] >>485 >>486 ありがとうございます。 ファイルパスに関するシェルスクリプトを作ろうとしており, ファイル名に改行文字が含まれている場合を考慮してナル文字区切りでデータを扱いたかったのです。 が,もうそんな特殊なファイル名にしている側の責任ってことにします。 仕事だったらもうちょっと考えるところですが個人で扱うので自分が気をつければいいだけなんで。 リンク等ありがとうございました。
497 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/17(水) 08:37:13.99 .net] pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html POSIXのfindには+終端もあるみたいだから、 用途によってはxargsを使わずに変なファイル名が扱えることもある。 例によってSolarisにはないが、POSIXに準拠してないということで切れる。
498 名前:481 mailto:sage [2018/01/17(水) 09:45:47.24 .net] >>488 ありがとうございます。 > 例によってSolarisにはないが、POSIXに準拠してないということで切れる。 恥かしながらSolaisってPOSIX準拠を謳っていないことを今知りました…… よくシステムコールAPIの説明で「SolaisまたはPOSIX」とありますが, その真意をようやく掴めました。 --- awkのRSにナル文字を指定できればxargsの代替として使えるかもしれないと思ったんですが, $ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | awk -v RS="$(printf '\0')" '{ print $0 }' みたいなことをやっても撥ねられる (シェルがナル文字についての警告を出して,「FirstSecondThird」とだけ表示される) のでやっぱりナル区切りを扱うのはやめておこうと思いました。 大人しく空白区切り・改行レコードで行きます。
499 名前:481 mailto:sage [2018/01/17(水) 09:55:31.15 .net] なんかこうすると上手く行った (ように見えます)。 $ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | \ awk ' \ BEGIN { RS="\0" ORS="\n" } { print } \ ' なんでこれが良くて >>489 がだめなのか分からないのが怖いので結局ナル文字区切りはやめることにしました。 連投&スレ汚し失礼しました。
500 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 11:41:43.86 .net] sedでiフラグをdフラグと一緒に使うことはできないのでしょうか。
501 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 11:44:10.00 .net] ↓ sed mevius.2ch.net/test/read.cgi/unix/1085730992/
502 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 19:40:41.47 .net] >>492 誘導ありがとうございます。一応の解決を見ました。