- 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/
- 734 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:39:35.06 .net]
- >>715
後出しだけど、意外と改行まで1文字として扱うのは大変なんだよね
- 735 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:48:27.27 .net]
- 改行を扱いたい場合は bash か zsh の read かな。
printf 'Hello\nWorld\n' | while read -r -n 1 c;do echo "$c"; done awk の場合は RS に '\0' をセットすればいいかも printf 'Hello\nWorld\n' | awk -vRS='\0' -F '' '{for(i=1;i<=NF;i++) print $i}'
- 736 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/24(土) 18:09:58.40 .net]
- 公開するようなシェルスクリプトって--helpオプションくらいは付けたほうがいいかな。
問答無用で第一引数をファイル名やらURLやらだと解釈するほうがはるかに楽だし簡潔になるんだけども。
- 737 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/24(土) 18:17:47.94 .net]
- オプションで思い出した。
オプションの解析めんどくせーとか思って他の言語のライブラリを参考に オプション解析のライブラリを作ろうかと思ってるんだが、 getoptやgetopts程度だと使いやすくなった気がしないし、 作った所でそんなに簡単に書けるようなもんでもなさそうで、 何のためにコレが必要なんだ?って思いなした結果 他言語にあるようなライブラリは、--helpを半自動で 生成してくれるものだと思ってたりする でももう少しオプションの解析楽にならないかな? どうすればいいんだろう
- 738 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 01:51:02.53 .net]
- ある文字列のハッシュ値を求めたいんですけど
どのLinux/UNIX/FreeBSDでも標準ではいってる ハッシュ化コマンドって何がありますかね? それからPOSIX標準コマンド?みたいなものってあるんですか? どこでも絶対はいっていなければいけないコマンドとか
- 739 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:25:15.03 .net]
- POSIXってこれ?
pubs.opengroup.org/onlinepubs/9699919799/
- 740 名前:700 mailto:sage [2018/03/25(日) 02:29:04.48 .net]
- DATE=`date '+%Y%m%d%H%M'`
TMPDIR='/tmp' BAKDIR='$TMPDIR/backup_%DATE' #echo "$DATE" mkdir $TMPDIR/backup_$DATE cp -rfp /home/atashi/doc $BAKDIR これだとcpが出来ないんですがどこが間違えていますか?
- 741 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:29:55.81 .net]
- ない
- 742 名前:700 mailto:sage [2018/03/25(日) 02:34:52.38 .net]
- 最後の行は
cp -rfp /home/atashi/doc $BAKDIR/docです
- 743 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:41:09.90 .net]
- >>723
3行目の%が間違ってるよね? あと 4行目でデバッグ用にechoすべきは$BAKDIR 5行目はmkdir “$BAKDIR” 一つ一つ確認したほうがいいよ
- 744 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:44:00.47 .net]
- >>723
BAKDIR='$TMPDIR/backup_%DATE' こうじゃない? BAKDIR='$TMPDIR/backup_$DATE'
- 745 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:44:27.17 .net]
- あ、かぶったw
- 746 名前:700 mailto:sage [2018/03/25(日) 03:03:57.65 .net]
- >>726
>>727 ほんとだ。 $に直したんですが、 DATE=`date '+%Y%m%d%H%M'` TMPDIR='/tmp' BAKDIR='$TMPDIR/backup_$DATE' echo "$TMPDIR" #mkdir "$BAKDIR" echo "$BAKDIR" を実行すると、 $ ./hoge.sh /tmp $TMPDIR/backup_$DATE になってしまって、ダメでした。 mkdir "$BAKDIR" を入れると、カレントディレクトリに「$BAKDIR」というフォルダが出来てしまいました
- 747 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 03:13:28.38 .net]
- >>729
シェル シングルクォートとダブルクォートの違い 辺りでググってみて
- 748 名前:700 mailto:sage [2018/03/25(日) 03:17:52.62 .net]
- DATE=`date '+%Y%m%d%H%M'`
TMPDIR='/tmp' BAKDIR="$TMPDIR/backup_$DATE" echo "$TMPDIR" mkdir "$BAKDIR" echo "$BAKDIR" >>730 出来ました! どうもありがとうございました。 $ ./test.sh /tmp /tmp/backup_201803250316
- 749 名前:700 mailto:sage [2018/03/25(日) 04:07:06.26 .net]
- 上の後に
cp -rfp /home/hoge/doc $BAK_DIR/doc zip -r $BAK_DIR.zip $BAK_DIR をやるとzipを解凍してみたら tmpフォルダが出来てその中にbackup_201803250348フォルダが出来ているんですが、 zipを解凍したらbackup_201803250348フォルダが出来るようにするにはどうしたらいいですか?
- 750 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 09:39:54.86 .net]
- ( cd $TMPDIR ; zip -r backup_$DATE.zip backup_$DATE )
- 751 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 16:41:32.60 .net]
- すみません、timeoutコマンドのうまい使い方を教えてください
シェルの中でtimeoutでタイムアウトさせた場合、シェル丸ごとごと落ちてしまいます タイムアウトさせた上で処理を分岐させて継続して処理させるにはどう制御したら良いのでしょうか timeout unzip || func_hoge といった感じで一応回避できたのですが、関数処理が終わると丸ごとプロセスキルされる事には変わらず、綺麗に終わらすことができません
- 752 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 16:54:52.07 .net]
- timeoutコマンドを実行したシェルは落ちないよ
$ timeout 1 unzip … としたときに タイムアウト後にunzipのプロセスがキルされると困るって話??
- 753 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 17:56:56.40 .net]
- https://linuxjm.osdn.jp/html/GNU_coreutils/man1/timeout.1.html
コマンドがタイムアウトした場合で、かつ --preserve-status が設定されていない場合、 終了ステータスは 124 になります。
- 754 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 19:03:35.42 .net]
- >>735
紛らわしい書き方をしてすみませんでした シェルスクリプトです 今環境がないので具体的な結果を示せませんが、例えば以下のような処理を実行するとtimeoutがプロセスを落とした(?)メッセージがコンソール出力された後、後続のechoは何も表示されません #/bin/bash timeout 1 unzip piyo.zip if [ $? -ne 0 ]; then echo hoge else echo fuga fi echo owata
- 755 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 19:19:17.27 .net]
- >>737
んー。こっちでは表示されるけれども… Script started on 2018年03月25日 19時18分12秒 testuser@debian:~/var/tmp/temp$ cat ./to.sh #! /bin/sh - timeout 1 sleep 10 if [ $? -ne 0 ]; then echo hoge else echo fuga fi echo owata testuser@debian:~/var/tmp/temp$ ./to.sh hoge owata testuser@debian:~/var/tmp/temp$ exit exit Script done on 2018年03月25日 19時18分30秒
- 756 名前:700 mailto:sage [2018/03/25(日) 21:40:43.57 .net]
- >>733
どうもありがとうございます
- 757 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 22:27:12.96 .net]
- ていうか
BAKDIR がいつから BAK_DIR になったんだ
- 758 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 22:38:36.41 .net]
- このコードってvalidですよね?
やってること・・・foo関数が最初に呼ばれた時に OS判定(相当)のことをして、OS毎に処理を切り替えて実行 関数を上書きすることで、次回以降は判定することなく処理実行 #!/bin/sh foo() { echo first call os_type=linux [ $os_type = linux ] && \ foo() { echo linux } [ $os_type = mac ] && \ foo() { echo mac } foo } foo foo
- 759 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 22:53:06.94 .net]
- >>738
なんででしょうね(´;ω;`) もう一度見直してみます
- 760 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 08:52:17.43 .net]
- くだらないtypoしていたに一票。
変だと思ったら、 sh -x スクリプト名 でなにやってるか眺めてみることをオススメする。 勿論、
- 761 名前:標準エラーを /dev/null に捨てたりするのもナシで。 []
- [ここ壊れてます]
- 762 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:04:26.16 .net]
- 再確認してきました
実際にはリンク先の48,49行目のログ整形のための処理で問題が起こっているようです timeout自体の問題ではないので一旦取り下げます、ご協力ありがとうございました https://pastebin.com/F5QC2Yu5
- 763 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:13:47.05 .net]
- ワロタw
fail() { case "$1" in 0) echo "Info :$2" ;; 1) echo "Warn :$2" ;; 2) echo "Error:$2" ;; 3) echo "Success :$2" exit 0 ;; 4) echo "Fatal:$2" exit 1 ;; 略 esac }
- 764 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:16:57.86 .net]
- failwww ひどいなw
fail 0 " **** test start ****" WAIT_SEC=5 time timeout -sKILL ${WAIT_SEC} unzip -t /home/xxxx/crypto.zip if [ $? -ne 0 ]; then fail 2 "hage" else fail 0 "hoge" fi fail 3 "**** test end ****"
- 765 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:20:23.93 .net]
- おお、是非原因と対処法も書いてってください
- 766 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:22:56.42 .net]
- failなのにsuccessなのか…
- 767 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:47:56.48 .net]
- >>747
原因・・・他人のコードを理解せずにパクって、行き当たりばったりにコード書き加えて、終わらすこと 対処法・・・ちゃんとコード読んで理解して無駄なものをなくせ
- 768 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 12:55:45.54 .net]
- >>749
全く耳が痛い、実際そういうレベルだけど頑張るよ(´・ω・`) > >は実際わけわからずに使ってるし
- 769 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 02:35:57.99 .net]
- あー、ちくしょ、
ローカルでもリモートでも使うスクリプトを 置くディレクトリ名が決まらない ローカルだけで使うスクリプト リモートだけで使うスクリプト 両方で使うスクリプト どういうディレクトリ構成にしよう Windowsも考慮したいから シンボリックリンクは使いたくない
- 770 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 02:56:48.81 .net]
- またお前か
- 771 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 19:30:16.58 .net]
- >>751
~/share/public/ に置いてる。
- 772 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 20:19:33.81 .net]
- なんか冗長な感じ
- 773 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 21:50:15.67 .net]
- うちは~/share/public/sbin/
- 774 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 22:20:21.84 .net]
- あんまり良くないのかもしれんが……
/srvを特定の一般ユーザに対して書込可にして、 /srv/git/github.com/<account name>/dotfiles (GitHubで管理するなら) にしてる。
- 775 名前:名無しさん@お腹いっぱい。 [2018/03/27(火) 23:56:34.98 .net]
- >>753そんなことしてまで/srvに置く意味あんの
- 776 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/28(水) 14:37:11.36 .net]
- >>751
なぜ/usr/remote/binじゃダメなのか 理由を知りたい
- 777 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 01:01:26.37 .net]
- >>758
逆になぜ/usr/remote/binなのかの理由が知りたい。 なにかのアプリケーションが使うの?
- 778 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 02:51:11.17 .net]
- findのprint0やった、NULL文字区切りのファイル名一覧って
POSIXのreadじゃ読み取れないんだな-dオプションがないから つーことはファイル名に改行、そのた制御文字が入るかもしれないことを 考慮するとPOSIXの範囲じゃ対応不可能ってことなのか
- 779 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 03:44:39.70 .net]
- >>760
なんで対応不可能だと思うんだよw じゃあどうして「POSIXが」ファイル名に改行含め制御文字を許可してるんだよって話。 C99どころかシェルコマンド(awk)レベルで余裕で扱えますが
- 780 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 09:47:58.90 .net]
- >>761
ひねくれた回答はいらないよ ここはシェルスクリプト POSIX shが対応してないって言ってんの
- 781 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 09:57:03.22 .net]
- \0区切りもshそのものの機能じゃなくね?
- 782 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木)
]
- [ここ壊れてます]
- 783 名前:10:03:19.16 .net mailto: 空白制御文字入りファイル名は
for i in * で扱えるので、工夫次第だな。 findと組み合わせるには-print0は役に立たんから-execで頑張るしかないけど。 [] - [ここ壊れてます]
- 784 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 10:30:24.37 .net]
- \0区切りがなんのコマンドによる出力かどうかは
今は関係ないんだよ。 いろんなコマンドでよく使われる\0区切りのデータに shが対応していないって話をしているんだから で調べてみたらawkもポータブルな方法では \0区切りには対応してないようだな
- 785 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:35:38.17 .net]
- >>765
> いろんなコマンドでよく使われる\0区切りのデータ って何がある?
- 786 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:37:07.53 .net]
- >>765
shはポータブルな方法で対応してるぞ。 xargsは確かに対応してないが。 findについては>>764が書いてるように、遅くはなるもののポータブルな解はある。 xargs と sh の区別はつけようぜ。
- 787 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:39:23.23 .net]
- MacOSのsed (bsd)も\0扱えないっぽい
まあもともと\0はC言語の終端文字だしな そんなのが扱えるほうがおかしいか
- 788 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:44:03.16 .net]
- >>767
xargsの話は誰もしてない shは\0を変数に入れられない shがポータブルな方法で\0文字に対応してるってのは嘘 (forは\0を使わない)
- 789 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:51:22.35 .net]
- >>769
改行じゃなくて \0 の話をしてるのか。 POSIXではシステムコールの仕様上、 \0 をファイル名に入れることは決してできない。 だから、ファイル名に \0 を使う話をすること自体が、POSIX的にナンセンス。
- 790 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:55:53.07 .net]
- >>770
> ファイル名に \0 を使う話 はお前しかしていないよ。
- 791 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:59:26.26 .net]
- >>771
発端の>>761はファイル名に改行を入れる話だろう。 ファイル名中の改行をポータブルに扱う方法はshにある。 みんなちゃんとそう指摘してるのに君だけ勘違いしてる。
- 792 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:20:16.06 .net]
- は?バカなのかこいつ?
- 793 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:38:36.81 .net]
- なんで改行の入ったファイル名を扱うために、シェルが \0 を文字列の一部として
扱う必要があるなんていうアサッテの発想にいたるのか… (まあプログラミングができないせいで分かってないんだろうけど) もうちょっと態度がまともなら、ポータブルなやり方を具体的に教えてやっても いいが、 >>773 みたいな煽りは嫌いなので教えてやらないw
- 794 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:40:47.01 .net]
- findのprint0で出てくる/0区切りのファイル名一覧がreadで読み取れないンゴ…
- 795 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:50:37.16 .net]
- そもそも -print0 の出力をそのままの形でポータブルに
read で読めるんじゃないかと考えること自体が間違い。 POSIXで規定されている read のオプションは -r だけで -d はないので、改行を含む文字列をそのままで read だけを 使って単一の文字列変数に取り込むことは、ポータブルには できない。 もちろん、だからといって sh で改行を含む文字列を扱えない なんてことにはならないのは言うまでもない。
- 796 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:54:44.85 .net]
- >>774
無知ごくろうさんw
- 797 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:56:17.18 .net]
- やっと>>760が言ったことに追いついたのか?
- 798 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:05:43.31 .net]
- 773って757が言ったことを冗長に言い換えただけだなw
- 799 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:11:26.76 .net]
- >>774
>なんで改行の入ったファイル名を扱うために、シェルが \0 を文字列の一部として >扱う必要があるなんていうアサッテの発想にいたるのか… find作ったやつに言えw
- 800 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:21:49.15 .net]
- > findのprint0やった、NULL文字区切りのファイル名一覧って
> POSIXのreadじゃ読み取れないんだな-dオプションがないから ここまでは正しい。しかし、 > つーことはファイル名に改行、そのた制御文字が入るかもしれないことを > 考慮するとPOSIXの範囲じゃ対応不可能ってことなのか これが xargs の文章であれば、その通り。 しかしこれが sh についての文章であれば、完璧に間違い。 これだけ繰り返し指摘されてもいまだに理解できないような奴でも Bourne shell でスクリプトを書くようになったんだなという変な感慨があるな。
- 801 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:24:21.25 .net]
- >>781
>これが xargs の文章であれば、その通り。 だれもxargsの話なんかしてない。(2回目) []- [ここ壊れてます]
- 803 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:26:26.64 .net]
- >>781はxargsが\0扱えることも知らなそうw
- 804 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:30:47.80 .net]
- これだけヒント書いてるのに、いまだに
「そのままの形だと read で扱えない」 と 「sh だとできない」 が等価だと主張しているのは、アホの子なのか、 煽れば答を教えてもらえると期待しているのか、 どっちなんだろうね。
- 805 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:36:00.29 .net]
- >>783
POSIX の xargs に -0 オプションは規定されてないので、 「ポータブル」という条件下ではできない。 まあ POSIX の find に -print0 オプションが入ったのもわりと最近なので、 そのうち xargs でも待ってればそのうち -0 が追加されるとは思うが。
- 806 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:39:13.18 .net]
- 答えはfor in * を使うこと
俺が代わりに答えておいてやるよ なおshで\0を使うと言う答えではない
- 807 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:41:04.45 .net]
- POSIXはprint0に対応する前に
ファイル名に制御文字を使用できないようにしろ
- 808 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:53:52.47 .net]
- 賛成
- 809 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 14:01:21.67 .net]
- for使ってfindっぽいものを自作したとして
それをパイプで別コマンドに流そうとした時に またファイル名に改行が含まれていた時問題が発生するんだよな
- 810 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:15:24.81 .net]
- for で書くのなら、その結果のファイル名をわざわざ
他のプロセスにパイプで渡すなんてことはせずに、 そのシェル自身で処理するか、 あるいは他のプロセスに渡すなら引数を使え ってだけの話だな。 >>764 が既に書いてる話なのに、なんでそこから 35コメも無駄に費やされてるんだか。
- 811 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:18:45.25 .net]
- ちなみに for で書く以外のやりかたもあるけど、
これも >>764 が既に最後の文で書いてる。
- 812 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:30:33.97 .net]
- posixの範囲じゃ改行が含まれたファイル名を
パイプでつなげられないってことかな
- 813 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:56:18.36 .net]
- >>792
「POSIXの範囲内じゃ」は誤解を招く表現で、正確には 「POSIX Shell & Utilities の範囲内じゃ」だな。 「POSIX System Interfaces」を使えば問題なくできるからな。 まあシェルのスレなわけで「POSIXの範囲内じゃ」でも間違いとまでは言えないが。 あと、find -print0 が POSIX で規定されたってのは間違いだった。 そういう拡張もあることも言及はされてるが、規定には追加されていない。 でもって POSIX 的には「find -print0 | xargs -0」じゃなくて、 「find -exec コマンド {} +」を使えってことになってる。
- 814 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 16:20:44.05 .net]
- でも、find -exec じゃシェル関数に渡せないからなぁ
findは諦めろってことかな
- 815 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 16:44:16.87 .net]
- find を諦めるんじゃくて、シェル関数の方をあきらめて、独立したシェルスクリプトにしろってことだよ。
find -exec コマンド {} \; だとコマンドの起動回数が多いからシェルスクリプトにすると遅いのが問題になるけど、 find -exec コマンド {} + ならコマンド起動回数は相当に減るから、独立したシェルスクリプトにしても特に問題はない。
- 816 名前:名無しさん@お腹いっぱい。 [2018/03/29(木) 21:07:16.05 .net]
- AWKの区切り記号をヌル文字にすればいいんでは。
- 817 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 23:50:16.88 .net]
- ぬるぽ?
- 818 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 00:19:50.52 .net]
- >>796
試してみたけどね。RSに\0入れられなくてね もう全滅w
- 819 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 02:47:00.90 .net]
- >>798
俺の所では通ったけど、もしかしてOS依存なのかな。 @Debian GNU/Linux
- 820 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 03:18:23.09 .net]
- OSっていうかGNU系かどうかだね
GNU系はだいたい\0に対応している BSD系とかは対応してない。だからMacとかつらい 私的なスクリプトならMacのコマンドをGNU化するやつ 入れて済ませても良いんだが
- 821 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 12:29:37.47 .net]
- >>795
バカwww
- 822 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 12:30:43.62 .net]
- このスレでこんなに草を見るとは思わなかった
- 823 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 13:42:54.12 .net]
- シェル関数にこだわる理由が思いつかん。
- 824 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 15:22:07.88 .net]
- そこにシェルスクリプトがあるから、的な何かかな?
- 825 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 15:47:33.25 .net]
- コンパイルせずに実行できる(実質)唯一の共通規格言語だからじゃないの?
PythonとかはPOSIXの範囲外だからどこでも動くとは限らないし。 え? UNIX™なのにPOSIXと齟齬ありまくりの実装のAIXちゃん? 知らない子ですねぇ……。
- 826 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 16:25:04.06 .net]
- localみたいにPOSIXじゃないけどだいたい
使えるってもの他にあったら教えて📡
- 827 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 16:38:24.19 .net]
- AIXはマジでどうにかして欲しい
seqすらないの本当に面倒臭い
- 828 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 17:03:19.85 .net]
- AIX案件なんてあるの?
- 829 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 17:23:17.72 .net]
- 俺が行ってる現場だと1年くらい前までは現役でPowerでAIXを使ってたよ。
今はRedHatにリプレースされちゃったけど……そんなに嫌いではなかった。 >>807 jotも無かったっけ?
- 830 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 17:29:23.50 .net]
- うちは親会社モニョモニョだから結構AIXが多くて嫌になる
>>809 手元のやつだとないな。AIX7.1だけど
- 831 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:26:28.33 .net]
- >>804 >>805
それならシェル関数ではなく普通のシェルスクリプトでもいいだろう。 >>794 は単なるシェルスクリプトではなくシェル関数の利用にこだわってて謎。
- 832 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:31:30.33 .net]
- シェル函数って
somefunc() { echo "This is somefunc." } っていうやつでしょ? >>794はそういう意味で使ったんじゃない可能性が出てきたな。 単に「パイプに渡せない」というような趣旨の要望を言いたかったのかもしれん。
- 833 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:47:44.46 .net]
- >>812
たぶん find の -exec のとこに書けないって意味で書いてるだろうから、 シェルスクリプトじゃなくてシェル関数だと思う。
- 834 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:54:31.32 .net]
- たとえパイプ経由でファイル名を渡せないって意味だったとしても、
find -exec でそれと同一機能が実現できるならそ別にいいじゃん。 >>794が find -exec の何を気に入らないのかやっぱり分からんな。
|

|