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

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

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

1 :デフォルトの名無しさん:2018/07/24(火) 11:01:16.36 ID:r0TJj2hB.net
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ: シェルスクリプト総合 その27(https://mevius.5ch.net/test/read.cgi/unix/1525337663/

2 :デフォルトの名無しさん:2018/07/24(火) 11:01:46.51 ID:r0TJj2hB.net
お約束
・特記なき場合、Bourne ShellもしくはPOSIX準拠のsh可換シェルが既定です
 つまりシバンは#! /bin/shです。
 他のシェル(bash, zsh, ksh, (d)ash, yash, posh, fish, (t)csh)などの専用機能に依存する場合は明示しましょう。
  OS X, GNU/Linuxユーザーは/bin/shの実体がbashなので*特に*注意(自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?)。
   ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX sh互換のdashですのであまり気にしないでも大丈夫です。
  FreeBSDユーザーは/bin/shの実体がashなので注意。
  Solaris, OpenBSDユーザーは/bin/shの実体がkshなので注意。
 csh/tcshでのシェルスクリプトは*まったく推奨しません*。
  (参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc
・POSIXに準拠しましょう
 有用なリンクはhttps://en.wikipedia.org/wiki/POSIXにまとめられています。
 最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
  (左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh、次点でDebianなどに搭載されているDash shell
  Heirloom sh: http://heirloom.sourceforge.net/sh.html
  Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります
 Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
 apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな

3 :デフォルトの名無しさん:2018/07/24(火) 11:02:04.48 ID:r0TJj2hB.net
初心者へのアドバイス
・適した道具を判断するのも頭の重要な使い方。
 シェルスクリプトよりもPerlまたはPythonの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらman(1)を引きましょう。
・思い通りに動かないときは、まずはsh(1)の-xオプションでトレースしましょう。

回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに、「そういうのはPerl, Python使え」と回答するのはやめましょう。
 安易にPerlやPythonに逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。

4 :デフォルトの名無しさん:2018/07/24(火) 11:05:09.89 ID:r0TJj2hB.net
補足(今スレ限り)
いままではUNIX板でスレ立てをしていましたが、IDやワッチョイが無いことを理由とした自演・荒しが目立ってきておりスレがまともに機能しなくなりかけているので、今回よりプログラム板に移動することになりました。

5 :デフォルトの名無しさん:2018/07/24(火) 14:22:58.96 ID:r0TJj2hB.net
とりあえず保守っぽい書き込み

6 :デフォルトの名無しさん:2018/07/24(火) 15:29:38.59 ID:4yafhCFC.net
おつ

7 :デフォルトの名無しさん:2018/07/24(火) 15:31:12.93 ID:ux1Ayazo.net
り返せ

8 :デフォルトの名無しさん:2018/07/24(火) 16:40:14.98 ID:PsBikv9p.net
ません

9 :デフォルトの名無しさん:2018/07/24(火) 16:45:11.85 ID:dOWUO1eS.net
m9

10 :デフォルトの名無しさん:2018/07/24(火) 20:36:43.40 ID:0V9luMBh.net
>>1
スレ立て乙!111

11 :デフォルトの名無しさん:2018/07/24(火) 21:04:07.46 ID:ux1Ayazo.net
112

12 :デフォルトの名無しさん:2018/07/24(火) 22:37:58.80 ID:ukUjoRN2.net
>1 乙
支援

13 :デフォルトの名無しさん:2018/07/25(水) 01:58:18.49 ID:41CwtA3+.net
乙なんよ

14 :デフォルトの名無しさん:2018/07/25(水) 02:54:55.73 ID:7zvfAEGp.net
テンプレの↓
> 自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
ちょっと痛いかな

15 :デフォルトの名無しさん:2018/07/25(水) 03:03:02.74 ID:JJXqrWB8.net
bashのあれやこれは、shでどうかけばいいかってのがあるといいな
特に配列。配列は引数として処理するんだよっていうのが体系的にまとまるといいな

16 :デフォルトの名無しさん:2018/07/25(水) 08:44:11.14 ID:go981At1.net
本来の引数配列以外で配列が必要になったら、基本的にはawkその他の言語使うなあ。
まあ自分用だと気の迷いで引数配列転用したり、evalで頑張ったりすることもあるけど、
仕事で他の人に引き継ぐこと考えると保守性で問題になるので
仕事ではやらないようにしてる。

17 :デフォルトの名無しさん:2018/07/25(水) 15:17:48.54 ID:JJXqrWB8.net
>>16
配列が必要になるっていうのは、シェルスクリプトの
プログラミングの仕方が間違えてるってことだよ

例えて言うならば、関数型言語をオブジェクト指向言語的に
使って、オブジェクト使いたい。インスタンス作りたい
メソッド作りたい、継承、カプセル化欲しい!って言うようなもん

シェルスクリプトは引数または標準入力で渡されたものを
順次処理していくという書き方をするもんなんだろう。
一時的に変数にためておくなんてことはしないので
配列は使わないですむ

18 :デフォルトの名無しさん:2018/07/25(水) 15:24:58.23 ID:eezz2RvW.net
evalだけは怖いから使わない
それでしか解決できない問題をまだ扱った事がないからだが

19 :デフォルトの名無しさん:2018/07/25(水) 15:32:42.01 ID:JJXqrWB8.net
evalは信頼できない文字をevalするのが問題なのであって
コードの中で作り出した文字をevalするなら問題もないんだよ
信頼できない文字であっても、使える文字種を限定すればいいし

20 :16:2018/07/25(水) 17:16:52.45 ID:BMgdIVPp.net
>>17
だいたい同感。
配列や連想配列がぴったりした応用もあるんだけど、
シェルで書くようなプログラムじゃないね。

21 :デフォルトの名無しさん:2018/07/25(水) 17:47:06.73 ID:7zvfAEGp.net
あるリモートファイルの最新のバージョンをダウンロードする方法ってありますか。
具体的にはhttp://ftp.jaist.ac.jp/pub/GNU/gnuzilla/←ここの最新バージョンのディレクトリを知りたいです。

22 :デフォルトの名無しさん:2018/07/25(水) 17:59:04.34 ID:DddK84yb.net
ある

23 :デフォルトの名無しさん:2018/07/25(水) 21:12:21.99 ID:l3Vcc9bz.net
>>17
バッチファイル程度のシェルスクリプトしか
知らないからそう思うんでしょ
知れば奥が深いよ
配列も結構多くのシェルがサポートしてる(例えばcsh)

24 :デフォルトの名無しさん:2018/07/25(水) 21:32:58.42 ID:tKZkTFhc.net
極端な例を挙げるなら、行列演算をシェルスクリプトで書く馬鹿はいないみたいな話よ。
配列に限った話ではなく、ほとんど全ての高級言語にあるのにシェルにはない言語機能がいろいろある。
例えば構造体に類する機能とか、参照とか。
言語には向き不向きがあって、シェルでは向いてない用途に無理矢理使うのは井の中の蛙。

25 :デフォルトの名無しさん:2018/07/25(水) 22:46:32.67 ID:c/fHfsdl.net
>>21
wget -qO - 'http://ftp.jaist.ac.jp/pub/GNU/gnuzilla/?C=M;O=D' | grep -m1 -Po '\[DIR\].+?href="\K[0-9.]+'

26 :21:2018/07/26(木) 05:58:11.67 ID:BvZq73xc.net
>>25
ありがとうございます。
上手くいきました。

27 :デフォルトの名無しさん:2018/07/27(金) 11:44:05.25 ID:+pgu0NCD.net
この本って信用していいの?
https://image.yodobashi.com/product/100/000/009/002/686/263/100000009002686263_10204.jpg

28 :デフォルトの名無しさん:2018/07/27(金) 15:01:43.20 ID:GvW3yrkV.net
できるだけ可搬なUNIX時間<->ISO 8601形式時間の変換器ってどんなのがありますかね
PerlやRubyでいけるのは知っていますが,もうちょっとPOSIXに従ってるやり方が知りたいです

29 :デフォルトの名無しさん:2018/07/27(金) 15:34:58.00 ID:2MP7doyF.net
>>28
GNU date 限定の技だと思うのであまり嬉しくないかもしれないけど、以下のコマンドでいけるそうだ。

date --date "@1501201492" +"%Y%m%dT%H%M%SZ"

ちなみに出典は以下の記事です。

dateコマンドを使ってUnixTimeをISO8601形式へ変換する - Qiita
https://qiita.com/EDAPIYO/items/1bf163604006fd667988

30 :デフォルトの名無しさん:2018/07/27(金) 15:42:57.75 ID:2MP7doyF.net
>>28
小出しでスマン。こういうオプションもあるみたいなんだけど、man に記載されてないね……

$ date --date "@1501201492" --iso-8601=seconds
2017-07-28T09:24:52+0900

31 :デフォルトの名無しさん:2018/07/27(金) 16:35:57.77 ID:GvW3yrkV.net
>>29
ありがとうございます。
そうっすね……。dateコマンドでできるのは知っていますが,
これ,ものっすごく可搬性悪いんですよ。下手するとPerlでやったほうがマシなくらい。
なぜかというと,各種OSによってdateコマンドのUNIX時間<->ISO 8601形式時間変換のオプションが違うんです。
*BSDはdate -jだしGNU/Linuxでは書いてもらったdate --dateとかdate -dとか。
ある種のOSではdate -rもあるっぽいです……。

32 :デフォルトの名無しさん:2018/07/27(金) 20:53:36.25 ID:5PTGcdNX.net
>>31
BSD一般は date -r 数字 では?
最近の NetBSD だと date -d @数字 とも書けるから GNU と共通にできる。

33 :デフォルトの名無しさん:2018/07/31(火) 09:25:51.28 ID:nOeIYYJj.net
>>28
アルゴリズムとしては
秒数→日時変換と日時の足し算だけなんだから
自力で作れない?

34 :デフォルトの名無しさん:2018/07/31(火) 09:56:38.03 ID:2+1mdxB2.net
自力で作るならコマンド見分けたほうが楽だなw
どちらも同じオプションだけど意味が違うものを使って見分ける

35 :デフォルトの名無しさん:2018/07/31(火) 11:29:27.77 ID:3VAn/oI8.net
>>31
自分で言ってる様に Perl で書いちゃえば良いような…

36 :デフォルトの名無しさん:2018/07/31(火) 19:49:30.25 ID:M5dn2TAr.net
自分で足し算すると、サマータイム・うるう秒は、大丈夫なのか?

37 :デフォルトの名無しさん:2018/07/31(火) 20:11:42.59 ID:qTamNnJo.net
bashです。
aa.shからbb.shを呼び出した時、リダイレクトでログを残したいんだけどうまく行かない。
なにか間違っているでしょうか?
(aa.sh)
#!/bin/bash
b_shell="./bb.sh"
cmd="${b_shell} > ./bb.log"
${cmd}

(bb.sh)
#!/bin/bash
echo "hoge"

38 :デフォルトの名無しさん:2018/07/31(火) 20:15:49.79 ID:6LkeIiyI.net
何か間違ってるんだろ

39 :デフォルトの名無しさん:2018/07/31(火) 20:18:57.37 ID:qTamNnJo.net
どこを変更したら動くの?

40 :デフォルトの名無しさん:2018/07/31(火) 21:14:19.18 ID:1f/UcTRP.net
想定通りの動きをしてない行

41 :デフォルトの名無しさん:2018/07/31(火) 21:14:23.24 ID:MEUSBOQW.net
eval ${cmd}

42 :デフォルトの名無しさん:2018/07/31(火) 21:16:43.59 ID:MEUSBOQW.net
bb.sh で
echo "$*"
してみりゃ、理解できるだろう

43 :デフォルトの名無しさん:2018/07/31(火) 21:24:56.48 ID:qTamNnJo.net
>>41
サンクス!できたw

44 :デフォルトの名無しさん:2018/07/31(火) 21:27:46.12 ID:MZe54JNj.net
>>43
cmdに代入しなきゃダメなの?

45 :デフォルトの名無しさん:2018/07/31(火) 22:50:34.87 ID:nOeIYYJj.net
>>36
確かそういうのを考慮してないんじゃないの?

46 :デフォルトの名無しさん:2018/07/31(火) 22:58:00.65 ID:RprViRTw.net
>>45
うるう秒はUNIX Epochからの秒数には入ってないので無視して良い。
サマータイムやタイムゾーンの考慮は必要だしとても大変。
日本のタイムゾーン固定ならサマータイムも今のところ無視できるし簡単だけど、perlでも使ってライブラリに任せた方がいいと思う。

47 :デフォルトの名無しさん:2018/07/31(火) 23:52:51.22 ID:nOeIYYJj.net
どうでもいいが俺のID末尾がjってなんだこれ

48 :デフォルトの名無しさん:2018/08/01(水) 08:18:10.49 ID:4ZTIK2TR.net
>>47
この板のIDは8桁だから9桁目(いわゆる末尾)はないよ

49 :デフォルトの名無しさん:2018/08/01(水) 11:52:30.09 ID:cj6lI2dq.net
昨日発見した事なんだけど、シェルというよりは test コマンドの問題だけど、test -f で対象のファイルを指定しない時って0になるのな。
これはbash用に書かれたこんな記述の時の動作によって気づいた。

if [ ! -f $file ]; then
echo ファイルなし
exit 1
fi

これで file に何も代入されてないとか空文字列の時にファイルなしにならない。

なんだこの動作は?
testコマンドの仕様?たまたま俺の使ってたLinuxのtestコマンドのバグ?

まあbashなら[[ ]] 使っとけばエラーになるからそっち使っておけば良いんだけどね。

50 :デフォルトの名無しさん:2018/08/01(水) 12:14:18.97 ID:sWzzPqiz.net
testの仕様。
"" で囲まなかったのが悪い。

51 :デフォルトの名無しさん:2018/08/01(水) 12:31:44.03 ID:GtWBM62w.net
find [xxx] -type f | xargs grep [yyy]
をよく使うので
search xxx yyy みたいな alias にしたいんですけど
引数を途中に挟むのってどうすればいいんでしょうか

52 :デフォルトの名無しさん:2018/08/01(水) 12:34:38.30 ID:cj6lI2dq.net
>>50
そ、そうか。

しかしなんでまたそんな仕様になったんだ?

53 :デフォルトの名無しさん:2018/08/01(水) 12:43:22.75 ID:cj6lI2dq.net
>>51
bash の場合は function で定義するしかないようだよ。ググって探してみな。

54 :デフォルトの名無しさん:2018/08/01(水) 14:48:58.76 ID:GtWBM62w.net
>>53
functionでできました
ありがとうございました

55 :デフォルトの名無しさん:2018/08/01(水) 14:58:33.41 ID:RF/jFH0Y.net
>>52
ググって探してみなw
まあ、何らかの歴史的な背景だろうけど、明確に仕様に書いてあるのだから

56 :デフォルトの名無しさん:2018/08/01(水) 15:09:30.95 ID:Al4aQLEL.net
>>51は grep -r [yyy] [xxx] もしくは rgrep [yyy] [xxx] でいいんじゃねーの?
俺はagの方をよく使うが

57 :デフォルトの名無しさん:2018/08/01(水) 15:16:54.25 ID:Al4aQLEL.net
>>49
そもそも if [ ! -f $file ]; then だと $fileにスペース等が入っている時に
対応できないので "$file" と書くのは必須
更に言うなら set -u すればいい。$file が空のときはエラーになる

58 :デフォルトの名無しさん:2018/08/01(水) 15:25:42.75 ID:RF/jFH0Y.net
0 arguments:
Exit false (1).
1 argument:
Exit true (0) if $1 is not null; otherwise, exit false.
って、だけなんだけどな。2 arguments から本格的に判定に入るってとこかな。演算子が有効なものなのかも含めて

59 :デフォルトの名無しさん:2018/08/01(水) 15:35:17.39 ID:RF/jFH0Y.net
ああ、1 argumentの場合は空文字列でないかどうかっていうテストになるのか。そう思えば不思議でも何でもないな。使わないけどw
歴史的にそんなのがあっても不思議ではないな、実際どうなのか知らんけど

60 :デフォルトの名無しさん:2018/08/01(水) 23:58:14.58 ID:GZaAdjmn.net
# set variable identifying the chroot you work in (used in the prompt below)

if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi

これは、~/.bashrc だけど、

変数中に空白があっても良いように、たいてい変数は" " で囲む。
一方、固定値は囲まない

こういうように、シェルスクリプトには様々な引掛けあるから、危険!
Ruby などのプログラミング言語を勧める

マンガの「Linux シス管系女子3」に書いてあるけど、

「rm -f $file」と変数を" " で囲わなかったので、
「; rm -rf shared」というファイルがあったため、

rm -f ; rm -rf shared
と文がつながって、共有フォルダのファイルがすべて消えてしまったとかw

61 :デフォルトの名無しさん:2018/08/02(木) 00:06:27.75 ID:LJtboBWc.net
>>60
変数の値として ; が入ってても、文の区切り扱いにはならないので嘘くさい。
evalしてれば話は別だが。

62 :60:2018/08/02(木) 00:07:43.15 ID:yvP4ulwr.net
だから、ディレクトリパス・ユーザー名とか、
システムで使うものに、半角空白を入れたら、ダメ

シェルスクリプトを書いている奴が、変数を" " で囲んでいないと、バグるから

パスに半角空白を入れないようにって、
Mac ユーザーにも、よく言われる

Windows には、半角空白が入ったフォルダ名があるから、危険

63 :60:2018/08/02(木) 00:12:09.87 ID:yvP4ulwr.net
>60 は、
日経Linux で連載している、Piro の有名なマンガ、
「Linux シス管系女子3」に書いてある

このマンガを知らなかったら、もぐりw

64 :デフォルトの名無しさん:2018/08/02(木) 00:35:21.87 ID:4n+0BAwB.net
>>62
> Mac ユーザーにも、よく言われる
ほんとかよ。macOSの標準ディレクトリに普通にスペース入っているのあるけど
うそくさい、えせくさいw

65 :デフォルトの名無しさん:2018/08/02(木) 00:47:05.64 ID:aFy8Ou9l.net
実際に試してみればええんじゃないの

$ mkdir shared
$ touch '; rm -rf'
$ ls
'; rm -rf shared' shared/
$ for file in *;do rm -f $file; done
$ ls
'; rm -rf shared'

$ mkdir shared
$ ls
'; rm -rf shared' shared/
$ for file in *;do rm -f "$file"; done
rm: cannot remove 'shared': Is a directory
$ ls
shared/

66 :デフォルトの名無しさん:2018/08/02(木) 00:51:46.28 ID:dc2nLErP.net
>>60
>一方、固定値は囲まない
囲まなくていいのは囲まないだな。当然囲む必要があるのなら囲む " でなく ' ででも
囲まないで ¥ 使う物好きもいるかもしれないが
変数でも囲まないのは同じように囲まなくてもっていうところが原点だろうが、世の中そんな条件付けが許されるほどそう甘くはないっていう

その下の rm はイミフだな。>>61のほぼ言う通り。もちょっと「なんか」あるんじゃないの
そんなマンガ知らなかったらモグリよばわりされるならモグリで十分すぎるw

67 :60:2018/08/02(木) 01:12:36.09 ID:yvP4ulwr.net
日経Linux は、Ruby の作者・Matz と、マンガの「シス管系女子」の連載が有名

「シス管系女子」も、もう3冊目。
たいてい本屋の目立つ所に置いてある

システム管理者の必須本

68 :デフォルトの名無しさん:2018/08/02(木) 01:20:26.73 ID:AdBDijUE.net
坂本文さんの 「たのしいUNIX」なら知ってる

69 :デフォルトの名無しさん:2018/08/02(木) 01:47:58.08 ID:dc2nLErP.net
>>67
それ以上システム管理者とやらを貶めるなよw

70 :デフォルトの名無しさん:2018/08/02(木) 03:58:43.02 ID:tOum0Ceh.net
>>60
> 変数中に空白があっても良いように、たいてい変数は" " で囲む。
> 一方、固定値は囲まない

固定値だから囲まないんじゃなくて、
固定値かつ、空白が含まれてないから囲ってないだけ
固定値でも、空白が含まれていれば囲む

71 :デフォルトの名無しさん:2018/08/02(木) 04:04:23.88 ID:tOum0Ceh.net
>>62
> Windows には、半角空白が入ったフォルダ名があるから、危険

危険なんじゃなくて、半角空白が入ったフォルダがあるから
きちんと対応せざるを得なくなってバグが減る

下手に半角空白がないシステムばかり使っていたら
半角空白に対応するのを忘れてしまう。そっちのほうが危険。

そんなことよりもshellcheckでチェックするほうが常識
これを知らないやつはモーグリ

72 :デフォルトの名無しさん:2018/08/02(木) 04:16:33.42 ID:tOum0Ceh.net
>>60
> こういうように、シェルスクリプトには様々な引掛けあるから、危険!
> Ruby などのプログラミング言語を勧める

Rubyは外部コマンドを呼び出すのがすごく面倒くさい言語だが

参考 https://qiita.com/zakuroishikuro/items/3ab4476ff53f50a163be
> _人人人人人人_
> > めんどい <
>  ̄Y^Y^Y^Y^Y ̄


``を使えば、最小2文字の追加で呼び出すことができる
(正確にはputsしないと標準出力は表示されないからスペース入れて7文字)

Rubyでも結局同じ問題が起きる

# ruby −e Vdir=Wa bW; `ls −al #{dir}`V
ls: cannot access VaV: No such file or directory
ls: cannot access VbV: No such file or directory
(全角なのは書き込みエラーが出たから。もう面倒だから一律変換する)

回避策はいちいち言わなくていい、そんなのあるの知ってる。
Rubyでも様々な引掛けがあるという話。

73 :デフォルトの名無しさん:2018/08/02(木) 05:32:18.98 ID:5bB71pa/.net
Ruby使うくらいならPython使うわ。
でもここはシェルスクリプトのスレなんですよ。
しかも「ダブルクォートで囲む」という至極単純な対策でバグを回避できるんだから
他の言語を使う必要もないな。
ところでファイル名にダブルクォートが入っている場合があるので
ダブルクォートで囲む前にsed -e 's/"/\\&/g' とやる必要がある。

74 :デフォルトの名無しさん:2018/08/02(木) 06:11:19.56 ID:tOum0Ceh.net
>>73
> ところでファイル名にダブルクォートが入っている場合があるので

なんのことでしょう?
ファイル名にダブルクォートが入っていても
なんの問題もないですよね?

[test.sh]
#!/bin/sh
n="a'\"b"
file "$n"

$ echo test > a\'\"b
$ ./test.sh
a'"b: ASCII text

75 :デフォルトの名無しさん:2018/08/02(木) 11:35:22.97 ID:N9CdGDK2.net
bashでは0(真)か0以外(偽)となりますが、
Cスタイルのforループの条件判定のところにi==0( i>=0とするところを間違えてやってしまいました)
とやったら一回もループに入らなかったのですが、
Cスタイルのforループの中では0は偽なのでしょうか?

forループは下のループです。(chinachu-mirakurun-sleep scriptでスキップした番組の時に録画動作に入らない
ように改造したものです)

for ((i = ((${#IsSkipArray[@]} -1)) ; i>=0 ; i--)); do
if [ "${IsSkipArray[i]}" = "false" ]; then
(( RecTime = ${RecTimeMsec[i]} / 1000 ))
elif [ "${IsSkipArray[i]}" = "true" ]; then
:
fi
done

76 :デフォルトの名無しさん:2018/08/02(木) 11:45:13.93 ID:N9CdGDK2.net
ちょっと訂正します。
間違えたコードはi==0ではなく、条件式にi=0としていました。
だから毎回判定するごとにiに0が代入されてループに入れなかったんですが、
お聞きしたかったのは0が偽だからループに入れなかったのか?ということでした。
条件式に代入式を持ってくる時点で素人丸出しなんですが、どうかご容赦ください。

77 :デフォルトの名無しさん:2018/08/02(木) 12:23:00.77 ID:N9CdGDK2.net
ttps://mywiki.wooledge.org/ArithmeticExpression
ここのサイトを見たらfor (( ; ; ))もArithemetic Expression(算術式)で、
However, when evaluating an arithmetic expression, C language rules (0 is false, anything else is true) apply.

と書いてありました。Cの原則が適用されるようですね。自己解決したっぽいです。
どうもお騒がせしました。

78 :デフォルトの名無しさん:2018/08/03(金) 14:17:14.85 ID:htH9kPBS.net
>>72
エディタに、TeraPad を使っているけど、半角・全角文字へ変換ってある

こりゃ便利

79 :デフォルトの名無しさん:2018/08/03(金) 14:39:56.40 ID:nG7YYTv9.net
そんなんsakuraだってあるぞ

80 :デフォルトの名無しさん:2018/08/03(金) 14:58:08.23 ID:htH9kPBS.net
>ファイル名に、ダブルクォートが入っている

ファイル名に、! が入っていたら、どうなる?

テレビ番組の録画で「何々!」「何々!!」みたいな番組名が、ファイル名になる場合

81 :デフォルトの名無しさん:2018/08/03(金) 15:01:48.95 ID:TC+4ZTQW.net
>>80
感嘆符が特殊文字になるのってインタラクティブなときだけじゃね?

82 :デフォルトの名無しさん:2018/08/03(金) 17:12:49.75 ID:5qGFGeHO.net
>>80
こういうのって何言いたいのかわからんな。「問題」でも出してるのか??

83 :デフォルトの名無しさん:2018/08/03(金) 17:30:20.61 ID:TDL18VXl.net
>>80
それこそ、自分で何とかしろって感じだな

84 :デフォルトの名無しさん:2018/08/03(金) 18:47:15.20 ID:TC+4ZTQW.net
いやだから,感嘆符が特殊文字になるのはインタラクティブなときのみじゃないの?

85 :デフォルトの名無しさん:2018/08/03(金) 18:49:00.35 ID:BX8VumvQ.net
bashあんまり使わんからなあ

86 :デフォルトの名無しさん:2018/08/03(金) 20:02:10.32 ID:X+nM2ZWl.net
! を特別扱いするシェルを使っているかどうかの問題ではないかな。
OSやファイルシステムが特別扱いしているってこともあり得なくもないが。
UNIX系OSだと / しか特別扱いしてないよね。

87 :80:2018/08/03(金) 20:31:20.88 ID:htH9kPBS.net
Linux 板で、テレビ番組名に、!!! みたいなものが入っていて、
それがファイル名になる場合に、バグるって言ってたから

! は、エスケープも出来ないとか

88 :デフォルトの名無しさん:2018/08/03(金) 20:50:55.07 ID:TDL18VXl.net
他の環境ではNGの可能性があるということを考えると
怪しい文字は極力ファイル名に使わないようにしてる。
ある意味思考停止だけどw

CD-R焼く時、使える文字がフォーマットによりまちまちで、
ものすごい複雑だったことを思い出したわ。
ロミオとジョリエットwとか、ロックリッジとかあったなぁ。

89 :デフォルトの名無しさん:2018/08/03(金) 20:52:13.47 ID:u/asMYJG.net
余計な手間を省くのは正攻法だしいんじゃね

90 :デフォルトの名無しさん:2018/08/03(金) 21:25:09.26 ID:5qGFGeHO.net
>>87
だから、なにを言っているのかわからんてww

91 :デフォルトの名無しさん:2018/08/03(金) 21:36:10.72 ID:8YejLfKY.net
>>80
ばーかばーかさんへ

file "$1" が文字が原因で失敗する事例なんてありません
エスケープが必要な場合など存在しません。

わかったら黙って帰れ

92 :デフォルトの名無しさん:2018/08/03(金) 21:38:01.51 ID:5qGFGeHO.net
>>86
特殊文字って場合によりでしかないよな。特殊文字だから必ずバグる(?)なんてないし
シェルというか引数として受けたコマンドがって感じかなあ。bash自体がスクリプト中の引数を含めたコマンド文字列に特殊文字があっても何もしない/しないようにできるし

ID:htH9kPBSが言っているのは、ID:TC+4ZTQW が言っているコマンドラインでのヒストリ(参照)処理に引っかかる場合で、シェル「スクリプト」の問題ではないだろう

93 :デフォルトの名無しさん:2018/08/03(金) 22:13:10.45 ID:5qGFGeHO.net
スクリプトとして關係ないが、超シンプルにしての
$ ls '!'
ls: !: No such file or directory
まあ、そうだな
$ ls !
ls: !: No such file or directory
ほう
$ ls "!"
-bash: !: event not found
なんでやねんっ!ってとこではあるな

コマンドラインでも ! を打たなきゃファイル名がんなの入っていてもだし、! を含めたファイル名なんぞを打たなきゃでも ' でくくればいいんじゃね

94 :デフォルトの名無しさん:2018/08/03(金) 22:47:23.99 ID:TC+4ZTQW.net
だからすごく単純な話で
$ cat ./hstex.sh
#! /usr/bin/env bash

case $- in
(*H*)
echo enabled
;;
(*)
echo disabled
;;
esac
$ ./hstex.sh
disabled
こういうことでしょ?
つまりシェルスクリプトになってるときbashはヒストリ展開を既定で行わないから
エスケープを考える必要はないの。

95 :デフォルトの名無しさん:2018/08/03(金) 22:52:05.62 ID:8YejLfKY.net
はぁ、シェル「スクリプト」かどうかの問題じゃないんだってば

>>93はevent not foundってでなかったんで
考えるのメンドーなんでぐぐって
https://qiita.com/Qutjl/items/6e0056853c94011d245b のネタパクるけどさ

$ ruby -e "puts 'Hello, World!'"
-bash: !': event not found
はい、たしかにそうなりますね。

テキストエディタで「puts 'Hello, World!'」という内容のcode.txtファイルを作成する
$ cat code.txt
puts 'Hello, World!'

$ a=$(cat code.txt)
$ echo "$a"
puts 'Hello, World!'
変数 a に先程の文字列を入れました

$ ruby -e "$a"
Hello, World!
はい、エラーになりません。

これはシェルスクリプトが特殊なんじゃねーよ。
C言語で、ソースコードに"\n"と書いてある文字列をprintfした時と
\nという文字列が入っている変数をprintfした時の挙動と一緒だろうが

プログラミングの基礎やで。ソースコードをパースするときの処理かどうかの違い

96 :デフォルトの名無しさん:2018/08/03(金) 23:09:12.00 ID:5qGFGeHO.net
>>95
なにを言っているのかわからんww なんか面倒なことになってるなww

「スクリプト」の問題じゃないよ、ソースコードをパースとかよくわからん例えに見えるけど、単に「コマンドライン」でのパース(?)の問題。それもヒストリ展開だけの。>>94でID:TC+4ZTQWが再び言及しているような

ああ、bashのバージョンで
$ ls "!"
-bash: !: event not found
にならんことあるな。新しいのは。
$ ls "!!"
でもいいよ。今度は
$ ls !!
の挙動が変わるけど。まあ '' でくくればいいだけ&単に「コマンドライン」での問題

97 :デフォルトの名無しさん:2018/08/03(金) 23:09:28.23 ID:TC+4ZTQW.net
えぇ……
もしかして俺が間違ってるのかと不安になるほど自信満々な書き方だなw

98 :デフォルトの名無しさん:2018/08/03(金) 23:11:06.77 ID:5qGFGeHO.net
>>96
>'' でくくればいいだけ
うっかり ' を二つ並べた。シングルクォーテーション

99 :デフォルトの名無しさん:2018/08/03(金) 23:14:28.27 ID:5qGFGeHO.net
>>97
まあ...気にすんな。「ナニ」か違う(?)と思ったのだろう。よくわからんけど

100 :デフォルトの名無しさん:2018/08/03(金) 23:28:02.17 ID:h174pTLw.net
若者はヒストリー置換を知らないんだなあと感じいる俺はオッサン。

ヒストリー置換は対話的な入力にしか影響しないから、
スクリプトにするときは気にしなくていいよ。

101 :デフォルトの名無しさん:2018/08/04(土) 02:05:18.25 ID:j+kw9Zam.net
>>97
そりゃ間違ってるでしょ。

シェルスクリプトになってるときは〜とか言っちゃってる
インタラクティブシェル上でも変数を""で囲えば同じなのに

102 :デフォルトの名無しさん:2018/08/04(土) 03:08:34.02 ID:ddNokTrS.net
イミフ

103 :デフォルトの名無しさん:2018/08/04(土) 03:15:50.13 ID:ddNokTrS.net
初見イミフ、よく読んでもやっぱりイミフw
なんか問題点を勘違いしているでしょ
>>94のcaseからesacをコピペってみて実行してみ。たぶんそういう文脈での「シェルスクリプトになってるときは〜」だと思うぞ=間違ってはないと思うぞ

何を問題にしてんの?「インタラクティブシェル上でも変数を""で囲えば同じなのに」って

104 :デフォルトの名無しさん:2018/08/04(土) 03:24:02.15 ID:XmDLxyoB.net
なんでこんなに丁寧に教えてやらんと理解できんのか

>>62の話だろ
> だから、ディレクトリパス・ユーザー名とか、
> システムで使うものに、半角空白を入れたら、ダメ
>
> シェルスクリプトを書いている奴が、変数を" " で囲んでいないと、バグるから

ヒストリー展開はスクリプトだと既定で無効だが、
それ以前にファイル名にスペース入ってたりするから、
変数はダブルクォートでくくるのは当たり前なんだよ。
shellcheckすればデフォルトで指摘される項目

変数はダブルクォートでくくればいいって言ってんのに
今度は「ファイル名にダブルクォートが入っていたら?」
「ビックリマークが入っていたら?」とか言い出してんだろ

そ・れ・も「変数をダブルクォートでくくればいい」で終わりつってんだろ

ダブルクォートでくくればヒストリー展開が有効であっても
ファイル名に!が含まれてようが関係ない

105 :デフォルトの名無しさん:2018/08/04(土) 03:25:51.10 ID:XmDLxyoB.net
>>103
話の流れをよめ。

変数に入っている文字に
空白やダブルクォートやビックリマークが
入っている場合の話だ

変数をダブルクォートで囲めば全部解決
エスケープなんぞいらん

106 :デフォルトの名無しさん:2018/08/04(土) 03:26:21.86 ID:ddNokTrS.net
違うよ。>>80の話だけだぞ?

107 :デフォルトの名無しさん:2018/08/04(土) 03:28:41.06 ID:ddNokTrS.net
! と " は別の問題
話の流れをよめ...ってw だめだこりゃ

108 :デフォルトの名無しさん:2018/08/04(土) 03:57:51.51 ID:ZE1/UEds.net
それは>>73からの続きだろ

> ところでファイル名にダブルクォートが入っている場合があるので
> ダブルクォートで囲む前にsed -e 's/"/\\&/g' とやる必要がある。

これも囲む必要はない

ファイル名を文字列で直接書くならそもそも\でエスケープすればいいだけ
だからこれは変数の話であることは明白

その話の続きで>>80

> >ファイル名に、ダブルクォートが入っている
>
> ファイル名に、! が入っていたら、どうなる?

という流れだ

109 :デフォルトの名無しさん:2018/08/04(土) 04:07:16.79 ID:ddNokTrS.net
いや、だから、その話の流れはあるかもしれないが、途中からの話の流れは ! が特殊文字になるのはっていうだけの話だぞ?
その>>73>>74で終わってるし、なんかまたわけからんのが出てきたが ! がっていうのはそういえばっていうだけの

なんかあなたが強調しているのはそんなのわかっている上でのだぞ?なんでそんなとこに拘っているの??

110 :デフォルトの名無しさん:2018/08/04(土) 07:02:26.79 ID:fp3S0oAr.net
ヒストリ置換知らないのはゆとり

111 :デフォルトの名無しさん:2018/08/04(土) 08:42:45.49 ID:Zm4mz9Pa.net
俺はゆとり世代より下だがずっと指摘してたぞ(>>81
そういう決め付けやめろ

112 :デフォルトの名無しさん:2018/08/04(土) 15:19:02.62 ID:EGr8asH9.net
やはりIPも入れたほうがいいかね

113 :デフォルトの名無しさん:2018/08/04(土) 15:19:27.32 ID:EGr8asH9.net
IPじゃねーやワッチョイ

114 :デフォルトの名無しさん:2018/08/06(月) 08:36:00.23 ID:/d0+B2Ty.net
ファイルやディレクトリを引数に取り、その許可属性を返すコマンドってありますか。
少なくともPOSIX Utilityにはないと分かっています。
期待する動作はそのコマンドの名前をownとして
$ own /some/file
-rwxrwxr-x
というような具合です。

115 :デフォルトの名無しさん:2018/08/06(月) 09:07:09.56 ID:BzDkzOUM.net
lsすりゃ済むのにunix的なセンスでそんなコマンドは作らないよ

116 :デフォルトの名無しさん:2018/08/06(月) 09:23:02.61 ID:Q3wSzLhg.net
ls
それで満足できないなら作れ、さすがにそれくらいできるだろ

117 :デフォルトの名無しさん:2018/08/06(月) 09:25:30.08 ID:RuHjlTsU.net
>>114
stat -c '%A' /some/file

118 :デフォルトの名無しさん:2018/08/06(月) 09:26:53.13 ID:4JbBAPy3.net
>>114
lsまたは stat の出力の一部を自分で切り出せば良いのでは?
なんだったらそれだけをするシェルスクリプトまたはシェル関数作れば良い。

119 :デフォルトの名無しさん:2018/08/06(月) 09:29:30.92 ID:4JbBAPy3.net
うはっw NGワードで引っ掛かってあれこれ変えてる内に回答が二つ書かれてたw

120 :デフォルトの名無しさん:2018/08/06(月) 09:43:00.91 ID:9v8Yooys.net
>>117でわかるのに、unix的なセンスとか、ワロえる。
センスないのはむしろ。ぷぷぷw

121 :デフォルトの名無しさん:2018/08/06(月) 10:15:49.41 ID:BzDkzOUM.net
なんか嘲笑してるつもり?

122 :デフォルトの名無しさん:2018/08/06(月) 11:45:03.11 ID:jTWGCXc0.net
>>115,116,118
わたしも最初はlsの結果をcutするシェルスクにしようと考えたけど
>>117
GNUならそれで、BSDのstatなら stat -f "%Sp" /some/file な感じか

POSIXの縛りならlsとcutかもしれんけど

123 :デフォルトの名無しさん:2018/08/06(月) 15:01:42.52 ID:/d0+B2Ty.net
stat -c '%A'
↑すばらしいです。ありがとうございました。

124 :デフォルトの名無しさん:2018/08/06(月) 20:56:55.63 ID:Z/jXU7Rj.net
>>960>>970>>980
次スレ立てるならワッチョイで頼む

125 :デフォルトの名無しさん:2018/08/10(金) 03:53:11.11 ID:5eVCbRBd.net
OpenWrtでこんなの見つけた。何処がオリジナルだろう?
物自体はバイナリだけどシェルスクリプトと親和性が高い(?)
JSONのパースと生成の方法のアイデアとして

https://wiki.openwrt.org/doc/devel/packages/jshn
Library for parsing and generating JSON from shell scripts

こんなふうに出力される

$ jshn -r '{"a":1, "b":2, "c": [1,2,3], "d": {"A":1}}'
json_init;
json_add_int 'a' 1;
json_add_int 'b' 2;
json_add_array 'c';
json_add_int '0' 1;
json_add_int '1' 2;
json_add_int '2' 3;
json_close_array;
json_add_object 'd';
json_add_int 'A' 1;
json_close_object;

126 :デフォルトの名無しさん:2018/08/10(金) 08:46:11.76 ID:bLDrGgRY.net
>>125
jq(1)が定番では?

127 :デフォルトの名無しさん:2018/08/10(金) 11:19:27.53 ID:zsXdw2zN.net
>>126
あ、はい。ググればわかる。
なんか変な人がjqはクソだって言ってる
で頑張ってオレオレで変なの実装してるが、
すでにあるよって話

128 :デフォルトの名無しさん:2018/08/10(金) 11:44:23.91 ID:r84RRSaO.net
>>127
そのおかしな人の言うことを解釈すると
そのコマンドはオプション引数でデータを受け渡すのであまりよくないのでは?
Unix哲学としてはデータは標準入力から渡すべき。

129 :デフォルトの名無しさん:2018/08/10(金) 12:48:42.64 ID:vqUG5YbC.net
おかしな人の言い分だな、確かにw

130 :デフォルトの名無しさん:2018/08/10(金) 12:52:37.04 ID:EBuB6o8O.net
パイプで繋いで使えるようにってことかな

131 :デフォルトの名無しさん:2018/08/10(金) 13:42:12.09 ID:ndPpyRQZ.net
おかしな人がケチつけてたのって何年も前じゃん

132 :デフォルトの名無しさん:2018/08/10(金) 14:53:48.86 ID:19uTC1v8.net
ああ、某原理主義者のことか

133 :デフォルトの名無しさん:2018/08/10(金) 14:57:29.03 ID:xNR7R3k1.net
ポジックス

134 :デフォルトの名無しさん:2018/08/10(金) 15:54:52.38 ID:ndPpyRQZ.net
でもあの人の言うことなんて聞いてらんないよね。こっちは宗教で食ってるわけじゃないんだからさ。
作って見せたツールだって痒いところに手が届かない部分は
「そんなのはそもそもこうこうであるべきで必要ない」みたいな感じでほっぽってるし
作ってマウント取って射精後スッキリになったら全くメンテなんてしないし。「各人個別で改修・メンテしろ」ってことなんだろうけど、
こんなの個人の便利ツール止まりで世界中の不特定多数の共有便利ツール・知識にはなり得ないよ。

135 :デフォルトの名無しさん:2018/08/10(金) 15:59:32.13 ID:xNR7R3k1.net
何やってる人か知らんが、それはそれでいんじゃないの?
頼まれずに作ったツールの公開なんてオナニーそのものやろ

136 :デフォルトの名無しさん:2018/08/10(金) 17:01:03.73 ID:r84RRSaO.net
誰かが例の記事のはてブで言ってたけど,ああいう人も必要だとは思う。
というか正直俺はプログラマじゃない(つまりコーディングで飯食ってるわけじゃない)ので,
ああいう考え方にはすごく興味があるし,実際研究室の管理シェルスクリプトをPOSIX準拠で書き直したりもしてる。
しかし繰り返すがプログラマにとっては邪魔な存在なんだろうなとは感じる。
というか言い方がキツすぎる。

137 :デフォルトの名無しさん:2018/08/10(金) 17:59:17.69 ID:q2LOavXt.net
だが、それがいい。

138 :デフォルトの名無しさん:2018/08/12(日) 14:51:04.97 ID:EQS0DV6K.net
#!/bin/bash
for i in {0..5}; do
 n=`date +%Y-%m-%d_%H '-d ${i} hour ago'`
 echo $n
done
ループで時間を1時間ずつ過去にして表示したいんだけど実行すると
 date: ` ${i} hour ago' は無効な日付です
て表示されます。
助け船おねがいします

139 :デフォルトの名無しさん:2018/08/12(日) 15:45:28.66 ID:CtXb4bgk.net
>>138
シングルクオートだと変数が、展開されない気がすダブルクォートにしてみて

140 :デフォルトの名無しさん:2018/08/12(日) 17:45:18.75 ID:EQS0DV6K.net
>>139
n=`date +%Y-%m-%d_%H "-d ${i} hour ago"`
ありがとう、動きましたw

141 :デフォルトの名無しさん:2018/08/13(月) 00:38:00.83 ID:z6+TJcGX.net
"-d ${i} hour ago" の部分が -d "${i} hour ago" ではないのに何故大丈夫なのかと思ったが、
短いオプションだからパラメータと繋がってても大丈夫ってことだったんだな。

142 :デフォルトの名無しさん:2018/08/14(火) 19:59:14.84 ID:0dSYKDxo.net
上のやり取りをみてふと思いたって実験してみると
GNU dateではフォーマットにCSIとかに代表されるANSI制御綴りを指定できるけど
BSD dateでは無理だな。
POSIXではこの二つのどちらが正しい実装なのかはよく分からんが
個人的な意見としてはBSD dateのほうが堅牢で,GNU dateのほうが柔軟だとは思う。まあ当然すぎる事実だけどw

143 :デフォルトの名無しさん:2018/08/15(水) 02:35:15.09 ID:sxh1cciH.net
BSD date の仕様が分からないけど、標準出力が端末とは限らないし
指定そのまま出すほうが正しいんじゃないかな

144 :デフォルトの名無しさん:2018/08/15(水) 13:56:33.60 ID:/R99sNfj.net
標準出力がなんのかんけーがあんのー?

145 :デフォルトの名無しさん:2018/08/15(水) 16:29:17.30 ID:fSWxnCwv.net
かんけーし

146 :デフォルトの名無しさん:2018/08/17(金) 03:06:26.97 ID:DWhhxT1h.net
単純な文字列置換ってどうしたら良いですかね?
sedつかうとメタ文字の置換で困るんです

147 :デフォルトの名無しさん:2018/08/17(金) 03:42:44.91 ID:l9m154d6.net
その辺りが楽なperlでいいんじゃない?
シェルスクリプトから使っちゃいけないというわけじゃないし

148 :デフォルトの名無しさん:2018/08/17(金) 04:16:11.31 ID:DWhhxT1h.net
>>147
さーせん、こんな状態なんです。

# perl
-ash: perl: not found

149 :デフォルトの名無しさん:2018/08/17(金) 04:55:42.82 ID:xP9ZimWn.net
awk

150 :デフォルトの名無しさん:2018/08/17(金) 04:56:29.20 ID:DWhhxT1h.net
awkに正規表現じゃない文字列置換命令ってありましたっけ?

151 :デフォルトの名無しさん:2018/08/17(金) 06:24:27.95 ID:/a+SCakG.net
Ruby が簡単

152 :デフォルトの名無しさん:2018/08/17(金) 06:38:46.91 ID:eWaVkn5S.net
>>151
perlが無いならrubyも無いでしょ

153 :デフォルトの名無しさん:2018/08/17(金) 07:03:28.31 ID:DWhhxT1h.net
はい、rubyもないし、pythonもなし、nodeもないです

154 :デフォルトの名無しさん:2018/08/17(金) 08:18:50.56 ID:/a+SCakG.net
Ruby をインストールすれば?

漏れは、WSL で、Rubyを入れているけど

155 :デフォルトの名無しさん:2018/08/17(金) 08:24:08.77 ID:RTbKyx/W.net
>>154
残り容量600KBを切ってるので入りません
Rubyは依存関係も含めると圧縮された
パッケージサイズで1MB以上あります。

156 :デフォルトの名無しさん:2018/08/17(金) 08:34:23.82 ID:vhwq6spf.net
viは?

157 :デフォルトの名無しさん:2018/08/17(金) 08:36:24.83 ID:RTbKyx/W.net
手動で置換は嫌です

158 :デフォルトの名無しさん:2018/08/17(金) 08:40:03.28 ID:vhwq6spf.net
viはスクリプト組めるでしょ

159 :デフォルトの名無しさん:2018/08/17(金) 08:44:27.28 ID:TmUZ5Zjz.net
パターン文字列をsedで置換しちゃうとか(GNU sed の場合)

$ pattern='foo[1]'
$ sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
foo[2]

160 :デフォルトの名無しさん:2018/08/17(金) 08:49:02.25 ID:vhwq6spf.net
脳みそが解読を拒否してる

161 :デフォルトの名無しさん:2018/08/17(金) 08:53:02.98 ID:xP9ZimWn.net
https://paste2.org/DsfvJPn9
(こういうのをすんなりレスで書けないのはイラつく)

変なこだわりは知らん。細かくはテストはしてないけどまあ動くんじゃね

162 :デフォルトの名無しさん:2018/08/17(金) 08:56:35.86 ID:RTbKyx/W.net
>>158
スクリプトの実行はできましたが、 %s/〜/〜/g
だと〜に/が入っていた時に困ります。
〜には何が入るかわかりません。

あとviは標準入力から読み込めませんでした
できれば標準入力から読み込みんで標準出力に出力したいです。

ちなみにviのバージョンです

# vi -H
These features are available:
Pattern searches with / and ?
Last command repeat with .
Line marking with 'x
Named buffers with "x
Some colon mode commands with :
Settable options with ":set"
Signal catching- ^C
Job suspend and resume with ^Z
Adapt to window re-sizes
BusyBox v1.28.3 () multi-call binary.

Usage: vi [OPTIONS] [FILE]...

Edit FILE

-c CMD Initial command to run ($EXINIT also available)
-R Read-only
-H List available features

163 :デフォルトの名無しさん:2018/08/17(金) 09:00:22.48 ID:RTbKyx/W.net
>>159
GNU sedじゃないからだめなんでしょうね

# pattern='foo[1]'
# sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
-ash: syntax error: unexpected redirection

ちなみにsedの--versionと--helpです。

# sed --version
This is not GNU sed version 4.0


# sed --help
BusyBox v1.28.3 () multi-call binary.

Usage: sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-i[SFX]] [-nrE] CMD [FILE]...

-e CMD Add CMD to sed commands to be executed
-f FILE Add FILE contents to sed commands to be executed
-i[SFX] Edit files in-place (otherwise sends to stdout)
Optionally back files up, appending SFX
-n Suppress automatic printing of pattern space
-r,-E Use extended regex syntax

If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).

164 :デフォルトの名無しさん:2018/08/17(金) 09:16:35.01 ID:RTbKyx/W.net
>>161
ありがとうございます。動きました。
さくっとはできないもんなんですね。

165 :デフォルトの名無しさん:2018/08/17(金) 09:16:49.96 ID:TmUZ5Zjz.net
>>163
ああ、bash じゃなくて ash だから here string("<<<") が使えないのね…

# echo 'foo[1]' | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"

こんな感じかな。

166 :デフォルトの名無しさん:2018/08/17(金) 09:33:56.45 ID:xP9ZimWn.net
>>164
-v のはawk内で展開されての右辺を文字列リテラルとして処理されてえのっぽい。ので、バックスラッシュが鬼門のよう
https://paste2.org/IhEG146f

167 :デフォルトの名無しさん:2018/08/17(金) 09:48:06.80 ID:RTbKyx/W.net
>>166
なんかプラスが入った時おかしいっすね

GNU sed
$ pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]

$ pattern='a+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]+

busybox sed
# pattern='+'
# echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
sed: bad regex '\+': Repetition not preceded by valid expression

168 :デフォルトの名無しさん:2018/08/17(金) 09:57:27.72 ID:TmUZ5Zjz.net
>>167
う〜ん、ash でやってみたけど、1番目、2番目は問題ないなぁ
Busybox の sed は -r オプションがないんじゃなかったかな

169 :デフォルトの名無しさん:2018/08/17(金) 09:58:49.05 ID:TmUZ5Zjz.net
あ、ごめん勘違いしてた。ちょっと考えてみる

170 :デフォルトの名無しさん:2018/08/17(金) 10:03:14.53 ID:RTbKyx/W.net
そう。何が問題なのかよくわからないw

171 :デフォルトの名無しさん:2018/08/17(金) 10:13:01.82 ID:TmUZ5Zjz.net
あれ?でもさ、

pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]

入力が '+' でパターン文字列も '+' だから foo[2] に置換されるのは正しいんじゃないかな?

でもまぁ、GNU sed で -r オプション付けると `+` 記号がメタキャラクタになるから、付けない場合は
`+` を考慮する必要はなかったのね…

$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*^.$/\]|\[|\])/\\\1/g')/foo[2]/g"

こっちの方が良いみたい。

172 :デフォルトの名無しさん:2018/08/17(金) 10:13:20.76 ID:5I+JCiH1.net
どうかな
https://ideone.com/PaP663

173 :デフォルトの名無しさん:2018/08/17(金) 10:18:32.56 ID:RTbKyx/W.net
>>171
ごめん、紛らわしかった。
そっちは正しいパターン

おかしいのは「a+」の時

174 :デフォルトの名無しさん:2018/08/17(金) 10:20:29.64 ID:RTbKyx/W.net
だから要するに + はエスケープしたらダメってことなのか?

単純な文字列置換って正規表現置換よりも簡単な処理なのに
どれも面倒くさいなぁw

175 :デフォルトの名無しさん:2018/08/17(金) 10:33:33.58 ID:hKcJGgnp.net
ashの日本語manページはないのかなと思って検索した時に出てきた画面。
https://i.imgur.com/xzEhcAc.png

176 :デフォルトの名無しさん:2018/08/17(金) 10:37:43.83 ID:RTbKyx/W.net
>>175
いや、そんなの見せられましてもねぇ

https://www.google.co.jp/search?q=ash+love&tbm=isch

177 :デフォルトの名無しさん:2018/08/17(金) 10:41:51.16 ID:hKcJGgnp.net
>>176
カラフルな検索結果だがこれと言って役に立たないという共通点があるな・・・

178 :デフォルトの名無しさん:2018/08/17(金) 10:51:57.16 ID:RTbKyx/W.net
>>177
ニヤニヤできるぞ

今更だがluaなら入ってたで

179 :デフォルトの名無しさん:2018/08/17(金) 11:32:47.25 ID:TmUZ5Zjz.net
grep にある -F オプションと同等のオプションが sed にも
欲しいところではあるなぁ。生まれは同じなのに sed には無い
のは何故…(実はあったりして)

180 :デフォルトの名無しさん:2018/08/17(金) 18:50:11.51 ID:D/YAmHXf.net
fsedみたいなのを作ってる人ならしってる

181 :デフォルトの名無しさん:2018/08/18(土) 17:22:09.36 ID:rQWtSS3z.net
Googleのシェルスクリプトに関するコーディング規約で
「そう〔訳注: 連続したパイプ節が二つ以下〕でない場合は一行につき一つのパイプ節を含むようにする。その際,二番目以降のパイプ節は,2文字分の欧文空白による字下げを行なう。」
とあるんだが[1],ここの例示が
command1 \
 | command2 \
 | command3 \
 | command4
となっている。
普通(といってもパイプをこのように多用しかつ改行しまくっている例はほとんど見たことがないのだが)https://github.com/ShellShoccar-jpn/kotoriotoko/blob/master/BIN/twtl.sh#L297
↑こことかでは
command1 |
command2 |
command3 |
command4
という書き方になっている。
俺はこっちの書式のほうが見慣れているので,自分のシェルスクリプトもこういう書き方でやっているのだが,みなさんはどういう書き方がいいとかあるだろうか。あるいはGoogleとは別のところが発表してるシェルスクリプトのコーディング規約とかないだろうか。

182 :デフォルトの名無しさん:2018/08/18(土) 17:22:24.47 ID:rQWtSS3z.net
一応俺の意見: 後者の利点としては,バックスラッシュが不要なこととコマンドが行頭に来て流れを掴みやすいということがある。
加えて簡易的なデバッグするときに,前者は
command1 \
 | command2 \
 | cat
# | command3 \
# | command4
などとするのに対して 後者は
command1 |
command2 |
cat
# command3 |
# command4
このように「新しい行を挿入してcatを入力」という単純な動作ができるので,例えばVimやEmacsなどマクロが作れるエディタなどでのデバッグ用の編集に有用というのもある。
実際俺はシェルスクリプトに関してはIDEを使わずVimで開発していて,この類のマクロを作成して便利に使っている。
長文すまん
[1]: http://google.github.io/styleguide/shell.xml#Pipelines

183 :デフォルトの名無しさん:2018/08/18(土) 18:05:23.17 ID:5BnyFmRJ.net
簡易的なデバッグするときに前者は
command1 \
 | command2 \
# | command3 \
# | command4
などとするのに対して 後者は
command1 |
command2 |
# command3 |
# command4
のように行頭に#をいれるだけではSyntax errorになるから前者の方がデバッグなど編集に有用とも言える

個人的には大差ないと思う

184 :デフォルトの名無しさん:2018/08/18(土) 18:29:20.16 ID:LW/iu6SG.net
末尾にバックスラッシュを入れることで次行を見なくても明確にコマンドが続くことがわかるから前者を支持する

185 :デフォルトの名無しさん:2018/08/18(土) 18:38:12.95 ID:Bu4pj5O8.net
一長一短やな
使い分けか

186 :デフォルトの名無しさん:2018/08/18(土) 19:19:56.79 ID:rQWtSS3z.net
>>184
でも>>183のように,コメントアウトすると
「末尾にバックスラッシュがあっても後ろにコマンドがない(実行されない)」
という状況がありえる以上,
末尾のバックスラッシュの有無を過信するのはよくないと思う。
もちろん気をつければいい話だが。

なんというか,ハンガリアン記法の間違って流布された方法に近しい危険性がある
(変数i_VARを見て,本当はfloat型なのにint型だと思い込む)

187 :デフォルトの名無しさん:2018/08/18(土) 19:21:44.26 ID:rQWtSS3z.net
ていうか少なくとも二人くらいは
後者の方式に賛同してるのか。

Googleもそっちを推奨してるし,俺も手癖を直すべきなのかな。

188 :デフォルトの名無しさん:2018/08/18(土) 20:18:01.73 ID:pAmB63kN.net
>>184
それ、末尾にパイプ記号あるから〜
と同じことじゃね?
個人的には見栄え的には前者の方を採用したいが余計な継続記号が不要な後者で書いてる

189 :デフォルトの名無しさん:2018/08/18(土) 21:09:33.95 ID:bNUWoVQ1.net
パイプ記号が重要だから頭にもってきたいかなあ

190 :デフォルトの名無しさん:2018/08/19(日) 00:41:34.89 ID:6q4oK8R8.net
scsh 使え https://scsh.net/about/what.html

191 :デフォルトの名無しさん:2018/08/19(日) 01:23:37.19 ID:A4xH6fb7.net
バックスラッシュで行継続(改行)って多くの言語で採用されているから
多くの人はパイプ先頭、バックスラッシュ行末じゃないかな?

192 :デフォルトの名無しさん:2018/08/19(日) 02:52:07.69 ID:YqoTvka6.net
俺は1行か2行くらいなら後者だな。
何行もずらずら並べるなら中括弧で囲んでパイプ記号を先頭に持ってくるかも。
行末にバックスラッシュを置いて行継続はあまり美しくないと思うのでなるべく書きたくない。

>>191
構文的に行末で文(言語によっては式)が完結できていれば行末を文の終わりとみなし
そうでなければ次の行に継続、というのもshそのものをはじめpython, JavaScriptなど多くの言語で採用されているよ。
(pythonはshと同じく行末バックスラッシュで継続もできるが)
更にRubyは行の終わりで完結できるように見えても次の行の先頭を見てどうするか決めていたりする。

193 :デフォルトの名無しさん:2018/08/19(日) 04:00:58.03 ID:O9LemqF2.net
>>190
無知ながら初耳だった。
scshの説明をざっと読んだけど、今回の問題の解決になる?
むしろ「括弧の前で改行するかいなか」みたいな新たな規約が生まれそうじゃない?

194 :デフォルトの名無しさん:2018/08/19(日) 16:16:41.68 ID:L67BZdE+.net
shに限らず末尾に演算子を置く

195 :デフォルトの名無しさん:2018/08/19(日) 19:55:46.26 ID:O9LemqF2.net
シェルスクリプトの話題からちょっと外れるんだけど
$ somecmd --help
としたときの手引きって標準エラー出力に出力すべき?
GNU Coreutilsでは基本的に標準出力なんだけど……。

196 :デフォルトの名無しさん:2018/08/19(日) 20:37:51.45 ID:6q4oK8R8.net
stderr だとページャにつなげたい時に

$ somecmd --help 2>&1 | $PAGER

とかするのが面倒。でも zsh とかだとエイリアスで
どうにかできるんだっけ?

197 :デフォルトの名無しさん:2018/08/19(日) 22:24:00.37 ID:teBDlI3J.net
helpはエラーではないから標準出力でいいのでは

198 :デフォルトの名無しさん:2018/08/19(日) 23:44:45.76 ID:O9LemqF2.net
>>196
$ somecmd --help |& $PAGER
↑これでいいんでは

199 :デフォルトの名無しさん:2018/08/20(月) 00:18:14.36 ID:anhi4Zz/.net
>>198
dクス、"|&" が使えるのは bash と zsh だけかな

200 :デフォルトの名無しさん:2018/08/20(月) 00:25:54.45 ID:V9a8ZDkH.net
>>199
csh(系)も使える

201 :デフォルトの名無しさん:2018/08/20(月) 01:00:54.38 ID:Za3ebEAA.net
>>199
あ ごめん。それPOSIX互換じゃねえわ
知らんまにbash主義に染まってた 反省。

202 :デフォルトの名無しさん:2018/08/20(月) 03:03:17.26 ID:miyFFq/v.net
csh由来のものをbashismというのはどうかと……

203 :デフォルトの名無しさん:2018/08/20(月) 03:04:00.88 ID:O40ujeeV.net
つくづく宗教戦争じみてるなこの文化は

204 :デフォルトの名無しさん:2018/08/20(月) 03:32:09.94 ID:OmELABLW.net
まあ>>201はそんな大層な意味で言ってるわけではないだろ。単にbashしか使ってない使い込んでるってだけの意味だろう。無知でしたという

205 :デフォルトの名無しさん:2018/08/20(月) 03:46:49.27 ID:GIvuOFoC.net
--helpで思い出したけど、あれって書き方ってあるの?

usageの書き方とかオプションの書き方とか
引数は大文字にするの?とか [ファイル]... とかの[] とか ... の使い方とか
あるようで、バラバラな気もしている

206 :デフォルトの名無しさん:2018/08/20(月) 04:15:12.27 ID:Za3ebEAA.net
>>205
とりあえず 天下のPOSIX様はこうおっしゃってる
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_01
ので 俺はそれに従ってる。だいたいのmanページやGNUユーティリティの--help出力もこれに準ずる形だと思うよ

207 :デフォルトの名無しさん:2018/08/21(火) 20:17:11.95 ID:ExpCY3/V.net
>>206
多分>>205はそういうのを求めてたんじゃないな

208 :デフォルトの名無しさん:2018/08/23(木) 05:30:33.48 ID:L+hDtmKU.net
シェルスクリプトの言語にJavaScriptってアリだと思う?
#! /usr/local/bin/js24
みたいなシェバンでさ。

209 :デフォルトの名無しさん:2018/08/23(木) 05:39:54.64 ID:ncZgpeak.net
シェルスクリプトっていうのは
シェルとして実用に堪えるものじゃないとダメ
名前の通り

コマンドを呼び出すのに、いちいちsystem関数を
使うとかいうのは、シェルとして使えない

ls だけでlsコマンドを実行できるようにしたら
シェルスクリプトと認めてもいいが

210 :デフォルトの名無しさん:2018/08/23(木) 07:32:38.64 ID:d2Ifs7B7.net
>>208
ナシだと思う

211 :デフォルトの名無しさん:2018/08/23(木) 07:38:44.84 ID:1n1CeI2l.net
シェルスクリプトというより、他のインタプリタ言語と同じようにコマンド(内容)記述用としてあっていいって話だろう

212 :デフォルトの名無しさん:2018/08/23(木) 08:56:23.64 ID:AY9SoYfw.net
普通にやるだろ。
#!/usr/bin/awk -f
とかだってたまにはやるぞ。
「#」がコメント扱いになる言語なら
気にせずどんどんやればいい。

そもそもshebangはUNIX上で「スクリプト言語」を呼び出す時の記法であって
現代UNIXではシェルは一切関与しないカーネルの機能だから
「シェルスクリプト」なんかじゃない。
(つまり実はスレ違い)
なお昔のSystem-V系UNIXにはカーネルにこの機能がなくexec(2)が失敗するので、
その場合にはシェルが代行してスクリプトのインタープリターをよびだしていた。
そういうUNIXはほぼ滅びたけどシェル側にはまだこの代行機能が残っていたりする。

シェルは関与しないのにshell-bangなんて変な名前だけど、
この言い方自体比較的新しくて、実装されてからだいぶ長い間名前がなかったんだよ。
普通はカーネルが処理しててシェルは関係ないってことを
知らない奴がつけた名前じゃないかと前から疑問に思ってる。

213 :デフォルトの名無しさん:2018/08/23(木) 09:39:55.05 ID:ncZgpeak.net
>>212

> 普通にやるだろ。
> #!/usr/bin/awk -f
> とかだってたまにはやるぞ。

落ち着け

それはスクリプト言語だ
"シェル"スクリプト言語ではない

214 :デフォルトの名無しさん:2018/08/23(木) 09:45:44.18 ID:ncZgpeak.net
> シェルは関与しないのにshell-bangなんて変な名前だけど、
shebang を shell-bangの略だと主張する人は少数派だよ

215 :デフォルトの名無しさん:2018/08/23(木) 12:56:18.33 ID:/qY100we.net
>>208
それはシェルスクリプトじゃなく、
JavaScriptスクリプトだ

216 :デフォルトの名無しさん:2018/08/23(木) 12:59:05.57 ID:XdhcXIaw.net
スクリプトスクリプトはもにょる

217 :デフォルトの名無しさん:2018/08/23(木) 13:18:49.52 ID:cYcyOMDR.net
スクリプト
スクリプトスクリプト
スクリプトスクリプトスクリプト
スクリプトスクリプトスクリプトスクリプト 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)


218 :デフォルトの名無しさん:2018/08/23(木) 14:49:29.73 ID:AY9SoYfw.net
>>213
落ち着け。
もうちょっと先まで読めば同じことが書いてあるぞw

219 :デフォルトの名無しさん:2018/08/23(木) 14:59:38.25 ID:AY9SoYfw.net
>>214
shebang の e って何から来てるの?
俺は shell から来てるんだと思ってた。

なお shabang という書き方も少数派だが使われてはいるみたい。
実際 sharp-bang なわけで、こっちなら分かる。
shabang ならシバンじゃなくて、シャバンだよな。
シャバ〜ン。

220 :デフォルトの名無しさん:2018/08/23(木) 15:01:24.58 ID:2Dv2zxdP.net
男なんだろ?

221 :デフォルトの名無しさん:2018/08/23(木) 15:09:53.60 ID:Jv3FRRxD.net
違うよ〜☆

222 :デフォルトの名無しさん:2018/08/23(木) 15:11:13.70 ID:e+w5jH4y.net
若さ、若さってなんだ

223 :デフォルトの名無しさん:2018/08/23(木) 15:13:13.81 ID:eJiCstIz.net
なんというか、ヒーローの名前のようだ。

224 :デフォルトの名無しさん:2018/08/23(木) 15:42:31.50 ID:bMgbpjF3.net
それはギャバン

225 :デフォルトの名無しさん:2018/08/23(木) 16:36:01.71 ID:YQoAQycd.net
さぁ、盛り上がって参りました

226 :デフォルトの名無しさん:2018/08/23(木) 16:45:35.96 ID:ssILkLQJ.net
宇宙刑事シャバン

227 :デフォルトの名無しさん:2018/08/23(木) 16:48:23.72 ID:e+w5jH4y.net
ギャバン
シャバン
シャリバン

228 :デフォルトの名無しさん:2018/08/23(木) 17:03:22.02 ID:ncZgpeak.net
癒着!

229 :デフォルトの名無しさん:2018/08/23(木) 18:14:50.72 ID:AY9SoYfw.net
なんつーかオッサンばっかだな。
まあ俺もそういう反応を期待してたわけだがw

230 :デフォルトの名無しさん:2018/08/23(木) 18:43:16.20 ID:1n1CeI2l.net
>>219
#! -> sharp-bang -> shabang -> 単語ならshellだしすでにあるとても似たshebangでいいんじゃね、shebangの意味自体が似合ってるし
とか。shebangというれっきとした単語の由来は別にある

231 :デフォルトの名無しさん:2018/08/24(金) 01:02:04.55 ID:TjDOkMEc.net
元ネタ分かんねーと思ったらおっさんどころかジジイじゃねーか

232 :デフォルトの名無しさん:2018/08/24(金) 07:46:54.31 ID:mVdVBkdF.net
マジで検索しても元ネタわからんw
平均年齢どのくらいだこのスレは

233 :デフォルトの名無しさん:2018/08/24(金) 08:04:01.22 ID:lit/+L8O.net
機動刑事シバン

234 :219:2018/08/24(金) 08:55:32.25 ID:57yPHNQD.net
>>232
>>227 が元ネタ。
ギャバン/シャリバンのバンと、シャリバン/シャイダーのシャと、
ギャバンのオープニング末尾のギャーバーン♪
からの連想でシャーバンと書いた。
残りは歌詞検索とかすると分かる。

こんな連想するの俺だけかと思ったら他にも複数いてワラタ

235 :デフォルトの名無しさん:2018/08/24(金) 09:13:07.93 ID:LbFHGrVQ.net
>>234
男なんだろ?
の一言でギャバンOPテーマとわかるのはギャバン世代というよりもFLASH黄金世代な予感
実際俺はギャバンじゃなく当時の面白FLASHギャバソで知った

236 :219:2018/08/24(金) 09:35:23.98 ID:57yPHNQD.net
>>235
そんなFLASHがあったのか。
4月のAnisonDaysに串田アキラが出てギャバンのOPを歌ってたから、
それで記憶が蘇ってる人もいるかも。
てゆうかそれ俺。

237 :デフォルトの名無しさん:2018/08/24(金) 10:43:03.55 ID:wXpFbMeR.net
そして>>228の癒着というのはケロロ軍曹の登場人物
556(コゴロー)が変身するときのセリフ
元ネタはギャバンが変身するときに言うセリフの蒸着
40代ならここまで連想する

238 :デフォルトの名無しさん:2018/08/24(金) 10:59:15.82 ID:4te4jIm4.net
蒸着の元ネタってギャバンだったのか…
DeadSpaceのアーマー更新シーンを蒸着言うやついたけど元ネタあったんだな

239 :デフォルトの名無しさん:2018/08/24(金) 15:39:45.35 ID:mVdVBkdF.net
>>237
あ それなら知ってるわ
ケロロ軍曹だったら子供のころアニメで観てた

240 :デフォルトの名無しさん:2018/08/24(金) 16:02:03.60 ID:wXpFbMeR.net
>>239
ようこそ。おっさんの世界へ

241 :デフォルトの名無しさん:2018/08/24(金) 19:44:16.61 ID:Gfkbj1yB.net
バッチファイルやパワーシェルもシェルスクリプトですか?
何言語っていうんでしょうか?

242 :デフォルトの名無しさん:2018/08/24(金) 19:45:54.13 ID:wXpFbMeR.net
>>241
どうでもいいことを気にするな

243 :デフォルトの名無しさん:2018/08/24(金) 19:54:12.80 ID:Gfkbj1yB.net
静かに

244 :デフォルトの名無しさん:2018/08/24(金) 20:30:04.55 ID:ap1IsA9z.net
確かに
だと思ったら
静かに
でなんか笑った

245 :デフォルトの名無しさん:2018/08/24(金) 22:34:41.93 ID:UXXFLepR.net
>>241
バッチファイルはシェルスクリプトには入れないなあ。
PowerShellの方は、PowerShellスクリプトって言うな俺は。

246 :デフォルトの名無しさん:2018/08/25(土) 06:14:56.78 ID:TgLfCzAb.net
バッチファイルをシェルスクリプトに入れない理由はないと思うけど?

247 :デフォルトの名無しさん:2018/08/25(土) 12:12:23.81 ID:r5O9PJUC.net
スクリプトに入れるのはありだけどシェルスクリプトって言う奴は少ないと思う

248 :デフォルトの名無しさん:2018/08/25(土) 12:16:23.36 ID:zrQnMjpj.net
ちゃんとした定義は知らんが、
シェルスクリプト=.sh
バッチファイル=.bat
と大抵は認識してそうな印象

249 :デフォルトの名無しさん:2018/08/25(土) 13:58:20.34 ID:R/mHQH6/.net
Wikipedia に書いてあることでだいたいいいのではいか?

スクリプト言語
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%A8%80%E8%AA%9E

250 :デフォルトの名無しさん:2018/08/25(土) 14:43:10.95 ID:0Hfq0tYW.net
シェル スクリプトと言えばだから違うくね。バッチファイルをシェルスクリプト(ファイル)と実際に呼んでるヤツを見たことはないな
command.com自体が原始的でシェルのように打ち込んでってってのも見ない。あれはやっぱりバッチファイルを作るためのでしかないってうすうすわかっているからじゃねとか

251 :デフォルトの名無しさん:2018/08/25(土) 14:47:50.16 ID:TgLfCzAb.net
>>250
最初から結果ありきで書くなよ。単にお前がバッチファイルをシェルスクリプトに入れないためのこじつけを
お前が考えてるだけじゃねーか

wikipediaにも書いてあるし

> スクリプト言語の一種は、ジョブ制御の自動化から生み出されたもので、システムプログラムの起動と制御を行う。
> そういう意味ではシェルの祖先としてIBMの Job Control Language(JCL、ジョブ制御言語)があるとも言える。
> この種の言語の処理系(インタプリタ)の多くは、UNIXのシェルやMS-DOSのCOMMAND.COMといった
> コマンドラインインタプリタと呼ばれるものである。

252 :デフォルトの名無しさん:2018/08/25(土) 14:48:52.43 ID:TgLfCzAb.net
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88

> シェルスクリプト用インタプリタの多くはコマンドラインインタフェースも兼ねており、各種Unixシェル、
> Windows PowerShell、MS-DOSのCOMMAND.COMなどがある。

253 :デフォルトの名無しさん:2018/08/25(土) 14:51:47.98 ID:0Hfq0tYW.net
>>251
「実際」にだよ。お前の周りでバッチファイルをシェルスクリプトと呼んでいるヤツいるの?
呼んでもいないのになぜそんなとこに拘る。バッチファイルはバッチファイル、Unix系のはシェルスクリプトはシェルスクリプトでええやん

逆にシェルスクリプトで書かれたはファイルをバッチファイルとなぜ呼ばないまでこだわれよ、だったらw

254 :デフォルトの名無しさん:2018/08/25(土) 14:58:00.88 ID:TgLfCzAb.net
>>253
はい、いますー。論破w

255 :デフォルトの名無しさん:2018/08/25(土) 15:01:01.94 ID:0Hfq0tYW.net
いるんだww

256 :デフォルトの名無しさん:2018/08/25(土) 15:31:37.30 ID:4b56uGjx.net
いるのか…

257 :デフォルトの名無しさん:2018/08/25(土) 16:39:23.62 ID:CiVrtAH/.net
>>248

自分はこの定義に賛同する

258 :デフォルトの名無しさん:2018/08/25(土) 17:13:00.55 ID:aJ7Wjpaw.net
バッチファイル=バッチスクリプトであってる?
バッチファイル=シェルスクリプトはまちがえ?

259 :デフォルトの名無しさん:2018/08/25(土) 17:34:24.45 ID:TgLfCzAb.net
>>258
シェルスクリプトというカテゴリがあって、
その中で、特別に言語を指定する場合は、
bashスクリプトやバッチファイルなどという具体的な呼び方をしている

バッチファイル = シェルスクリプト ではなく
バッチファイルはシェルスクリプトに含まれる

260 :デフォルトの名無しさん:2018/08/25(土) 17:57:18.64 ID:0Hfq0tYW.net
>>258
バッチファイルを作るための制御文なんぞを特に命名はしてないんじゃないの。バッチファイルというのがあってそれを作る/それで使える制御文は的な存在。誰も名前を言えないように

バッチファイルのバッチとは バッチ処理 という古典的コンピュータ用語。MS-DOS/Microsoft上でバッチ処理を書いたファイル/バッチ処理のファイルということで、バッチファイルと名前付けしたにすぎない

シェルスクリプトファイル、シェルスクリプトで書かれたコマンドも、広義ではバッチ処理のファイルなのでバッチファイルと呼べるが、そんな呼び方をする人はいない
そもそもシェルやシェルスクリプトだって、Unixでそう呼んだからにすぎないんだけど、どうして一緒くたにしたがるのかわけわからん

てかさ、バッチファイルのアレもシェルスクリプトだって言いたがりは、このスレでバッチファイルのことが出てきたらどうすんの?当たり前のように受け止めるの?てか、そんなトンチンカンが現れたことがないんだから、わかるようなもんだと思うけど

261 :デフォルトの名無しさん:2018/08/25(土) 18:06:28.42 ID:0Hfq0tYW.net
>>260
>バッチファイルと呼べるが、そんな呼び方をする人はいない
サーバーなんぞの1日深夜1回とか1週間に1回のごちゃごちゃ処理するのを呼んだりしているかもしれない。そういう狭義のある意味全くもってなバッチ処理を記述したファイルという意味で

262 :デフォルトの名無しさん:2018/08/25(土) 18:11:40.65 ID:TgLfCzAb.net
> てかさ、バッチファイルのアレもシェルスクリプトだって言いたがりは、このスレで
> バッチファイルのことが出てきたらどうすんの?当たり前のように受け止めるの?

なにか問題でも?

>>2
> ・特記なき場合、Bourne ShellもしくはPOSIX準拠のsh可換シェルが既定です
> csh/tcshでのシェルスクリプトは*まったく推奨しません*。

などと書いてあるから、バッチファイルと明記して書けば問題ないでしょ?

263 :デフォルトの名無しさん:2018/08/25(土) 18:18:00.15 ID:0Hfq0tYW.net
なにそれw
無茶苦茶やな。書かなくても誰もがわかっていたからそんなのが出てない書く必要もないという事実を無視して自説のためにでしかないやん

264 :デフォルトの名無しさん:2018/08/25(土) 18:22:59.07 ID:TgLfCzAb.net
なにいってんだか。

バッチファイルという名前が有名だから、普段はそっちの名前で読んでるだけで
cmd.exeはシェルだし、シェル上で動く言語という定義なんだから、
シェルスクリプトに当てはまるという至極まっとうなことを言ってるだけ

265 :デフォルトの名無しさん:2018/08/25(土) 18:29:18.68 ID:0Hfq0tYW.net
>シェルスクリプトに当てはまるという
だから?で?それが何かの役に立つというか意味があるのか?ってことだよ。別に当てはまろうが当てはまらないだろうが意味ないだろう??

バッチファイルといえばアレで、シェルスクリプトといえばコレでいいことやん。それでなにも問題もなくうまくもいってるってのが、このスレででもっていう

バッチファイルをここで話題にしたがってるの??ww

266 :デフォルトの名無しさん:2018/08/25(土) 18:29:21.83 ID:zrQnMjpj.net
もうスクリプトでいいんじゃないかな(鼻ホジ

267 :デフォルトの名無しさん:2018/08/25(土) 18:31:36.33 ID:0Hfq0tYW.net
すでに出てたけど、>>247だわな

268 :デフォルトの名無しさん:2018/08/25(土) 18:33:12.36 ID:zrQnMjpj.net
cmd=シェルってのがピンとこないんだよな
大体シェル=シェルスクリプトみたいな使い方してるからなんだけどさ

269 :デフォルトの名無しさん:2018/08/25(土) 18:34:28.54 ID:TgLfCzAb.net
>>265
意味がないならシェルスクリプトでいいだろw

270 :デフォルトの名無しさん:2018/08/25(土) 18:37:31.47 ID:0Hfq0tYW.net
薄いな。なんでそんなに拘る。意味がないのはあんた個人に対してだよ
バッチファイルがシェルスクリプでもなければならない意味を言いなさい

271 :デフォルトの名無しさん:2018/08/25(土) 18:42:40.13 ID:0r5h6/lL.net
コマンドラインインタープリタを自動化したもんを
シェルスクリプトとというの

頭悪いバカのみんな分かった?

当然、バッチファイルもシェルスクリプト

わかった?

272 :デフォルトの名無しさん:2018/08/25(土) 18:43:26.08 ID:0Hfq0tYW.net
>>268
Unixでsh(系=シェル)を使うと、貧弱なにもできないって感じからcmd=シェルとはピンとこないこともあるな
シェルを起動してとは言わんし。てか大体の記事とかでも、いや、Microsoftでさえシェルとは呼んではく、Command Promptだからね

273 :デフォルトの名無しさん:2018/08/25(土) 18:49:15.78 ID:TgLfCzAb.net
>>270
普通にcmd.exeがシェルだし、そのシェルの言語で動くんだから
シェルスクリプトですってだけだが?

なんでシェルスクリプトじゃだめなの?

> cmd=シェルとはピンとこないこともある
お前が本質をわかってないからだろうねw

274 :デフォルトの名無しさん:2018/08/25(土) 18:50:24.91 ID:TgLfCzAb.net
> 貧弱なにもできないって感じから
何もできないからなんだっていうんだろうか?

リダイレクトできるよ? パイプ使えるよ?
まさにシェルスクリプトの特徴だよね

275 :デフォルトの名無しさん:2018/08/25(土) 18:53:58.18 ID:0Hfq0tYW.net
>>273
さっぱりだな。だからそれの意味を教えなさい。そんなにづっと続けるのだから意味があるんでしょ?あなた個人に
それがさっぱりわからんのだよ。「はいはい、バッチファイルもシェルスクリプトだね、誰もそう呼ばないけど」で満足なの?

本質wwあなた個人の意味も言えないのに本質wwwって思ってしまうよ

276 :デフォルトの名無しさん:2018/08/25(土) 18:56:00.29 ID:0r5h6/lL.net
プリンタに内容がPDLのファイルをリダイレクトすれば
いまでも普通にコマンドプロンプトで印刷もできるからな

コマンドプロンプトでコマンドからなんでもできる

277 :デフォルトの名無しさん:2018/08/25(土) 18:58:24.61 ID:0Hfq0tYW.net
>>274
>Unixでsh(系=シェル)を使うと
って、言ってるのだけど。ああ...なんだ..MS好きか?単に

shとcmdの違い/使い勝手が天地なのは使えば明らかだと思うけど。shと同等にcmdを使ってるの?もしかしてsh使ってないとかはないよな?w

278 :デフォルトの名無しさん:2018/08/25(土) 19:01:50.62 ID:TgLfCzAb.net
>>277
だからなんで高機能なものがシェルスクリプトの定義だ
なんて思ってるのさ?
低機能なシェルスクリプトってだけだろ
つーか、なにができないとシェルスクリプトとは認められないって言ってるんだよ
お前の定義言ってみな。矛盾しないような。

279 :デフォルトの名無しさん:2018/08/25(土) 19:10:24.45 ID:0Hfq0tYW.net
>>278
一般的に、シェルスクリプトと言えばUnixが元のあれやこれや
一般的に、バッチファイルと言えばMS-DOS/Windows/Microsoftのあれやこれや
一般的に、バッチファイルと言えばわかるものをシュエルスクリプトとわざわざ言い換えはしない

シェルはもともとUnixでの言い出したことだし、sh(シェル)/cmd(コマンドプロンプト)でそれぞれ、シェルスクリプト/バッチファイルと呼んでいた

コマンドをインタラクティブで処理するやつをどうであれシェルと呼ぶ見方もあるだろうが、それは一般的ではないな。cmdはやっぱりCommand Promptなとことからも

ってとこ。別にバッチファイルはバッチファイルで何も問題がなく、わざわざシェルスクリプトと言い換える意味がわからん、混同という弊害もあるし

280 :デフォルトの名無しさん:2018/08/25(土) 19:12:53.54 ID:0r5h6/lL.net
まさにシェルがなにかついて記述されている

https://en.wikipedia.org/wiki/Shell_script

Typical operations performed by shell scripts include file manipulation, program execution, and printing text.
A script which sets up the environment, runs the program, and does any necessary cleanup, logging, etc. is called a wrapper.

The term is also used more generally to mean the automated mode of running an operating system shell;
in specific operating systems they are called other things such as 

 batch files (MSDos−Win95 stream, OS/2), 
 command procedures (VMS), 
 and shell scripts (Windows NT stream and third−party derivatives like 4NT?article is at cmd.exe),
 and mainframe operating systems

are associated with a number of terms.


バカの世界では違うらしい

281 :デフォルトの名無しさん:2018/08/25(土) 19:15:52.35 ID:0Hfq0tYW.net
>>280
よく読んでみ。なんかこれ幸いな単語で喜んでいるだろう?

282 :デフォルトの名無しさん:2018/08/25(土) 19:31:09.91 ID:TgLfCzAb.net
>>279
一般的にって、全部お前がそうしたいってだけじゃねーかw

283 :デフォルトの名無しさん:2018/08/25(土) 19:32:11.87 ID:TgLfCzAb.net
>>281
お前のために翻訳してやったぜ


> シェルスクリプトは、あるコンピュータプログラムによって実行されるように設計されたUnixシェル、
> コマンドラインインタプリタ。[1]シェルスクリプトのさまざまな方言は、スクリプト言語と見なされます。
> シェルスクリプトによって実行される一般的な操作には、ファイルの操作、プログラムの実行、
> およびテキストの印刷が含まれます。環境を設定し、プログラムを実行し、必要なクリーンアップやロギングなどをラッパーと呼びます。
>
> この用語は、より一般的には、オペレーティングシステムシェルを実行する自動モードを意味するためにも使用されます。
> 特定のオペレーティングシステムでは、バッチファイル(MSDos-Win95ストリーム、OS / 2)、
> コマンドプロシージャ(VMS)、シェルスクリプト(WindowsNTストリーム、4NTのようなサードパーティ製の派生品)などがあります

284 :デフォルトの名無しさん:2018/08/25(土) 19:36:03.43 ID:0Hfq0tYW.net
>>282
だーーかーらーー、今までのこのスレでバッチファイルの話をするやつなんていないことから、一般的だってお前にもわかるだろう

>>283
だーーかーらーー、その「一般的」って一般的ではない一般的だよw 他の全文読んでみ。どれだけバッチファイルに言及してる?そこだけだろ?
てかさ、お前の周りでバッチファイルをシェルスクリプトと言っているのそんなにいるの?

285 :デフォルトの名無しさん:2018/08/25(土) 19:40:24.03 ID:TgLfCzAb.net
>>284
? もともとこのスレはUnix板にあったし?
>>2にsh系前提って書いてあるし?

このスレの一般的じゃなくて、世間一般の
シェルスクリプトの定義の話をしようぜ?

なんならここでバッチファイルの内容を入れても良い
次から>>2の内容を書き換えてあげようか?

286 :デフォルトの名無しさん:2018/08/25(土) 19:44:09.41 ID:0Hfq0tYW.net
なんだろ。こんだけ世間擦れして、なんかどこぞの辞書的なとかが絶対ってこだわり続けるのは...あれかな??w

>>285
そういう無茶苦茶言えるのは、やっぱりアレだろなと思わざるを得ない
誰もそんなの望んではいないだろうと思われるけど。Unix板にあろうが「シェルスクリプト」でググって飛び込んできても不思議ではないな、あんたの言い分では
てかそのあんたの言っているその時点で暗にあんたもシェルスクリプトとバッチファイルは違うと認めてるようなもんなんだが、わからんだろうな

287 :デフォルトの名無しさん:2018/08/25(土) 19:51:38.10 ID:9FNycoly.net
はいはいわかった。

次スレは>>2を書き換えたからな

288 :デフォルトの名無しさん:2018/08/25(土) 19:55:20.14 ID:0Hfq0tYW.net
拗らせるぐらいなら参加しなきゃいいのにw
すげえな今までを全く無視して個人的にそうするという自己中ぶりは

289 :デフォルトの名無しさん:2018/08/25(土) 19:56:27.99 ID:A3V5N+C6.net
自覚ないみたいだな
俺はシェルスクリプトの正しい定義を言ってるだけ

290 :デフォルトの名無しさん:2018/08/25(土) 19:57:14.99 ID:0Hfq0tYW.net
誰やねんw

291 :デフォルトの名無しさん:2018/08/25(土) 20:04:48.84 ID:0Hfq0tYW.net
広義ではバッチファイルをシェルスクリプトと呼べるかもしれないが、一般的にバッチファイルをシェルスクリプトとは呼ばないし、そう思っているのは少なく明らかに分けて考えて言う方が多い
「一般的に」というのは「広義では」という場合にも使われるのを知っておこう

ただ、それだけのことなんだけどねえw

292 :デフォルトの名無しさん:2018/08/25(土) 20:09:01.30 ID:kfh++Yrt.net
バッチは別スレあるし、棲み分けすればええんとちゃう?
まあアスペのためにもスレタイにUNIXでも付けとく?
詳しくは>>2に入れておいて

あとUNIX板から移動したって事で>>1にはUNIX板の最終スレは残しておくか

293 :デフォルトの名無しさん:2018/08/25(土) 20:10:14.67 ID:A3V5N+C6.net
これは言い方を逆転させただけ


一般的にバッチファイルをシェルスクリプトとは呼ばないし、そう思っているのは少なく明らかに分けて考えて言う方が多いが、
広義ではバッチファイルをシェルスクリプトと呼べる

294 :デフォルトの名無しさん:2018/08/25(土) 20:10:31.78 ID:9woB+JG6.net
UNIX、Windows、それぞれの文化の中での言い方なのに
何ムキになってるんだい?

UNIXの文化の中で、シェルスクリプトといえばsh系のスクリプトのことを通常は意味するだろう?
わざわざ、Windowsバッチファイルを「シェルスクリプト」と呼ぶことは、
英語圏の外国人が日本に来て、何故英語が通じないと言ってるようなもので、
UNIX文化圏の人から見たら、「何言ってんだこいつ」ということになる。

このスレがプログラム板に来たからといって、シェルスクリプト自体がUNIX文化であることには疑いなく、
正しいか正しくないかということとはまた別の問題なんだよ。

295 :デフォルトの名無しさん:2018/08/25(土) 20:11:13.69 ID:A3V5N+C6.net
>>292
sh互換専用のスレ立てたのでどうぞ

【POSIX】 sh系互換 シェルスクリプトスレ
https://mevius.5ch.net/test/read.cgi/tech/1535195112/

296 :デフォルトの名無しさん:2018/08/25(土) 20:13:03.56 ID:kfh++Yrt.net
>>295
ワッチョイ入れておいた方が良くないか?
>>4の経緯があるし

297 :デフォルトの名無しさん:2018/08/25(土) 20:13:19.96 ID:0Hfq0tYW.net
拗らせすぎ。なぜそこまで...必死と言わざるを得ないw

298 :デフォルトの名無しさん:2018/08/25(土) 20:15:34.15 ID:9woB+JG6.net
別スレ立てるなんて、もう嫌がらせでしか無くない?
しかも2つも。

299 :デフォルトの名無しさん:2018/08/25(土) 20:20:01.41 ID:kfh++Yrt.net
>>298
ほんとそれ
ワッチョイ入れて粘着する奴はNGした方が良さそう

300 :デフォルトの名無しさん:2018/08/25(土) 20:22:56.85 ID:0r5h6/lL.net
まったくもって酷いことするヤツラがいるもんだ。。。
オレにはこんなことできない。。。

301 :デフォルトの名無しさん:2018/08/25(土) 20:27:59.09 ID:0r5h6/lL.net
シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/

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

シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1535194140/

【POSIX】 sh系互換 シェルスクリプトスレ
https://mevius.5ch.net/test/read.cgi/tech/1535195112/

乱立しすぎてなにがなんだか
分からない

302 :デフォルトの名無しさん:2018/08/25(土) 20:34:30.34 ID:9woB+JG6.net
件の輩、ドザの工作員と考えないと説明がつかないw
ご本人に住み分けを含めて説明してもらわないと

303 :デフォルトの名無しさん:2018/08/25(土) 20:48:45.32 ID:2/0/KxdV.net
荒れてて草

304 :デフォルトの名無しさん:2018/08/25(土) 20:50:34.20 ID:tfF8aOe1.net
>>295
二度と来るな屑

305 :デフォルトの名無しさん:2018/08/25(土) 23:23:09.52 ID:zrQnMjpj.net
まぁこういうことがあるからワッチョイ導入しようってなったんだし
ここにきた選択は間違ってはいなかったな

306 :デフォルトの名無しさん:2018/08/25(土) 23:44:11.66 ID:9woB+JG6.net
ID:TgLfCzAb  抽出レス数:14
ID:9FNycoly  抽出レス数:1 → シェルスクリプト総合 その29
ID:A3V5N+C6 抽出レス数:3 → 【POSIX】 sh系互換 シェルスクリプトスレ

IDの流れ(ダブりなし)からすると、同一人物のようだね。
アラシは一人だったってことだ。

これは推測にすぎないが、UNIX板の件のスレも同一人物の可能性が高いと思う。

後は件のスレをスルーして沈めておくのが懸命かな。


307 :デフォルトの名無しさん:2018/08/26(日) 00:23:54.30 ID:+yQLo3Ss.net
>>980
次スレはワッチョイありで頼む

308 :デフォルトの名無しさん:2018/08/26(日) 11:24:38.43 ID:ylpyaNXE.net
>>251
JCLなつかしー

DD文でFORTRANのWRITE/READ文の装置番号と実際のファイルを対応させる記述すんだよね
だからOPEN/CLOSEなんて使わなかった

パソコンなら簡単なのにメインフレームは一々領域確保やらにゃならんから面倒だなと常々感じてた

309 :デフォルトの名無しさん:2018/08/26(日) 15:08:48.37 ID:r/93pdu8.net
つまりバッチ=シェルだけどシェルっていう人はすくないってことね

310 :デフォルトの名無しさん:2018/08/26(日) 15:11:58.53 ID:I24HoXLR.net
鬼才現る

311 :デフォルトの名無しさん:2018/08/26(日) 15:24:35.78 ID:rDVjwTPV.net
>>309
また荒らそうとしてるのね

312 :デフォルトの名無しさん:2018/08/26(日) 20:22:58.07 ID:r/93pdu8.net
じゃあパワーシェルはシェルスクリプト?
それともWindowsはシェルとはいわないってこと?

313 :デフォルトの名無しさん:2018/08/26(日) 20:32:19.44 ID:2bPBOKp2.net
もうお腹いっぱいです

314 :デフォルトの名無しさん:2018/08/26(日) 20:35:06.42 ID:qkCCtxHG.net
いっぱいすぎてゲロ吐きそう

315 :デフォルトの名無しさん:2018/08/26(日) 22:12:44.18 ID:93jd27LU.net
>>312
当然シェルスクリプト
cshと同じあつかい

316 :デフォルトの名無しさん:2018/08/26(日) 23:10:38.66 ID:ylpyaNXE.net
昔は仕事でバッチを沢山作ってきたけど
退職して、数十年、コマンドや、シェル一切忘れてしまった
再びシェルスクリプトやsed.awk,viリファレンス買い込んで復習中
昔はスクリプトといえば、Bshとawkしか知らなかったから、何やるにもawkスクリプトを何十行も書いてた
まあ、新規インストールの必要ないから客先の環境そのままでも動かせるから良かったんだけどね
大型のスーパーコンピュータで数十行のawkスクリプト動かすってのも何かシュールだったな

317 :デフォルトの名無しさん:2018/08/26(日) 23:11:48.52 ID:SztCjcZc.net
awkが入ってない環境とかある?

318 :デフォルトの名無しさん:2018/08/26(日) 23:12:11.25 ID:SztCjcZc.net
windows以外で

319 :デフォルトの名無しさん:2018/08/26(日) 23:23:16.02 ID:XxVIxjiS.net
http://pubs.opengroup.org/onlinepubs/009695399/utilities/tput.html
ここを見るとtput colsおよびtput linesは標準で使えないと読めるのですが
POSIXに準拠した形で端末の幅などを取得するにはどうすればいいんでしょうか

320 :デフォルトの名無しさん:2018/08/27(月) 00:43:08.11 ID:6cDpYi8T.net
POISXコマンドであるtput使ってればいいんじゃないの
tputの仕様上は、端末(というかTerminalアプリというか端末エミュレータ)までは知らんってことじゃないの
tputの仕様/機能を満たすために後は勝手にやってくれってことじゃないの。で、当然勝手にやってる、というか、それも標準的な方法でやってるだろう(だいたいはtermcap/terminfoとかベースで)

321 :デフォルトの名無しさん:2018/08/27(月) 00:48:50.05 ID:QAQ5xX6o.net
でもOpenWrtにはtputないしなー

322 :デフォルトの名無しさん:2018/08/27(月) 01:06:14.94 ID:KUEVzuS1.net
POSIX 準拠かどうか分からんけど、

$ stty size

じゃだめなん?

323 :デフォルトの名無しさん:2018/08/27(月) 01:12:42.77 ID:QAQ5xX6o.net
sttyもOpenWrtではないなー

324 :デフォルトの名無しさん:2018/08/27(月) 01:13:44.58 ID:x5JZtbKK.net
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/stty.html
https://www.freebsd.org/cgi/man.cgi?query=stty&sektion=1
http://man7.org/linux/man-pages/man1/stty.1.html
なさげ?

325 :デフォルトの名無しさん:2018/08/27(月) 01:14:39.85 ID:x5JZtbKK.net
ID:QAQ5xX6o ただの知識自慢?OpenWrtって

326 :デフォルトの名無しさん:2018/08/27(月) 03:20:49.11 ID:y2YT/eYl.net
>>320
いえ すいません言葉が悪かったです。
POSIX標準としてのtputコマンドはあるのです。
http://pubs.opengroup.org/onlinepubs/009695399/utilities/tput.html
しかし そのオプションとして“cols”や“lines”が記載されていないのです。

327 :デフォルトの名無しさん:2018/08/27(月) 03:58:36.09 ID:6cDpYi8T.net
直接、端末に問い合わせる
https://unix.stackexchange.com/questions/16578/resizable-serial-console-window
いちおう、POSIXコマンドオプション内ではあるな。まあ、端末種によって判断しのだけど、2つぐらいに集約されてんのかな?

C関数ではPOSIXのがあるので、ちっちゃいコマンドをCで書く

http://austingroupbugs.net/view.php?id=1053
らしい。時代を先取りして(?)気にせず >>322 を使う

328 :デフォルトの名無しさん:2018/08/27(月) 04:54:02.59 ID:6cDpYi8T.net
というか、
COLUMNS LINES でええやん
http://pubs.opengroup.org/onlinepubs/009604599/basedefs/xbd_chap08.html
んなの設定してないっていうしょぼい環境だったら、しょぼいので設定してくださいって、ユーザに固定値でも設定させれば済むんじゃないの

329 :デフォルトの名無しさん:2018/08/27(月) 05:14:12.97 ID:y2YT/eYl.net
http://austingroupbugs.net/main_page.php
↑このサイト初めて知ったわ。
ここで次期のPOSIX標準がだいたい把握できるんだな。
ところでxargsに-0オプションが付くかどうかってどうやって調べればいいですかね

330 :デフォルトの名無しさん:2018/08/27(月) 06:47:11.21 ID:QAQ5xX6o.net
>>329
実行してみりゃいいだろ。
xargsなんて副作用なく機能判定できる
簡単なコマンドだ

331 :デフォルトの名無しさん:2018/08/27(月) 07:11:24.04 ID:i3Gxv5eF.net
>>317
組み込み向けでわざとない環境を作ったりすることはあるけど、
普通はあると仮定して問題ないよ。
総ディスク容量10MB以下のベル研UNIX の頃からあるコマンドだから。

332 :デフォルトの名無しさん:2018/08/27(月) 07:46:41.74 ID:y2YT/eYl.net
>>330
いやそうじゃなくてPOSIX標準に取り込まれるかどうかってことです
findの-print0オプションはこの間採用されたものの
対応するコマンドでナル文字区切りのデータを受け取れて,さらにそれを区切りとして解釈できるものが
awkくらいしかない状況なので
多くの拡張実装(BSDやGNU)で取り入れられているxargsコマンドの-0オプションが
POSIX標準にならないかな というのが知りたいのです。

そしてその情報をどう入手すればいいのか今迄分からなかったんですよ。

333 :デフォルトの名無しさん:2018/08/27(月) 08:12:50.85 ID:gOoey+yt.net
次期POSIXや将来のPOSIXで入れる入れない機能みたいな議論を知りたいってことでしょうか

334 :デフォルトの名無しさん:2018/08/27(月) 09:26:49.88 ID:y2YT/eYl.net
>>333
その通りです 言葉が足らずもうしわけない

335 :デフォルトの名無しさん:2018/08/27(月) 13:54:28.91 ID:i3Gxv5eF.net
>>334
ttp://austingroupbugs.net/view.php?id=244
を見ると追加する方向ではあるみたい。
でもレビュー中状態でもう7年近く止まってるから、いつになるやら。

336 :デフォルトの名無しさん:2018/08/27(月) 13:58:31.29 ID:6cDpYi8T.net
他にもあるけど、managerはあくまでも拒否って感じ。確か2015あたりのもあるけど、同じ応えばかりw

337 :デフォルトの名無しさん:2018/08/27(月) 14:31:36.35 ID:i3Gxv5eF.net
毎回 -exec {} + を書いてるよね。
でも close はされてないし、うーん この

338 :デフォルトの名無しさん:2018/08/27(月) 14:48:30.12 ID:6cDpYi8T.net
0000251がファイル名に改行を認めるべきか認めないべきかっていうのがありの
んなのとっとと認めないでcloseすれば話が先にすすむのになって感じかなあ。議論が長いのでよくは読んではいない

339 :デフォルトの名無しさん:2018/08/27(月) 15:34:44.12 ID:gOoey+yt.net
現代のスピード感じゃないよね(´・ω・`)

340 :デフォルトの名無しさん:2018/08/27(月) 20:40:23.57 ID:y2YT/eYl.net
まあ互換性の最後の砦だから 新しい機能を付け足すのに慎重になりすぎることはないのかも

341 :デフォルトの名無しさん:2018/08/27(月) 22:17:16.58 ID:6cDpYi8T.net
>>339
dwheelerさんが問題解決を拗らせてると見えなくもないw
ファイル名に改行を認めないで、改行をNULLの代わりにxargsが対応すれば済むような。readはマズいのかなと思うがNULLと改行が同時に必要ってあるのかな??

342 :デフォルトの名無しさん:2018/08/27(月) 22:20:04.31 ID:6cDpYi8T.net
>>341
NULL=ヌル文字'¥0'のことね。いちおう(なぞ)

343 :デフォルトの名無しさん:2018/08/27(月) 22:31:27.06 ID:r0TuCFDo.net
>>341
マルチバイト文字列の2バイト目以降に改行コードが入る可能性は?

344 :デフォルトの名無しさん:2018/08/27(月) 22:36:28.15 ID:6cDpYi8T.net
>>343
議論でEBICDICでとかあったが、そんなのももういらないUnicodeでいいやんここ(5ch)もいい加減Shift-JISを捨ててUnicodeにしやがれっ

あるの?知らん。あったら他でも問題あったりするんじゃないのかなあ。dwheelerさんもそんな感じで重箱の隅的なwなのになぜか-0や-print0はええやん的な

345 :デフォルトの名無しさん:2018/08/27(月) 22:39:24.93 ID:i3Gxv5eF.net
>>343
UNIXでサポートされてる既存のエンコーディングにそういうのはないし、
今後もサポートされないと思う。

346 :デフォルトの名無しさん:2018/08/27(月) 22:59:48.13 ID:zX+eejgv.net
COLUMNS LINES でいいわけがない
xtermみたいなターミナルエミュレータでも普通にリサイズされるからな
しらん間にサイズが変更されるttyなんかいくらでもある

ttyのサイズについて、常に正しい値を取得したい場合は
常にttyのサイズが変更されたシグナル(SIGWINCH)を受け取るようにして
毎回、COLUMNS LINESの環境変数を更新し続けるとか工夫しないと難しい

 ↓こんな感じのやりかた
 trap 'COLUMNS=$(tput cols) LINES=$(tput lines)' WINCH

あとはioctrlでTIOCGWINSZをじかにとるぐらいしか思い付かない

347 :デフォルトの名無しさん:2018/08/27(月) 23:13:57.46 ID:6cDpYi8T.net
>>346
俺の環境では、COLUMNS LINES が自動で変わるけどな。サーバーにssh接続して、クライアントでウィンドウサイズ変えても、ちゃんとサーバー側shellでのCOLUMNS LINESは
ので、それが当たり前かと思ってたよw xtermでもやりゃできるんじゃないのってか、そんな古いのは対応しないのかな

348 :デフォルトの名無しさん:2018/08/27(月) 23:16:22.70 ID:6cDpYi8T.net
xtermでもちゃんとCOLUMNS LINESがリアルタイムに変わるやんけっ!

349 :デフォルトの名無しさん:2018/08/27(月) 23:18:21.35 ID:zX+eejgv.net
いやsshでの接続なら普通に対応してるからな

350 :デフォルトの名無しさん:2018/08/27(月) 23:21:50.19 ID:6cDpYi8T.net
なるほど!逆にローカルでは何もしないのか。なるほど。なんでやねんっ!xtermのせいか

351 :デフォルトの名無しさん:2018/08/27(月) 23:23:01.18 ID:zX+eejgv.net
xtermが対応してるとか
そういう問題じゃないからな
ttyはただのダム端末だからな

xtermみたいにサイズを変更できるターミナルがあって
それに対応できるかどうかという問題になる

352 :デフォルトの名無しさん:2018/08/27(月) 23:25:15.75 ID:6cDpYi8T.net
TTYの幅とかの概念あるの?行はまず無いでしょ。TTYの話じゃないよ
Terminalアプリでローカルでもちゃんとしているのはあるけど?

353 :デフォルトの名無しさん:2018/08/27(月) 23:29:04.05 ID:zX+eejgv.net
ただな幅の情報が取得できないと
cursorライブラリなんか使えない

ウィンドウサイズが端末の幅とか関係なく
好き放題サイズを設定できるとしても
使いようがない

354 :デフォルトの名無しさん:2018/08/27(月) 23:31:24.22 ID:zX+eejgv.net
ターミナルはエコーされた文字を
標準出力や標準エラー出力に出力するだけだからな

355 :デフォルトの名無しさん:2018/08/27(月) 23:33:24.56 ID:6cDpYi8T.net
いやいや...いやいや...
xterm前提とか、今何使ってるの??

356 :デフォルトの名無しさん:2018/08/27(月) 23:34:19.94 ID:zX+eejgv.net
オレはxtermを例にあげただけで
xtermだけじゃない
puttyでもTeratermでもなんでもいい

357 :デフォルトの名無しさん:2018/08/27(月) 23:35:13.23 ID:zX+eejgv.net
昔のwindowsに附属してた
telnetでもいい

358 :デフォルトの名無しさん:2018/08/27(月) 23:36:58.83 ID:6cDpYi8T.net
あー...
ちょっとLinuxのでも使ってみ。今時は違うから。まあ、そゆのも対象にしたら使えないかもね

359 :デフォルトの名無しさん:2018/08/27(月) 23:38:30.97 ID:6cDpYi8T.net
telnetって...
まあ、そんな古いのを対象にしたらそかもね。なにかPOSIXの貧弱さに通じるものがあるなw

360 :デフォルトの名無しさん:2018/08/27(月) 23:39:06.12 ID:zX+eejgv.net
むしろ物理コンソールで計算機さわることのほうが希だからな
まずサーバーだったらxなんか立ちあげることなんかありえないから
xを使うようターミナルエミュレータを使う機会なんかまずない

361 :デフォルトの名無しさん:2018/08/27(月) 23:40:16.59 ID:zX+eejgv.net
趣味や遊びで使う分にはいいかもしれないどな
仕事で使う場合そんな使い方はまずしない

362 :デフォルトの名無しさん:2018/08/27(月) 23:40:52.92 ID:6cDpYi8T.net
だったら、今時はssh接続一択じゃないんじゃないかなあ。それで万事解決のようなww
puttyでもTeratermでもssh接続ならちゃんとしているのでしょ?

363 :デフォルトの名無しさん:2018/08/27(月) 23:42:31.94 ID:6cDpYi8T.net
仕事ならなおさらssh接続一択のような。まあ、仕事では未だにtelnetでしかとかいうとこがあるかもしれないが、そうじゃないのは趣味や遊びと決めつけるあたり、ホントに仕事でやってんの?と疑問

364 :デフォルトの名無しさん:2018/08/27(月) 23:43:41.66 ID:zX+eejgv.net
わかったか
オマエがニートだと思ったから
それようの書き方してる

わかってしまうのが怖い

365 :デフォルトの名無しさん:2018/08/27(月) 23:44:35.56 ID:6cDpYi8T.net
意味わからん。自信たっぷりだね。それだけはわかるw

366 :デフォルトの名無しさん:2018/08/27(月) 23:48:48.71 ID:zX+eejgv.net
telnet(オレはターミナルの例としてあげただけだ)はないにしても
xサーバーたちあげることはまずない

そんなもん使ってみればいいとか勧めてるいってる時点でな
残念なことに大体察しはつく

367 :デフォルトの名無しさん:2018/08/27(月) 23:50:47.78 ID:6cDpYi8T.net
Xサーバー??何を言っているのか。Windows前提絶対でモノ言っているでしょ?Windowsつかわなきゃ仕事じゃないと言っているわけ??
Windowsでウィンドウシステムが起動してそれを使ってるのと同じだよ。Windows以外でも

368 :デフォルトの名無しさん:2018/08/27(月) 23:54:58.42 ID:6cDpYi8T.net
てか、なんでこのスレでWindows前提絶対やねんっ。別にいいけど、他の作業環境を知らない認めないのはナイな

369 :デフォルトの名無しさん:2018/08/27(月) 23:59:33.83 ID:zX+eejgv.net
なにをいってるのか って?
オマエがいってることが意味がわからんわ

Xサーバーたちあげないで
どうやってそのUNIXライクな計算機のwindowを表示するワケ

なにも分かってない頭悪いのが使ったつもりになってるのが分かったわ
コレはもう確定

370 :デフォルトの名無しさん:2018/08/28(火) 00:04:36.83 ID:Hq0PMDIz.net
Linuxデスクトップでは普通に起動するでしょ?別に起動するって意識しなくて。Windowsでウィンドウシステムが起動しているのと同じだよ
このスレなんだから、Linuxメインで使っているのいてもおかしくもなんもないだろうにってことだけど?
Linuxを勧めるから仕事じゃないってw 俺のはLinuxでもWindowsでもないけど仕事でもよく/それなりに使われているんだけどなあ

371 :デフォルトの名無しさん:2018/08/28(火) 00:09:02.63 ID:hby/BPp+.net
Linuxデスクトップとな。。。
ちなみにX端末ってなにかわかる?

372 :デフォルトの名無しさん:2018/08/28(火) 00:10:09.47 ID:Hq0PMDIz.net
どういう意味での?X端末は何もしないでXサーバが処理をするとかいう??

373 :デフォルトの名無しさん:2018/08/28(火) 00:12:57.46 ID:Hq0PMDIz.net
なんか老害?自分の古い知識でそれ前提絶対的なwもっと視野を広げた方がいいような。コンピュータ好きなら

374 :デフォルトの名無しさん:2018/08/28(火) 00:13:46.49 ID:hby/BPp+.net
まあた始まった
クソニートなの
もうバレてんのに

375 :デフォルトの名無しさん:2018/08/28(火) 00:15:11.79 ID:Hq0PMDIz.net
いや、いうか躊躇はしてたけど、あんたがそういうのを言い出しているんだけど
さすがに>>371>>372のことを言っているようで、堪えられなかったw

376 :デフォルトの名無しさん:2018/08/28(火) 00:24:53.71 ID:SLlsMMxP.net
さて、便秘薬でも飲むとするか

377 :デフォルトの名無しさん:2018/08/28(火) 00:31:12.44 ID:ZccLN8yq.net
え? テレタイプ(TeleTYpe)がどうしたって?

378 :デフォルトの名無しさん:2018/08/28(火) 06:15:37.18 ID:xeMH1v/N.net
半角くん、こっちにいたのか。
よかったら「cursorライブラリ」のことを教えてくれないか?
curses なら知ってるんだが、俺は無知なんだ。

379 :デフォルトの名無しさん:2018/08/28(火) 06:39:27.97 ID:gikJ8/5D.net
>>378
やめてさしあげろw

380 :デフォルトの名無しさん:2018/08/28(火) 09:10:20.79 ID:yK6EJuSE.net
ウィンドウサイズ変えてもCOLUMNS LINESに正しい値が入ってるのは
親プロセスである対話的シェルがSIGWINCHハンドラで設定してくれてるからでしょ。
太古の昔の商用UNIXの/bin/shは設定してくれなかった気がする。
現代でも親プロセスがシェルじゃない場合には、
正しく設定されてない可能性がある。

まあシェルスクリプトならCOLUMNS LINES がもし設定されていれば
それを使えばいいとは思うけどね。

381 :デフォルトの名無しさん:2018/08/28(火) 10:39:39.47 ID:gikJ8/5D.net
ていうかCOLUMNS環境変数とかは設定されるべきとの勧告があるのか。

382 :デフォルトの名無しさん:2018/08/28(火) 18:07:03.95 ID:+71nChns.net
シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
getoptとかgetoptsがあるのは知っています。

ですが、例えば cp みたいに、cp -a a b とかけるが
cp a -a b や cp a b -a というふうにオプションの順番を入れ替えても動くとか

gitみたいにサブコマンドが使えて、
git --no-pager log --stat のように--no-pagerはgitのオプション、
--statはlogのオプションみたいにする方法がよくわかりません

頑張ればできると思いますが、複雑になりそうです。
なにかいい方法はないでしょうか?

なお他言語を使うとか言うのは禁止です。

383 :デフォルトの名無しさん:2018/08/28(火) 18:11:08.70 ID:+71nChns.net
忘れてましたが、 ls ーal でも ls ーla みたいな書き方にも対応したいし、
git --exec-path=path でも git --exec-path path でも良かったりとか
git --exec-path でもOKとか、みんなどうやって引数解析してるんでしょうか?

384 :デフォルトの名無しさん:2018/08/28(火) 19:06:24.55 ID:C1AWmFJx.net
みんなは頑張ってやっている。
頑張らないでやる方法は他の言語とライブラリを使う。

385 :デフォルトの名無しさん:2018/08/28(火) 21:17:43.19 ID:gikJ8/5D.net
あなたとしてはgetopt(1)はシェルスクリプトとは別の言語ではないのかな?
思いきり外部コマンドなんだけど……。

386 :デフォルトの名無しさん:2018/08/28(火) 21:23:37.21 ID:+71nChns.net
POSIXできまっていて、どの環境にも入ってるものならOKです。

387 :デフォルトの名無しさん:2018/08/28(火) 21:30:00.13 ID:Hq0PMDIz.net
Cで書かれたものを例に出している時点で変だけどな。それで他言語を使うとか言うのは禁止とか
まあ、シェルスクリプトでも頑張ってる人はググればすぐ出てくるな

388 :デフォルトの名無しさん:2018/08/28(火) 21:41:08.24 ID:gikJ8/5D.net
>>386
getopt(3)
http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html

はい終了

389 :デフォルトの名無しさん:2018/08/28(火) 21:42:55.17 ID:gikJ8/5D.net
オプション解析とはまったく関係ないんだが

確かこのスレかその前あたりでaliasの可能性について論じてた人がいたよね
あれどうなったのかな。個人的にすごく興味がある。

390 :デフォルトの名無しさん:2018/08/28(火) 21:44:16.50 ID:tpGA+DOm.net
>なお他言語を使うとか言うのは禁止です。
ずいぶん偉そうだね

391 :デフォルトの名無しさん:2018/08/28(火) 21:45:59.04 ID:ZccLN8yq.net
原理主義者クサイ

392 :デフォルトの名無しさん:2018/08/28(火) 21:54:24.12 ID:Hq0PMDIz.net
ロングオプションはgetopt_longでかなり幸せになっているよう。POSIXには(まだ)入っていない
gitは、まあ、大変。読む気は無くなるw
https://github.com/git/git/blob/master/git.c
CではCでも

393 :デフォルトの名無しさん:2018/08/28(火) 22:09:30.12 ID:+71nChns.net
>>388
何が終了なのかよくわかりませんが、
getoptを使えなんて言ってないですよ?
少し考えてください。

394 :デフォルトの名無しさん:2018/08/28(火) 22:13:41.39 ID:Hq0PMDIz.net
どういうネタやねんwまあ、頑張りや

395 :デフォルトの名無しさん:2018/08/28(火) 22:19:33.48 ID:gikJ8/5D.net
>>393
もうちょっと勉強したら?
俺 学部生だぜ? ガキに知識で負けてくやしいよね?

OpenGroupっていうのはさ POSIXを制定している企業なんだわ。
つまりそこがPOSIX標準を定めてるってこと。
だからgetopt(3)はPOSIXに準拠したオプション解析器ってことだ。
どう? 理解した? これでも分からなきゃ相当 馬鹿 だなお前は。

396 :デフォルトの名無しさん:2018/08/28(火) 22:21:11.28 ID:Hq0PMDIz.net
そうムキにならんくていいだろう。>>393なんて人はいない、ネタネタ

397 :デフォルトの名無しさん:2018/08/28(火) 22:36:33.43 ID:+71nChns.net
>>395
いや、知ってるけど、何にレスしてるのかわからん。

あー、>>382

> シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
> getoptとかgetoptsがあるのは知っています。

↑この行が見えてなかったのか。

だから「getoptってのがあるで(ドヤー)」って
書き込んだのね。そういうことか

あのね、getoptだけを使っても、gitのような複雑な
オプションを解析するのは大変なんだよ

398 :デフォルトの名無しさん:2018/08/28(火) 22:41:19.86 ID:+71nChns.net
>>387
> Cで書かれたものを例に出している時点で変だけどな。

それな。C言語の話もしてないのに、
なんでそれ持ってきたのかもわからん

なんか根本的なところで勘違いしてる気がする。
まあ所詮学生だしな

399 :デフォルトの名無しさん:2018/08/28(火) 22:47:19.25 ID:Hq0PMDIz.net
>>398
ww ズレすぎ。あんたのようなヤツなんていない。いたら怖いわっw
いちおう、念のために言っておくと、その引用されたのはあんたに対してだよ

400 :デフォルトの名無しさん:2018/08/28(火) 22:49:42.88 ID:+71nChns.net
>>399
え?なに?つーことはお前もずれてるじゃん

gitのようなオプション(つまりgitは例)を
シェルスクリプトで解析するって話なのに
なんでgitはC言語でかかれていますーなんて話になるの?
意味がわからんが、説明できる?
(学生さんは図星だったようでだまっちゃったみたいだけどさw)

401 :デフォルトの名無しさん:2018/08/28(火) 22:53:12.08 ID:Hq0PMDIz.net
Cで書かれてるのを例に出してるんだから、Cでまずはだろう。そこすっとばして、どうやってんのシェルでって意味通じないよ

てか、ちょっと素が出てきてるねえって感じ。ご苦労さん。なにしたいねん

402 :デフォルトの名無しさん:2018/08/28(火) 22:54:52.38 ID:+71nChns.net
>>401

>>382で真っ先に

> シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
> getoptとかgetoptsがあるのは知っています。

って書いてあるんだが、どこからC言語の話が出てきたの?

403 :デフォルトの名無しさん:2018/08/28(火) 22:57:40.65 ID:+71nChns.net
もしかして、オプションの例として、gitのこういうオプションを
シェルスクリプト取り扱いたいですって言ったから、
C言語の話をしてると思ったの?

404 :デフォルトの名無しさん:2018/08/28(火) 23:00:52.68 ID:Hq0PMDIz.net
マジなのか?うそだろーw
>gitみたいにサブコマンドが使えて、
>git --no-pager log --stat のように--no-pagerはgitのオプション、
>--statはlogのオプションみたいにする方法がよくわかりません

gitのをしたいんでしょ?する方法がよくわかりませんって、Cでやってるとこを言っているんでしょ?
ロングオプションにしたってそう。Cでやってることをどうやってるって聞いてんだから、Cの話だろうに

あえてあんたよりにすると、「シェルで実現するにはどうしたらいいですか、または、可能ですか?」だな

405 :デフォルトの名無しさん:2018/08/28(火) 23:02:58.05 ID:+71nChns.net
> gitのをしたいんでしょ?する方法がよくわかりませんって、Cでやってるとこを言っているんでしょ?

だからgitがCでやっているようなことを
シェリスクリプトでやりたいんですが?

> Cでやってることをどうやってるって聞いてんだから、Cの話だろうに
Cでやってることを(シェルスクリプトで)どうやるって聞いてんだから、シェルスクリプトの話だろうに

あと>>2を読もう
> ・シェルスクリプトのことをシェルってゆうな

はぁ、レベルの低いやつに目をつけあられたな
日本語もろくに理解できてない

406 :デフォルトの名無しさん:2018/08/28(火) 23:03:17.46 ID:Hq0PMDIz.net
ああ、応えは応えてるからね
>>387 のググればすぐ出る
>>392 Cでやってることを頑張ってシェルだ書けば


407 :デフォルトの名無しさん:2018/08/28(火) 23:04:02.06 ID:Hq0PMDIz.net
会話にならない。俺が悪いのか??w

408 :デフォルトの名無しさん:2018/08/28(火) 23:06:22.48 ID:+71nChns.net
> 頑張ればできると思いますが、複雑になりそうです。
と書いてるのに、

複雑になるのが嫌だということも読めていないようだ

Cのコードがシンプルならまだしも、複雑なものを見せて
シェルスクリプトでもCのまねして書け。複雑に書け
とか、全然答えになってないですわ

409 :デフォルトの名無しさん:2018/08/28(火) 23:06:39.91 ID:Hq0PMDIz.net
>>405
> ・シェルスクリプトのことをシェルってゆうな
ああ、すまん

410 :デフォルトの名無しさん:2018/08/28(火) 23:06:43.85 ID:+71nChns.net
>>407
はい

411 :デフォルトの名無しさん:2018/08/28(火) 23:07:59.71 ID:Hq0PMDIz.net
>>408
ww やっぱり、ネタだな。いないだろう、そんなレス書ける思考のヤツはw
なにしたいねんっ

412 :デフォルトの名無しさん:2018/08/28(火) 23:10:58.04 ID:+71nChns.net
ん?まさかと思うが、git "みたいな" オプションを使いたいって話を
例だとわからずに、本当にgitのオプションをそのまま扱うとか
勘違いしてないか?

一行目に
> シェルスクリプトで引数を取り扱ういい方法はないでしょうか?

と書いてあるから、間違うわけ無いと思うが?

> gitみたいにサブコマンドが使えて、

と書いてるのに「みたい」って文字を見逃して、
まんまgitのオプションを扱う方法だと思いこんで、
gitのオプション扱うなら、C言語のソースみればいいだろとか?


うわー、そう理解してしまうのは本気でやばい。ダメな方に意味でやばい

413 :デフォルトの名無しさん:2018/08/28(火) 23:12:22.86 ID:Hq0PMDIz.net
モノホンだったら怖過ぎですよ

414 :デフォルトの名無しさん:2018/08/28(火) 23:14:57.35 ID:+71nChns.net
仕切り直すわ。なんでこの文章で理解できないのかわからないが、
ちゃんと補足する。


シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
getoptとかgetoptsがあるのは知っています。

くり返しいいます。

getoptとかgetoptsがあるのは知っています。


ですが、例えば cp みたいに、cp -a a b とかけるが
cp a -a b や cp a b -a というふうにオプションの順番を入れ替えても動くとか
(もちろんcpは例です。cpみたいなと言ってるわけで、cpのオプションを
扱いたいなんて言っていません)

gitみたいにサブコマンドが使えて、
git --no-pager log --stat のように--no-pagerはgitのオプション、
--statはlogのオプションみたいにする方法がよくわかりません
(もちろんgitは例です。gitみたいなと言ってるわけで、gitのオプションを
扱いたいなんて言っていません)

頑張ればできると思いますが、複雑になりそうです。
(gitのC言語のソースのような複雑なコードは書きたくないです)
なにかいい方法はないでしょうか?

なお他言語を使うとか言うのは禁止です。

415 :デフォルトの名無しさん:2018/08/28(火) 23:17:00.32 ID:gikJ8/5D.net
>>397
「知っています」(ただし使えるとは言っていない)
だろ? どうせ。

gitのオプション解析のソース覗いてみろ。そして俺にあやまるがいい

416 :デフォルトの名無しさん:2018/08/28(火) 23:17:57.87 ID:+71nChns.net
>>415
gitは忘れてください

417 :デフォルトの名無しさん:2018/08/28(火) 23:18:19.53 ID:+71nChns.net
gitの話はしていません。オプションの話をしています。

418 :デフォルトの名無しさん:2018/08/28(火) 23:19:04.23 ID:gikJ8/5D.net
だいたいgitがどうやってオプション解析してるかも知らずに
よくもまあぬけぬけと「getoptは使わない方針で」と言えたもんだな
いままでそんなゴミみたいな思考回路で生きてきて恥かしくないのかね

419 :デフォルトの名無しさん:2018/08/28(火) 23:19:26.80 ID:Hq0PMDIz.net
>>415
>そして俺にあやまるがいい
なんかウケたww

>gitのオプション解析のソース
見たらしいよ。ものすごい文句言われたw

420 :デフォルトの名無しさん:2018/08/28(火) 23:20:08.62 ID:gikJ8/5D.net
>>416
おまえがgitの例を執拗に提示したから悪いんだろ
シェルスクリプトでオプション解析する方法はあるが教えてほしければまず
自分の不手際を謝罪してからにしろ

421 :デフォルトの名無しさん:2018/08/28(火) 23:20:31.97 ID:Hq0PMDIz.net
>>418
直球だなああ。若いなww(しつれい)

422 :デフォルトの名無しさん:2018/08/28(火) 23:20:43.63 ID:+71nChns.net
>>418

>>414には「getoptを使わないで」
などと書いてないんですが、本当に日本語がおそまつ・・・

423 :デフォルトの名無しさん:2018/08/28(火) 23:21:17.44 ID:+71nChns.net
不手際ってなんだろう?

>>414になんか足りないところでもあるの?

424 :デフォルトの名無しさん:2018/08/28(火) 23:21:55.96 ID:gikJ8/5D.net
あーあ。
オプション解析なんてみんながやってることで
そしてそのノウハウもかなり溜ってるんだから
質問の仕方さえ間違えなければすぐさま希望する答えが手に入ったのにね

もったいない
お前のような人間はこれからずっと人生負け組だよww

425 :デフォルトの名無しさん:2018/08/28(火) 23:22:44.60 ID:gikJ8/5D.net
>>423
お前に足りないのは脳味噌と他人に対する配慮だよボケ

426 :デフォルトの名無しさん:2018/08/28(火) 23:23:09.32 ID:+71nChns.net
>>424
お前何がしたいの?

427 :デフォルトの名無しさん:2018/08/28(火) 23:23:35.87 ID:+71nChns.net
>>425
ふむ?なぜかバカにされたと思って、
それでムキになってるのか?

428 :デフォルトの名無しさん:2018/08/29(水) 05:00:00.96 ID:byfOgvI+.net
他板でもそうですが回答側がアレですねw
夏休みで低年齢層が増えていたからでしょうか。

429 :デフォルトの名無しさん:2018/08/29(水) 08:40:49.02 ID:JKfxUNfw.net
IDやワッチョイのつけられる板に越してきた理由が、
こういう感じの無意味な応酬が目に余ったからだしな。
知性はあっても子供だよね。
IDがあってホント良かったよ。

430 :デフォルトの名無しさん:2018/08/29(水) 08:56:49.98 ID:ND6xKvzt.net
>>414 お願いします。

431 :デフォルトの名無しさん:2018/08/29(水) 10:36:23.57 ID:jDyQ3/+0.net
>>430
ない

432 :デフォルトの名無しさん:2018/08/29(水) 14:43:49.86 ID:dthpACHL.net
>>414
頑張って下さい。

ま、しかし、bashだと素のshよりはちょっと楽かな?

433 :デフォルトの名無しさん:2018/08/29(水) 14:46:35.77 ID:jUkhBS20.net
誰か414を3行にまとめてくれ

434 :デフォルトの名無しさん:2018/08/29(水) 14:51:01.95 ID:ND6xKvzt.net
シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
getoptとかgetoptsがあるのは知っています。
頑張ればできると思いますが、複雑になりそうです。

435 :デフォルトの名無しさん:2018/08/29(水) 15:14:53.45 ID:AXEWk4o3.net
getoptとかgetoptsで頑張るのがいいと思います

436 :デフォルトの名無しさん:2018/08/29(水) 15:29:00.41 ID:jUkhBS20.net
getoptとかgetoptsで頑張るのがいいと思います

437 :デフォルトの名無しさん:2018/08/29(水) 16:01:13.07 ID:Nn5B1KsW.net
getoptとかgetoptsで頑張るのがいいと思います

438 :デフォルトの名無しさん:2018/08/29(水) 16:14:32.69 ID:U+j3n810.net
getoptとかgetoptsで頑張るのがいいと思います

439 :デフォルトの名無しさん:2018/08/29(水) 17:01:53.59 ID:rEBrQhP5.net
人生、時には諦める事も必要

440 :デフォルトの名無しさん:2018/08/29(水) 17:22:27.53 ID:zGukP1bd.net
良いプログラマーとは、楽をする為に労力を惜しまないそうです
今回はその労力をここでの問答に費やす訳ですから
粘り強く頑張って頂ければ良いのかなと思いました

441 :デフォルトの名無しさん:2018/08/29(水) 20:56:07.12 ID:zRPnCBM0.net
なにもしないのが一番楽
やっぱりアホしかいないわ

442 :デフォルトの名無しさん:2018/08/29(水) 21:02:14.84 ID:zfnELSlX.net
と、アホが申してます

443 :デフォルトの名無しさん:2018/08/29(水) 21:41:17.05 ID:ySrrhl3u.net
ム版に引っ越してきたばかりにム版の厄介者にいつかれちまったな

444 :デフォルトの名無しさん:2018/08/29(水) 21:45:29.75 ID:PHlZ4Qkz.net
ゆうめいじんなのか。なるほど

445 :デフォルトの名無しさん:2018/08/29(水) 21:46:04.98 ID:jUkhBS20.net
まぁIDすらなかった頃に比べれば顔真っ赤が判別できるのは助かるわ

446 :デフォルトの名無しさん:2018/08/29(水) 23:58:23.02 ID:U+j3n810.net
要求の多いお兄ちゃんは、結局何もしないの?

447 :デフォルトの名無しさん:2018/08/30(木) 09:43:05.13 ID:Le3eFjin.net
しかし引数解析ってそんなに頑張らなくても自作できるよなあ。面倒なだけで。

448 :デフォルトの名無しさん:2018/08/30(木) 09:45:01.72 ID:rxoSSaq5.net
だから面倒なのがいやなんだろ?それぐらいわかれよ

449 :デフォルトの名無しさん:2018/08/30(木) 09:49:03.76 ID:5UlR9u+e.net
引数解析そのものを諦めて別の手段にするとか

450 :デフォルトの名無しさん:2018/08/30(木) 10:11:57.74 ID:lJFNKW+A.net
引数解析って
prog -abcde
とかもできるの?
prog -a -b -c -d
とかしかできないの?

451 :デフォルトの名無しさん:2018/08/30(木) 10:26:46.95 ID:DLN02TyK.net
好きに作ればよくね

452 :デフォルトの名無しさん:2018/08/30(木) 10:57:16.78 ID:8BsM3ej5.net
>>450
普通にできるてかしてくれる。てかそれぐらいちょっと調べればわかること

453 :デフォルトの名無しさん:2018/08/30(木) 11:05:59.54 ID:rxoSSaq5.net
ちょっと調べたけど
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb

ロングオプションが使えないgetoptsか
--longと書いたら-oと誤爆するgetopsしか
見つからなかった

「普通にできる」とはどういうこと?

454 :デフォルトの名無しさん:2018/08/30(木) 11:12:04.78 ID:rxoSSaq5.net
> --longと書いたら-oと誤爆するgetopsしか
--は先に除外すればできるか。リンク先のコードではダメだけど
あとgetopt。これはbashだから、caseの二段構成にするしかないんかな
これを「普通にできる」とは思わんけど

455 :デフォルトの名無しさん:2018/08/30(木) 11:13:00.09 ID:8BsM3ej5.net
getoptはGNUとBSDでは別物。GNUのはロングオプションに対応してる。誤爆って?
getoptsはKorn/POSIX シェル組み込みコマンド(らしい)。ロングオプションは使えないが>>450を「普通」にやってくれる

ロングオプションと羅列を混同してるのか??

456 :デフォルトの名無しさん:2018/08/30(木) 11:17:10.20 ID:rxoSSaq5.net
やっぱりデメリットあるのか。
ロングオプションが使えないのはだめだね
できるけど、べつのことができない

457 :デフォルトの名無しさん:2018/08/30(木) 11:17:50.50 ID:8BsM3ej5.net
なにを言いたいのだか

458 :デフォルトの名無しさん:2018/08/30(木) 11:22:47.19 ID:KGeBif2I.net
やはりそういうことか

459 :デフォルトの名無しさん:2018/08/30(木) 11:24:37.49 ID:rxoSSaq5.net
例えて言うなら、ケーキ食べられる?って聞いて
普通に食べられる(だけどパンは食べられないけどね)
みたいだなーってことだよ

確かにケーキ食べられる?が質問だし、食べられるのだろけど
それ以前のできて当然のものができないっていうのは
がっかりするしか無いなぁってこと

460 :デフォルトの名無しさん:2018/08/30(木) 11:25:04.80 ID:KGeBif2I.net
うん

うん?

461 :デフォルトの名無しさん:2018/08/30(木) 11:26:42.89 ID:8BsM3ej5.net
トンチキが横入りして勝手に俺の思ってたのと違うっていうのか。知らんがな

462 :デフォルトの名無しさん:2018/08/30(木) 11:28:00.65 ID:rxoSSaq5.net
こういうふうに、話の流れから当然だろ?と思うことも
いちいち全部言わないと、話ができないってのは
アスペなんだろうなって思う

463 :デフォルトの名無しさん:2018/08/30(木) 11:30:29.24 ID:8BsM3ej5.net
それはあんたの勝手な話の流れの解釈だな
俺は、>>450は今までとは違う初心者のぶっ込みでしかないと思うけど。ある意味新たな
てか、本題はもう終わってるだろう?あんたの勘違いでwそれを認めたくなくダラダラなだけだな

464 :デフォルトの名無しさん:2018/08/30(木) 11:38:24.71 ID:rxoSSaq5.net
>>463
なんか自分が初心者の質問を解決してあげたみたいに思ってるかもしれないけど、
getoptでそれができるよ(ただしロングオプションは使えないよ)って
教えてあげたのは俺だからね

あんたは普通にできるといっただけで、どうやってできるとは言ってない。
getoptという名前を出すと、すぐにロングオプションが使えないことも
わかってしまうからね。制限付きであることを隠したいから、名前を出さずに
普通にできるという言葉でごまかしたんでしょう?

465 :デフォルトの名無しさん:2018/08/30(木) 11:52:42.25 ID:TV9jsMCb.net
>>464
なんでそんなイライラしてるの?

466 :デフォルトの名無しさん:2018/08/30(木) 12:05:15.24 ID:rxoSSaq5.net
>>463がイライラしてるのが移ったんだろうさw

467 :デフォルトの名無しさん:2018/08/30(木) 12:05:25.60 ID:8BsM3ej5.net
>>464
解決してあげたww。次の文とかからもそこが大事なのねwなるほど
俺は別にお前のように俺が俺がというのはないなあ。単なる雑談の一種でしかないな
なので、お前のその言っていること全体がイミフメイ。妄想するのは勝手だが、妄想をダダ漏れさせてぶつけられても困ります。あとは勝手にやっとくれ

468 :デフォルトの名無しさん:2018/08/30(木) 12:07:53.14 ID:rxoSSaq5.net
ほらね。イライラしてるw

469 :デフォルトの名無しさん:2018/08/30(木) 12:10:55.47 ID:rxoSSaq5.net
雑談したいなら雑談スレに行けばいいのにね

470 :デフォルトの名無しさん:2018/08/30(木) 12:37:21.81 ID:KGeBif2I.net
まぁ暇なんだろ
ここでやるなには同意だが

471 :デフォルトの名無しさん:2018/08/30(木) 12:55:18.44 ID:8BsM3ej5.net
暇なのは否定しないが、雑談の「一種」と言っているのだけどな
すんなっていってるそれも雑談じゃないの?

472 :デフォルトの名無しさん:2018/08/30(木) 18:15:49.30 ID:43MmhEYe.net
>>453 >>464
都合のいい先走った解釈はされないほうが。
>>450 ではロングオプションのことはきいていないですよ。

473 :デフォルトの名無しさん:2018/08/30(木) 19:45:19.96 ID:rxoSSaq5.net
>>472
そんなんだからアスペって言われるんだよ

474 :デフォルトの名無しさん:2018/08/31(金) 04:38:19.15 ID:6Alav1/S.net
ひらめいた!

prog -abcde
を引数解析するには
prog -a -b -c -d -e
に変換すればいいんじゃね?

【お題】
prog --foo -abcde --bar param

prog --foo -a -b -c -d -e --bar param
と実行したように見せかけるにはどうしたら良いか?

475 :デフォルトの名無しさん:2018/08/31(金) 05:07:23.65 ID:QWemr4wG.net
>>474
getopt(1)を一度でも使えばそんなお題を出さずにすむのに

476 :デフォルトの名無しさん:2018/08/31(金) 05:17:02.08 ID:91l/t0hy.net
上のちょっと変わった人だろう

477 :デフォルトの名無しさん:2018/08/31(金) 07:41:02.63 ID:6Alav1/S.net
getoptはロングオプション使えないじゃん

478 :デフォルトの名無しさん:2018/08/31(金) 07:58:25.86 ID:ii43Mx6H.net
バッチはシェルではないけどMSDOSはシェルなん?

479 :デフォルトの名無しさん:2018/08/31(金) 08:33:46.47 ID:NkcoCIHS.net
おまえら車輪の再発明が好きだな(´・∀・`)

480 :デフォルトの名無しさん:2018/08/31(金) 08:44:41.63 ID:csqJsH/K.net
>>478
MS-DOSはWindows以前に使われていたCLIベースのOSの名前
MS-DOSではcommand.comというシェルが使われいていた
バッチファイルはcommand.com用のシェルスクリプト
バッチファイルはバッチ処理を行うために使われていたシェルスクリプト

Windows 9x系でもcommand.comは存在しDOSプロンプトとも呼ばれる。
16bitアプリケーションでありMS-DOS互換環境を提供する役割もあった

Windows NT系ではMS-DOSが完全に廃止され、DOSプロンプトから
名前を変えてコマンドプロンプト(cmd.exe)が標準のCLIシェルとなった。
(32bit版では互換性のためにcommand.comも残っているが
NT系はMS-DOSが存在しないため、実行環境はWindows 95と大きく異なる)

まとめると
MS-DOS、Windows 9x(95, 98など)、Windows NT(XP、7、10など)がOSの名前
command.com、cmd.exeがシェルの名前
拡張子 .bat .cmd のファイルが、バッチファイル
バッチファイルで行う処理がバッチ(処理)
シェルでバッチ処理を行うためのスクリプトがシェルスクリプト

481 :デフォルトの名無しさん:2018/08/31(金) 12:15:59.98 ID:4WvfdMT+.net
めっちゃ早口で言ってそう

482 :デフォルトの名無しさん:2018/08/31(金) 12:54:57.94 ID:hD6bHOXY.net
録音してゆっくり再生してようやっと何言ってるかわかる、ぐらいかな

483 :デフォルトの名無しさん:2018/08/31(金) 13:05:55.30 ID:DXKxWv2O.net
>>481-482
本当に自覚してないようだから教えてあげるけど
そういうくだらない雑談をよそでやんなさいって言ってんの。

それともそのレスになにか価値があるというのなら
どうぞいってください。話を聞くよ?

484 :デフォルトの名無しさん:2018/08/31(金) 13:17:47.02 ID:ANKbwE4L.net
子供だなあ

485 :デフォルトの名無しさん:2018/08/31(金) 13:42:20.88 ID:hD6bHOXY.net
このスレは君が価値を感じる書き込みをしなければならないスレではない。

486 :デフォルトの名無しさん:2018/08/31(金) 13:43:18.09 ID:hD6bHOXY.net
キリッ

487 :デフォルトの名無しさん:2018/08/31(金) 13:44:06.35 ID:sUUndK8T.net
ここって5chだよな?

488 :デフォルトの名無しさん:2018/08/31(金) 13:44:30.70 ID:H6r51FSy.net
うん

489 :デフォルトの名無しさん:2018/08/31(金) 14:03:56.61 ID:DXKxWv2O.net
せっかくプログラム板に移動したのに、荒らしは消えないのねw

490 :デフォルトの名無しさん:2018/08/31(金) 14:48:59.64 ID:LaBPL+3F.net
どういうぎゃぐなのかと思わせられるほどの無自覚ぶり。他人に自覚とか言ってるのに

491 :デフォルトの名無しさん:2018/08/31(金) 15:00:22.51 ID:/mKi/Wls.net
             )ソ)
          ッλ ノ(.,ノ)
         (゙- ..::.::. . (
        (ソ.  .彡⌒ミ. )ソ)
        ).::'; (´・ω・`) ス (
       ソ .::;';'(つ ⊂)::;';'`〜、.
       (  :;';' |__∧_| ::;';'  ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
 さ あ 禿 げ 上 が っ て ま い り ま し た


492 :デフォルトの名無しさん:2018/08/31(金) 15:07:49.61 ID:H6r51FSy.net
頭に刺さってる髪の数だけ書き込みを許してやる

493 :デフォルトの名無しさん:2018/08/31(金) 15:20:54.53 ID:vplIlyda.net
ファイルの更新について教えてください

フラッシュメモリ(SDカード)にファイルを保存しています
ご存知のようにフラッシュメモリには書き換え回数があり
使いすぎると壊れるのですが

シェルでリダイレクトして追記していく形にした場合
追記分のブロック数分が更新されると考えていいのでしょうか
もしくは100バイト追記してもファイルの大きさが100MBあったら
ファイルシステム上再配置されて
フラッシュメモリ上は100MB相当(のブロック)の更新がかかりますか?

またviなどのエディタで更新した場合はどうなのでしょうか?
やはり100MB分の更新になりますか?

494 :デフォルトの名無しさん:2018/08/31(金) 16:11:16.42 ID:j8UTgVSe.net
>>493
OSやドライバに依存する。

でもだいたいはライトキャッシュがあって実際の書き込みは中々されないと思うよ。
ましてや書き込み回数が多くなると劣化するメデイアと初めからわかっているものに対してバンバン書くようなことは普通のドライバならしないと思う。

495 :デフォルトの名無しさん:2018/08/31(金) 19:32:51.61 ID:OUCwI4mz.net
この動きって仕様ですか?
No1と同じような動きを$@を一旦別の変数に入れて
実行したいのですがなにか方法はありますか?

./test.sh "a 1" "b 2"

# No1
for i in "$@"; do
 echo $i
done
# a 1
# b 2

# No2
args="$@"
for i in "$args"; do
 echo $i
done
# a 1 b 2

# No3
args="$@"
for i in $args; do
 echo $i
done
# a
# 1
# b
# 2

496 :デフォルトの名無しさん:2018/08/31(金) 19:46:53.74 ID:QWemr4wG.net
>>495
仕様だと思う。
$@の時点ではシェルが解釈した引数ごとに分かれているのに対して
"$@"←のようにしてしまうとそれがひとまとまりに見做されてしまい
結局args="a 1 b 2"と代入していることになる。

497 :デフォルトの名無しさん:2018/08/31(金) 19:51:37.92 ID:QWemr4wG.net
解決方法はevalやらを使って
#! /bin/sh

n=1
for i in "$@"; do
eval "arg$n=\"$i\""
n=$((n + 1))
done
こうやるといいんでは。
arg3とかで「3番目の引数」を参照できるようになってる筈

498 :デフォルトの名無しさん:2018/08/31(金) 19:53:52.69 ID:QWemr4wG.net
ていうか質問の内容から察するに二種類の別の引数を処理したいんだよね?
すなおにPythonとか使ったほうがいいとは思うが……
俺が示したやり方だと引数の位置が絶対参照だし 引数を処理する度に変数が衝突するし

もちろん俺の方法が下手というのもあるが まあシェルスクリプトで引数処理は鬼門であることは間違いない

499 :デフォルトの名無しさん:2018/08/31(金) 19:59:38.59 ID:OUCwI4mz.net
どう解釈すれば、この挙動を理解できますかね?

./test.sh "a 1" "b 2"

for i in "A $@ Z"; do
echo $i
done
# A a 1
# b 2 Z

for i in "A Z"; do
echo $i
done
# A Z

500 :デフォルトの名無しさん:2018/08/31(金) 20:04:13.23 ID:4o8e5lPA.net
>>493
シェルの追記はかからない。
vi/vim はかかる。

>> 495
仕様。配列にぶっこむ。
HOGE=("$@")
for ent in "${HOGE[@]}"; do
echo $ent
done

501 :デフォルトの名無しさん:2018/08/31(金) 20:20:45.59 ID:4o8e5lPA.net
>>499
"A $@ Z" → A\_a\_1_b\_2\_Z
"A Z" → A\_Z
アンダースコアはスペースと思ってくれ。
ダブルクォートはスペースをエスケープしてる。
man に載ってたと思って読んでたが見つからんかった。

502 :デフォルトの名無しさん:2018/08/31(金) 20:47:48.56 ID:6cxiNGZa.net
man の特殊パラメータの項に書いてあるのはこういうことか?
"A $@ Z" → "A ""$@"" Z"
確かに動作は同じだ。
試したコードはこんな感じ

for i in "$@"; do
echo $i
done
for i in "A $@ Z"; do
echo $i
done
for i in "A ""$@"" Z"; do
echo $i
done

503 :デフォルトの名無しさん:2018/08/31(金) 20:52:30.52 ID:OUCwI4mz.net
よくわからんね。 $@がダブルクォートの中に入ってたら
"$1" "$2" ・・・ "$n" に展開されるってことかな?

でもそれだと
# A a 1
こうなる理由がよくわからなんのだよな

"A $@ Z" は
"A $1" "$2" "$3" ・・・ "$n Z" に
展開されているとしか思えない

504 :デフォルトの名無しさん:2018/08/31(金) 21:53:31.46 ID:KmkRvZ7D.net
>>495
IFS="\n" を設定すると No3 は
a 1
b 2

>>499
IFS="\n" を設定して
args="$@"
for i in A $args Z; do
echo $i
done
ならば
A
a 1
b 2
Z

となりました

505 :デフォルトの名無しさん:2018/08/31(金) 23:13:07.36 ID:QWemr4wG.net
>>504
>>497じゃだめなん?

506 :デフォルトの名無しさん:2018/08/31(金) 23:15:52.07 ID:QWemr4wG.net
>>503
あ すまんこっちか。
>>497じゃだめなの?

507 :デフォルトの名無しさん:2018/08/31(金) 23:29:17.32 ID:OUCwI4mz.net
イイかダメかで言えば、arg1、arg2、arg3、・・・では
ループできないのでこれだけではだめですね。
シェルスクリプトにもライブラリが欲しい所ですね

508 :デフォルトの名無しさん:2018/08/31(金) 23:44:36.90 ID:4ZfpOo1s.net
そんなもんいらない
そんなん使うぐらいなら別のスクリプトを
シェルから使う

ホントな頭悪いことばっかりいってるわ

509 :デフォルトの名無しさん:2018/09/01(土) 00:01:57.02 ID:Z9gelboG.net
>>507
もう何度も言ってるが別の言語を使え
お前は家で生ハムを作ろうとしているようだぞ
素直に店で買ったほうが旨いし危険性も少ないぞ

510 :デフォルトの名無しさん:2018/09/01(土) 04:09:47.42 ID:IN1XIdeB.net
最初は使い捨てだからとシェルスクリプトを書くが
なんだかんだ使い続けて、利便性向上の為にアップデートを続け
最後には複数ファイルに及ぶ意外に大規模な代物に
今更マトモな言語で作り直すのも面倒臭い
やるなら最初からマトモな言語で作っておけば良かったと

511 :デフォルトの名無しさん:2018/09/01(土) 05:19:02.92 ID:Z9gelboG.net
>>510
その通り
一部のよほど頭の良い人(USP研究所とかそのあたり)じゃないと
まともに扱えない単純だけど難しい言語

ほとんどの人間はPythonやらを使ったほうがいい
Pythonはエラー処理やセキュリティ関連も既定で充実してるから
バカでもプログラムが書けるようになってる

512 :デフォルトの名無しさん:2018/09/01(土) 06:18:36.99 ID:j0QmLW2E.net
シェルスクリプトを他のスクリプトへコンバートするツールとか無いのかな?

513 :デフォルトの名無しさん:2018/09/01(土) 07:21:55.56 ID:mPcVbgud.net
>>510
シェルスクリプト使うのは、
シェルスクリプトでやるのが適している場合で
規模で決めるもんじゃないだろ?

514 :デフォルトの名無しさん:2018/09/01(土) 07:58:52.51 ID:dtHP3qHu.net
>>513
規模で決めても変わらんだろ
シェルスクリプトに向いてなければどーせ規模が増える

515 :デフォルトの名無しさん:2018/09/01(土) 08:09:40.25 ID:mPcVbgud.net
例えば、rbenvとか、それなりの規模だけど
シェルスクリプトで作るのが適している

516 :デフォルトの名無しさん:2018/09/01(土) 08:10:56.58 ID:kUpkBQ3x.net
>>493-494
>追記分のブロック数分が更新されると考えていいのでしょうか
たぶん、追記分だけ

ページサイズが4KB で、20KB のファイルがある時、
追記すると、最初の5ページに変化はない。
6ページ目が追加されるだけ

ただし、ファイルの中ほどを更新した場合は、どうなるかわからない。
3ページ目だけを更新した場合、1, 2, 4, 5ページに変化はないけど、

3ページ目のサイズが大きい場合、6ページ目を確保して、それを間に入れるから、
1, 2, (3, 6,) 4, 5 のようなページの並びになるのかな?

まあ、ファイルシステムの説明を読まないと、わからない

517 :デフォルトの名無しさん:2018/09/01(土) 08:19:23.69 ID:kUpkBQ3x.net
vagrant, chef は、Ruby で書かれているだろ

大きい手順書を、シェルスクリプトで書くのは、途方もない!

518 :デフォルトの名無しさん:2018/09/01(土) 08:31:44.88 ID:Z9gelboG.net
・テスト環境……なし
・ドキュメント生成……なし
・バージョン管理……なし
・パッケージシステム……なし
まあそりゃ大規模開発には向かないわな。
やってもいいのは上記の諸々を自作できるような賢い人間。
(俺を含めた)普通の人間は「連番画像をDLする」とか「写真フォルダを整理する」
ときに一度限りのシェルスクリプトを書く程度に留めて
開発はPythonやRubyやJava(個人的に後者二つはあまり好きじゃないが)を利用するのが一番いい。
もちろん自身にとってもだが,他人にとっても不具合が少ないし事故が起こりにくいというのは大きな利点でしょうね。

519 :デフォルトの名無しさん:2018/09/01(土) 08:38:18.84 ID:mPcVbgud.net
>>517
シェルに関係ないツールなのだから当たり前では?

手順書がいつシェルに適していると?
rbenvは手順書じゃないよ

520 :デフォルトの名無しさん:2018/09/01(土) 08:45:05.20 ID:mPcVbgud.net
>>518
それ理屈にあってないだろ

"作れない" ならともかく、現在ないから大規模開発に向かないという理屈なら、
あれば大規模開発に向いているって言うことになるぞw

例えば、今はsystemdに役目を移してしまったが、
Linuxの起動の仕組みはシェルスクリプトだった。

ちなみにgitも結構シェルスクリプトが含まれているよ
https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh

それにテストもドキュメントもバージョン管理もあるね。
(って今気づいたがバージョン管理ってなんだ?)

521 :デフォルトの名無しさん:2018/09/01(土) 08:48:34.52 ID:mPcVbgud.net
なんか、JavaScriptと同じ空気を感じるな。
いろんな仕組みがないから、簡易的な用途にしか使えないと
最初は思われていたが、それらの仕組みが揃った今では
サイト全体をJavaScriptで作るのもありえないことではなくなった。

522 :デフォルトの名無しさん:2018/09/01(土) 08:50:14.95 ID:dtHP3qHu.net
>>515
前提条件なしのインストーラーみたいな選択肢が他に挙がらないパターンは違うだろ

適してるかどうかで考えるってのは誰も否定せんわ
篩や目安として考えるのが規模だって話だろ

523 :デフォルトの名無しさん:2018/09/01(土) 08:53:58.50 ID:mPcVbgud.net
>>522
だから規模で判断するのは間違いという結論になると言ってるんだが?

524 :デフォルトの名無しさん:2018/09/01(土) 08:56:54.80 ID:J8s4Euww.net
>>513
具体的にはどういう場合?

525 :デフォルトの名無しさん:2018/09/01(土) 09:00:31.35 ID:mPcVbgud.net
>>524
だからrbenvっていってるじゃん。

526 :デフォルトの名無しさん:2018/09/01(土) 09:01:03.88 ID:J8s4Euww.net
>>525
具体的に

527 :デフォルトの名無しさん:2018/09/01(土) 09:03:56.67 ID:dtHP3qHu.net
>>523>>525
それは例外であって反例ではない

528 :デフォルトの名無しさん:2018/09/01(土) 09:07:50.87 ID:kUpkBQ3x.net
仮想化は、典型的な手順書だろ。
パッケージをダウンロードして、インストールして、環境変数PATH を通して

シェルスクリプトで作るのは面倒。
Ruby でOK

529 :デフォルトの名無しさん:2018/09/01(土) 09:16:02.22 ID:Z9gelboG.net
まあRubyじゃなくてもRubyのように
ドキュメント生成やパッケージ管理ができればいいんだよね
PythonがいいよPythonが。

530 :デフォルトの名無しさん:2018/09/01(土) 09:23:11.21 ID:mPcVbgud.net
>>527
え?今求められてる「例」は
「シェルスクリプトが適している物」でしょ?

いつの間に質問が「シェルスクリプトが適さない物」にすり替わって、
rbenvを「例外」としてだしたと思ったの?

531 :デフォルトの名無しさん:2018/09/01(土) 09:24:47.95 ID:HRxiLrgz.net
pwshが便利すぎてな

532 :デフォルトの名無しさん:2018/09/01(土) 09:25:44.74 ID:mPcVbgud.net
>>528
> 仮想化は、典型的な手順書だろ。

たまたま手順書がシェルスクリプトで書かれていたからって、
手順書だからというのはシェルスクリプトで書く理由にはならないんだよ。

あんたはrubyが入ってない、入れたくないという環境でも
動かしたいという理由とごっちゃにしてるだけ

533 :デフォルトの名無しさん:2018/09/01(土) 09:37:39.89 ID:dtHP3qHu.net
>>530
分かった、好きにしてくれ

534 :デフォルトの名無しさん:2018/09/01(土) 09:45:09.27 ID:mPcVbgud.net
理解したならいい。
好きにするのは普通にしている。
ここでやってるのは、お前に理解させることだからな。
反論がなくなればそこで終了だ

535 :デフォルトの名無しさん:2018/09/01(土) 10:52:03.88 ID:f+i9u0Am.net
>>531
Unix に新しいシェルが!? と思ったら PowerShell だったのね

536 :デフォルトの名無しさん:2018/09/01(土) 11:17:42.65 ID:qlVPfHnQ.net
結局どういう場合にシェルが適しているのか一言も言ってない件

537 :デフォルトの名無しさん:2018/09/01(土) 11:35:25.52 ID:mPcVbgud.net
>>526
1. シェル環境そのものをカスタマイズするためのもの(例 rbenv)
通常のプロセスはサブプロセスとして起動するので、カレントシェルのカスタマイズはできない

2. 特定の言語のライブラリやランタイムに依存したくないもの(例 Docker)
あらかじめ入っているものだけで起動できるので、環境を整える必要がなくなる
コンテナやIoTといった小さな制限されたイメージでも使える


逆にさ、他の言語の方こそ「適している理由」が少ないと思うな。
例えばRubyで作ったものはPythonで作ることだってできるだろ?

538 :デフォルトの名無しさん:2018/09/01(土) 11:42:20.50 ID:mPcVbgud.net
3. CLIコマンドとCLIコマンドのグルー言語
リダイレクトやパイプを使った処理はシェルスクリプトが得意
他の言語でもネイティブに記述するのが面倒だからか
内部的にシェルを経由してたりするしな

539 :デフォルトの名無しさん:2018/09/01(土) 11:48:25.44 ID:qlVPfHnQ.net
>>537
1はそもそも対象となるものが少ない
2は例えばC#ですら可能

540 :デフォルトの名無しさん:2018/09/01(土) 11:55:22.51 ID:mPcVbgud.net
>>539
はぁ、だから

> 逆にさ、他の言語の方こそ「適している理由」が少ないと思うな。
> 例えばRubyで作ったものはPythonで作ることだってできるだろ?

こう書いたのに。

たとえ対象となるものが少なくとも、
適している理由があるだろ?
他の言語は、その適してる理由すらないのにって話だよ

2がC#ですら可能? じゃあ俺が使ってるルータ(OpenWrt)で動かしてみなよ

541 :デフォルトの名無しさん:2018/09/01(土) 11:57:50.49 ID:mPcVbgud.net
参考までに言っておくと、俺が扱ってるルータは
比較的スペックが高いものだが、Flashのサイズは16MBしかなく
ファームウェアを除いたら空き容量は10MB程度だからな

542 :デフォルトの名無しさん:2018/09/01(土) 12:11:14.41 ID:HRxiLrgz.net
自分が今使ってる環境を前提にして
同じように考えろと周りにも要求する人ってたまにいるけどその議論に意味あるのか?

543 :デフォルトの名無しさん:2018/09/01(土) 12:23:32.27 ID:mPcVbgud.net
>>542
意味ないだろうね。

だから sh しか入ってない、入れられない
環境っていうのも考慮しろ。

贅沢な環境を前提とするのは
大間違いだって言ってる。

544 :デフォルトの名無しさん:2018/09/01(土) 12:35:03.95 ID:HRxiLrgz.net
>>543
だからって極貧環境を前提にするのも間違い

極貧環境でリッチなスクリプトが動かないのはわかった
その環境ではshは素晴らしいものだ
スクリプト言語の完全敗北だよ
そりゃ動かせないのに勝負になるわけない
この結論に議論の余地はないだろう

じゃあ議論が終わったので次に行こう
業務規約でツールインストール禁止のWindows 7環境でshのメリットはあるか?

545 :デフォルトの名無しさん:2018/09/01(土) 12:36:44.49 ID:mPcVbgud.net
>>544
はぁ。前提としてねーだろ
そういう環境もあると言ってるだけなのに、

「無視するのが前提」で話をしてるのは
お前なんだよ

これからは「考慮するという前提」でいくからなw

546 :デフォルトの名無しさん:2018/09/01(土) 12:38:38.54 ID:dtHP3qHu.net
>>542
意味ないね

そもそも根本的に考えてることは同じハズなんだが、イメージ対象が違ったりアスペみたく妙なとこ拘り始めると話が拗れる

547 :デフォルトの名無しさん:2018/09/01(土) 12:43:20.26 ID:mPcVbgud.net
>>544
> 業務規約でツールインストール禁止のWindows 7環境でshのメリットはあるか?

WindowsとLinuxの両方で使うなら、
両方のOSでそのまま動くツールがほしいね

まずツールインストール禁止なんだから
任意のバイナリ、RubyやPythonをインストールすることは禁止だ。
(バイナリOKならbusyboxでもダウンロードすればいいということになる)

だからバッチファイル or PowerShell or JavaScript(JScript) と
シェルスクリプト の二段構えにするしか無いだろう。

二重にコードを開発するのが嫌なら、簡易インタプリタ言語でも作って、
WindowsではJavaScrptで、Linuxならシェルスクリプトで
パースしてコマンドに変換して実行とかかな

ってことで、シェルスクリプトでもそういう用途のために
ライブラリとか充実してるといいよねという話に戻すw

548 :デフォルトの名無しさん:2018/09/01(土) 12:46:29.79 ID:mPcVbgud.net
皮肉が伝わっていなそうだから言っておくが、>545は
「どちらもなにかを前提としてる」だろってこと

そして2つの違いはその前提が
「多くの環境に対応する」前提 なのか
「特定の環境を切り捨てる」前提なのかってこと

549 :デフォルトの名無しさん:2018/09/01(土) 13:52:25.73 ID:Z9gelboG.net
結局シェルスクリプトは大規模開発に向いてるの?

550 :デフォルトの名無しさん:2018/09/01(土) 13:52:43.19 ID:7zKoqoPj.net
最近知ったけど&&や||使えばifによる判定不要なんだね

ls aaa && echo exists
ls aaa || echo not exists

でもプログラムやってきてた自分としては
if使っちゃうかなあ・・・

551 :デフォルトの名無しさん:2018/09/01(土) 14:21:11.49 ID:mPcVbgud.net
> でもプログラムやってきてた自分としては
???

俺もプログラムやってきたが、こういう書き方を知った(意識した)のはperlが最初だな

http://perldoc.jp/func/die
> chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
(or は優先順位が違うだけで || と同じ)

以降Rubyや
https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#or
> demo || die
> demo or die

JavaScriptでも使うようになった
https://stackoverflow.com/questions/51206667/or-in-ternary-operator-using
> (a === 0 || b === 0) && console.log('aloha amigo')

(Perlよりも前にやっていた)C言語でもできたんだが、当時は使ってなかったな。
https://qiita.com/gyu-don/items/a0aed0f94b8b35c43290
> a || error(); // if(!a){ error(); } のような挙動
> a || (a = 1); // if(!a){ a = 1; } のような挙動(代入が式である言語で有効)

こういう書き方ができないのはVBぐらいじゃないか?
VBは短絡評価じゃないから、先に|| や && の右側が評価されてしまったはず


えーと、いつから自分がプログラムやってきたと錯覚していた?

552 :デフォルトの名無しさん:2018/09/01(土) 14:44:03.83 ID:2NCbxz5b.net
独り舞台の全レス

553 :デフォルトの名無しさん:2018/09/01(土) 14:46:14.88 ID:mPcVbgud.net
あ、はい
(下らないレスは無視してるけどなw)

554 :デフォルトの名無しさん:2018/09/01(土) 15:07:44.71 ID:7KL6nh8i.net
一日中張り付いてるやべー奴

555 :デフォルトの名無しさん:2018/09/01(土) 16:10:37.86 ID:W/mc6eBq.net
>>516
> 1, 2, (3, 6,) 4, 5 のようなページの並びになるのかな?
重複排除以外ならない。
アプリからそれを書き込もうとすると
write(fd, buf/*3, 6, 4, 5*/, size)
を実行するしかない。

>>549
向いていない。

556 :デフォルトの名無しさん:2018/09/01(土) 17:14:12.00 ID:mPcVbgud.net
>>555
> 向いていない。
理由もお願いします。
解決可能な理由だと意味ないですから

557 :デフォルトの名無しさん:2018/09/01(土) 17:30:46.73 ID:qlVPfHnQ.net
>>540
https://github.com/dotnet/core/issues/1165

558 :デフォルトの名無しさん:2018/09/01(土) 17:43:01.15 ID:vZp6TokW.net
何行以上なら大規模なのか、1人で開発したら大規模と言えるのか。
シェルスクリプト環境自体がシェルスクリプトを用いた大規模分散開発の成果と言えるのかもしれない。


という夢を見た

559 :デフォルトの名無しさん:2018/09/01(土) 17:46:41.85 ID:mPcVbgud.net
>>557
ありがとう。やっぱりうちのOpenWrtでは動きそうもないね。

560 :デフォルトの名無しさん:2018/09/01(土) 17:47:16.28 ID:qlVPfHnQ.net
>>559
なぜ?

561 :デフォルトの名無しさん:2018/09/01(土) 17:59:21.16 ID:mPcVbgud.net
>>560
最初に思ったのが、glibcではないから。
たしかuClibcだっけ?と思ったが、musl libcに変わっていた。
glibc互換らしいから動くかもしれない。

次に思ったのがCPU。うちのルータは MIPS
ここを見るとARMはあるがMIPSはないのでアウト。動かない
https://www.microsoft.com/net/download/dotnet-core/2.2

おまけでARMのコアバイナリサイズ。圧縮状態で30MB近くある
展開したら60MB?。空き容量は10MBしかないので到底入らない。
ちなみにOpenVPNとか入れるんで10MB全部使えるわけじゃない
USBメモリを使うという裏技があるから不可能ではないが。

あとは使用メモリも気になるな。高スペックルータなので、
128MB"も"搭載されているが、どれくらいメモリ食うんだろうね

562 :デフォルトの名無しさん:2018/09/01(土) 18:00:20.51 ID:mPcVbgud.net
訂正
× おまけでARMのコアバイナリサイズ。圧縮状態で30MB近くある
○ おまけでARM版の.NET Coreランタイムのバイナリサイズ。圧縮状態で30MB近くある

563 :デフォルトの名無しさん:2018/09/01(土) 18:02:43.20 ID:7GOU6dDm.net
ちょっと理解に苦しむんだが、ルーターで大規模開発するわけ?

564 :デフォルトの名無しさん:2018/09/01(土) 18:02:59.63 ID:/wwW4VSs.net
ちっちゃいコマンドを一杯つくって
そのコマンドを一杯組み合わせてどんどんコマンド作るのには最適
標準入出力でひたすら組み合わせて使えるのがベストだ

一つのシェルスクリプトでたくさんの機能の処理を書こうというのが
そもそもの間違い

単体のシェルスクリプトで完結して使える簡単な機能を作る

わかりましたか

565 :デフォルトの名無しさん:2018/09/01(土) 18:08:41.62 ID:mPcVbgud.net
>>563
俺も理解に苦しむな。

だれがルータで大規模開発するなんて言ったんだ?

566 :デフォルトの名無しさん:2018/09/01(土) 18:10:57.55 ID:7GOU6dDm.net
>>561
じゃあmonoで良いやん

567 :デフォルトの名無しさん:2018/09/01(土) 18:14:25.88 ID:eduRMzlf.net
シェルしか書けないジジイが必死だな

568 :デフォルトの名無しさん:2018/09/01(土) 18:19:40.37 ID:mPcVbgud.net
>>564
いやわからんw

「簡単な機能」とはどういう機能なのか
理論的には、たくさんのコマンドを組み合わせるだけという
シェルスクリプトに適した単純な機能であっても、その量が多くなれば大規模になるだろう?
「機能の種類や複雑さ」と「機能の量」は別々の概念だ

俺にとっては大規模といったら10万行超えるぐらいのものなんだが、
その前提でいいのであれば1000行程度は小規模だろう。だがその
1000行でもライブラリあったほうが楽になるだろうと用意に予測できる

例えばgit subtreeが865行だな
https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh

569 :デフォルトの名無しさん:2018/09/01(土) 18:23:56.55 ID:+0pKcVMh.net
理論とか言い出しちゃった

570 :デフォルトの名無しさん:2018/09/01(土) 18:38:06.88 ID:+0pKcVMh.net
誰が提唱した理論だろう?
謎理論?

571 :デフォルトの名無しさん:2018/09/01(土) 18:42:01.49 ID:mPcVbgud.net
シェルスクリプトが大規模に向いてないという理由を
誰も答えてくれないので俺が書いてやる

まず前提としてどんな言語であっても、言語だけでは大規模開発を
するのは無理RubyでもC#でもJavaであってもだ。
少し前まではJavaScriptも大規模開発に向かないと
言われていたはずだ。それが解決したのは何故か?

大規模開発をするのに必要なのは言語じゃない。フレームワークとライブラリだ。
どんな言語でも大規模開発するためにフレームワークとライブラリを使うだろう?
逆にこれらを使わないで大規模開発なんて到底無理だろ?

JavaScriptが大規模開発できるようになったのも、
フレームワークとライブラリが補完されたからだよ。
シェルスクリプトも昔のJavaScriptと同じ状況。

といっても俺はシェルスクリプトで大規模開発をすることには興味がなく、
せいぜい数千行程度の中規模ぐらいまでしかやることはないだろう。
何故かと言うと単にシェルスクリプトに適した内容で
10万行を超えるようなものが思いつかないからだ

だがそれはシェルスクリプトで大規模開発ができないということにはならない。
実際USPとかいうので、無印良品や東急ハンズのシステムが作られている(いた?)だろ
http://www.atmarkit.co.jp/news/200909/07/lltv03.html
https://www.hands-lab.com/tech/entry/62.html
(適してないとは思うが)足りない部分を補えば大規模開発だってできることは証明済みだよ

まとめると、現在のシェルスクリプトが大規模開発に向いてないのは
フレームワークやライブラリが不足しているから。
俺がシェルスクリプトで大規模開発をやらないのは、
シェルスクリプトが適した内容で大規模なものを思いつかないから。
それはそれとして中規模を小規模にするためのフレームワークやライブラリは欲しい。

572 :デフォルトの名無しさん:2018/09/01(土) 18:46:31.18 ID:IN1XIdeB.net
休日は議論が捗りますね

573 :デフォルトの名無しさん:2018/09/01(土) 18:46:41.92 ID:/wwW4VSs.net
コマンドラインインタープリタを自動化したもんを
シェルスクリプトとというの

頭悪いバカのみんな分かった?

頭悪いバカは用途がわかってない、、、

574 :デフォルトの名無しさん:2018/09/01(土) 18:49:33.52 ID:/wwW4VSs.net
たとえばなこのスレにいるような
コマンド叩ける程度の知能しかないオペレーターみたいなヤツが
シェルスクリプトだったらいっぱい自動でコマンド叩けると
必死に主張してるワケ

575 :デフォルトの名無しさん:2018/09/01(土) 18:55:47.33 ID:mPcVbgud.net
お、今気づいたが、git subtreeってそのオプションの多さに比べて、
コードが少し少ないんじゃないか?と思ったら、

https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L11-L33

OPTS_SPECを定義して、git rev-parse --parseopt つかって
何やらオプションを正規化してるんだな
gitにこんな機能があったとは

とは言え、劇的にコードが減ってるわけじゃないから
これなら http://docopt.org/ の方が優れてるな

576 :デフォルトの名無しさん:2018/09/01(土) 18:59:35.38 ID:mPcVbgud.net
>>574
「コマンドをいっぱい叩ける」というのは量の話。
「適した用途」というのは量(大規模か否か)ではなくて
>>537-538に書いたような、処理の内容の話

いい加減、量にこだわるの止めません?w

577 :デフォルトの名無しさん:2018/09/01(土) 19:05:44.41 ID:/wwW4VSs.net
シェルスクリプトでじかに文字列の処理なんかしないからな
sedやawkを使っても
頭が致命的に悪いとコレもシェルスクリプトで書いてやりたいとなるわけか

なるほどな

578 :デフォルトの名無しさん:2018/09/01(土) 19:08:19.43 ID:jmAsDv6y.net
なんの話してたんだっけ?

579 :デフォルトの名無しさん:2018/09/01(土) 19:09:38.27 ID:mPcVbgud.net
サマータイムスレにもいた半角使いのキチガイ野郎かな?
みんな、こいつの味方するの?w

580 :デフォルトの名無しさん:2018/09/01(土) 19:10:41.10 ID:mPcVbgud.net
>>578
オプション(引数)解析の話を
ずーっと続けてますよw

581 :デフォルトの名無しさん:2018/09/01(土) 19:17:26.68 ID:HKyHRnHf.net
>>568
その理論について詳しく教えてくれw

582 :デフォルトの名無しさん:2018/09/01(土) 19:20:00.37 ID:mPcVbgud.net
>>581
>>553

583 :デフォルトの名無しさん:2018/09/01(土) 19:22:31.10 ID:4jvmXnIZ.net
ム版来たせいで、ム版名物の半角君も長文君も呼び寄せちゃったか…

584 :デフォルトの名無しさん:2018/09/01(土) 19:25:33.74 ID:HKyHRnHf.net
>>568
理論って何?www
理論って言葉使いたくなっちゃったのかな?www

585 :デフォルトの名無しさん:2018/09/01(土) 19:27:13.01 ID:mPcVbgud.net
>>583
その「長文君」がム板に来る流れを作った張本人という可能性は考えないのかい?w

586 :デフォルトの名無しさん:2018/09/01(土) 19:54:56.43 ID:HKyHRnHf.net
>>568
理論ってどんな理論なんだろう?www
プークスクスwww

587 :デフォルトの名無しさん:2018/09/01(土) 19:55:19.76 ID:4jvmXnIZ.net
嫌われ者の長文君ち〜ッス

588 :デフォルトの名無しさん:2018/09/01(土) 21:04:14.49 ID:2NCbxz5b.net
>>583,587
その二人ともなぜか 俺だけ 優秀と思っている不思議さwだから嫌われ者同士でも互いに嫌ってるのかww

589 :デフォルトの名無しさん:2018/09/01(土) 22:34:21.93 ID:/wwW4VSs.net
オレが優秀なワケじゃない
オマエが健常者じゃないだけだからな

まずそこを自覚しないといけない

そこを勘違いしたらダメなワケ
オツムに軽度の障害があるとみなせるぐらい知能に問題がある

590 :デフォルトの名無しさん:2018/09/01(土) 22:59:24.12 ID:2NCbxz5b.net
別にそういう個別特定なのはいいのねん
お前には俺(のレス)がそう見えるというのはお前の価値観からそう見えるのはしょうがない
だがしかし、お前の場合はレス個別に対してじゃないのもあるからな。不特定多数のも。自称健常者は敵が多いからなのか??w

591 :デフォルトの名無しさん:2018/09/01(土) 23:12:57.65 ID:2NCbxz5b.net
wwww いや、笑った。すげえなww
低学歴 知恵遅れ 健常者じゃない と、どこのスレでもどのレスでもそういう言葉があるな。すごいなww
ちょっと頭のおかしな人が道中をぶつくさ他人に悪態ついてるのと似てると思うけどなあ。「健常者」なんて普通使わないと思うけど、もしかしたらマジ病気のひと?ww
普通に会話、普通のレスできないの?あったとしたらすまん、あまりにもあういうのばかりで見逃したかもw

592 :デフォルトの名無しさん:2018/09/01(土) 23:17:02.98 ID:/wwW4VSs.net
オレと会話したいの?

残念なことにな、知恵遅れとまともな人間のあいだでは
会話が成立しない

プロトコルが違う

オレと会話したいなら
まず相応のプロトコルを身につけてからだ

593 :デフォルトの名無しさん:2018/09/01(土) 23:17:24.80 ID:mPcVbgud.net
他スレで長文書いてたw まあ話は進んでないみたいだが
https://medaka.5ch.net/test/read.cgi/php/1474523013/854
https://mevius.5ch.net/test/read.cgi/hp/1533007852/229

今更だがsedって意外と便利に使えるのな。正規表現による範囲指定とか
s///使った単なる置換ぐらいにしか使ってなかった。
書いていたコードが短くなりそうで嬉しいw

594 :デフォルトの名無しさん:2018/09/01(土) 23:18:54.31 ID:J8s4Euww.net
長文はキチガイ

595 :デフォルトの名無しさん:2018/09/01(土) 23:41:04.17 ID:Z9gelboG.net
yesコマンドってPOSIXユーティリティじゃないのか……。

596 :デフォルトの名無しさん:2018/09/01(土) 23:46:09.11 ID:2NCbxz5b.net
>>592
会話のためじゃなかった、なんの為に数々のレスしているの?君は
まあ、自己顕示欲承認欲求からだけだろうなというのは、数々のレスからは垣間見えるけど、そういうことなのね、そういうことでいいのねw

597 :デフォルトの名無しさん:2018/09/02(日) 00:04:43.96 ID:Tb3tt8fk.net
この板をまともな板にするために
この板でレスしてる

オマエみたいな頭悪い低学歴知恵遅れが幅きかせて
いま、この板は正常に機能してない

低学歴知恵遅れは低学歴知恵遅れの自覚がない
しかも自己評価だけは高い
その分タチがワルイ
まともな人間が近寄らない

そしてその自覚すらない
その自覚がないから更生もしない
つまり更生することもないから排除しかない

つまりオレは
素晴らしく情報価値が高いレスを提供すると同時に
この板から低学歴知恵遅れのクソニート、底辺ITドカタを排除する作業を実施している

わかった?

まともな板にするためにな
ひたすらオレはレスをしている

わかった?

598 :デフォルトの名無しさん:2018/09/02(日) 00:12:57.53 ID:elP7igYW.net
やっぱり移動先はLinux板にしといたほうが
良かったんじゃねーの?w

599 :デフォルトの名無しさん:2018/09/02(日) 00:14:17.23 ID:fQwovzZh.net
>>597
>この板をまともな板にするために
wwwww マジでっ!?
その言っているのは、いろいろ自分にも当てはまるだろうと思うんだけどな

自己顕示欲承認欲求と見なされるのは嫌らしいというのだけはわかったよw

600 :デフォルトの名無しさん:2018/09/02(日) 00:15:05.38 ID:Tb3tt8fk.net
当然、オマエも排除の対象だ

601 :デフォルトの名無しさん:2018/09/02(日) 00:16:13.74 ID:fQwovzZh.net
「排除」www すげええええっwwww
いや、怖い...w

602 :デフォルトの名無しさん:2018/09/02(日) 00:16:18.96 ID:CFWyulsd.net
>>595
これは yes って返せばいいのか!?

603 :デフォルトの名無しさん:2018/09/02(日) 00:17:25.68 ID:Oiltae2A.net
俺の目の黒いうちはまともにはさせんから安心しろ

604 :デフォルトの名無しさん:2018/09/02(日) 00:17:46.37 ID:8TU9g+nX.net
お前も駆逐してやる

605 :デフォルトの名無しさん:2018/09/02(日) 00:24:56.83 ID:elP7igYW.net
>>602
yじゃね?

606 :デフォルトの名無しさん:2018/09/02(日) 00:27:05.66 ID:elP7igYW.net
どうでもいいけど、
yesコマンドって

1. なんに使うんだ?
2. なるほど(使いみちを聞いて)
3. いつ使うんだ?(使ったことがない) ← みんなこの状態だよな?w

607 :デフォルトの名無しさん:2018/09/02(日) 00:28:33.57 ID:fQwovzZh.net
>>606
まったくもって、まんまだなw

608 :デフォルトの名無しさん:2018/09/02(日) 00:40:01.27 ID:elP7igYW.net
だいたい、-yオプションとか、-fオプションとか、-qオプションがあるからねぇ

おっとまたオプションの話だw

オプションついでにいうとtarとかpsってなんでハイフンなしで
tar czvf とか ps aux とか書くんだろう?
ちょっと調べたら昔の仕様?らしいけど

今はtar -czvf とか ps -aux とかできるみたいだけどさ。
まあ今はハイフンなしオプションのことを考慮する必要は無いだろうけど
それに対応したライブラリ(getoptsみたいなの)ってあるんだろうか?

609 :デフォルトの名無しさん:2018/09/02(日) 02:09:13.86 ID:4Jf6YH6e.net
>>608
ないのでは? tar の場合はハイフンなしの Old style のオプション指定されていたら
まずはハイフン付きに置き換えてから解釈しているらしい。
https://qiita.com/junjis0203/items/6bb48184b508045e69da

610 :デフォルトの名無しさん:2018/09/02(日) 06:17:08.93 ID:667Fbrpy.net
>>609
すごいな。一発で持ってくるとは
でもID:elP7igYWみたいな馬鹿を相手にするなんてもったいない……。

611 :デフォルトの名無しさん:2018/09/02(日) 09:16:59.93 ID:elP7igYW.net
>>609
なるほど。

初期(いつ?)の頃ってコマンドの開発どうだったんだろうね
ハイフンなしのオプションはしばしば用いられていたのか?

どんなコマンドも最初の実装ってのは存在するわけで、
それが今とどう同じなのか違うのか少し気になってきた

612 :デフォルトの名無しさん:2018/09/03(月) 09:07:41.26 ID:Phd/3F0T.net
俺、数百行クラスになったら静的言語にするから、
シェルスクリプトどころかrubyもpythonも使わない。
数百行にもなると書き捨てって規模じゃないし、
静的型検査なしで書くのは面倒くさい。

あとJavaScriptには現代的言語の持つ抽象化機能があらかたあるから、
連想配列も構造体相当品もないシェルスクリプトと同列に並べるのはJavaScriptに失礼。

613 :デフォルトの名無しさん:2018/09/03(月) 09:13:23.99 ID:Wp4QdYvu.net
シェルスクリプトでcのソースを書くのはちょっと面白い。

614 :デフォルトの名無しさん:2018/09/03(月) 09:52:05.06 ID:WkDP4f9E.net
>>613
どういう意味?
メタプログラミングみたいな?

615 :デフォルトの名無しさん:2018/09/03(月) 10:26:05.35 ID:cQ/Qcp18.net
>>612
大変やね。たまには数十クラス程度のものを作っても良いんやで

616 :デフォルトの名無しさん:2018/09/03(月) 11:13:52.71 ID:Phd/3F0T.net
>>615
そういう小規模なプログラムばかり書いてたらもっと動的言語を
使ってたかもしれないなあ。
就職して最初のプロジェクトがいきなり100万行オーバーのCプログラムの
大規模改造とかで、それ以後も数十万行クラスのプログラムばかり
触ってきて、ちょっと規模が大きくなると処理系の検査に頼る
習慣がついてしまった。

617 :デフォルトの名無しさん:2018/09/03(月) 11:21:30.86 ID:IWP2OX+N.net
>>616
うん、仕事でしかプログラミングしてないんだろうな
ってのはすぐにわかったよ。

1から作ったことがあれば、いきなり数百クラスに
なることなんて無いからね

保守的な開発しかしたこと無くて、
小さなシステムの組み合わせで大きなものを作るという発想がない
古臭いものメンテナンスしかしたことないんだろうなと

618 :デフォルトの名無しさん:2018/09/03(月) 13:56:12.52 ID:Phd/3F0T.net
>>617
あれだけの情報で趣味プログラム書いてないってわかるなんてスゴイ⤴⤴
その推理フツーに間違ってるがw

そもそも小さなプログラムだって普通に書いてるし、だからこそシェルスクリプトスレに来てるわけで、
大きなプログラムしか書いてないとするとその時点で矛盾するじゃん。

自己矛盾した推理を前提に話を進めるとか、同僚にいたら困りそうなタイプだなあ。

619 :デフォルトの名無しさん:2018/09/03(月) 14:47:29.83 ID:IWP2OX+N.net
>>618
いや、そもそもお前の発言が矛盾してるんだって。

↓これお前の発言な
> 俺、数百行クラスになったら静的言語にするから、
> シェルスクリプトどころかrubyもpythonも使わない。

数百行クラスになったら静的言語ってことは
数百行クラスになる前はどうしてるんだって話だよ

620 :デフォルトの名無しさん:2018/09/03(月) 19:06:52.08 ID:HxI+JP9z.net
>>619
> 数百行クラスになったら静的言語ってことは
> 数百行クラスになる前はどうしてるんだって話だよ

え、そこに矛盾はまったくないんだけど、マジでホントに分からないの?
明日の19時くらいまで待ってあげるから自分で考えてみた方がいいぜ。

降参すればもっと早く答を教えてあげるけど、こんな当たり前の話、ホントに分からないとするとそれはそれでまずい気がする。

621 :デフォルトの名無しさん:2018/09/03(月) 19:27:06.50 ID:HpF+lD7Q.net
おまいら、自分の書き込みが変に解釈された事の方を問題視しろよ。
相手が客だった場合、どんなに釈明しようが上司はお前が悪いとしか言わんぞ。

622 :デフォルトの名無しさん:2018/09/03(月) 19:33:15.32 ID:HxI+JP9z.net
>>621
え、もしかして君も分からんの?
客ならともかく、プログラマーならこんなの分かって当然だと思ってたけど、そうでもないんかな。

まあ明日の19時過ぎたら答は書くよ。

623 :デフォルトの名無しさん:2018/09/03(月) 20:06:42.29 ID:IWP2OX+N.net
上の方でもプログラマを自称しながら、アマチュアっぽいやつがいたからなぁw
まあ、明日なにか言おうとしてるみたいだから、何も言えなくなるように
大規模アプリを作るときの鉄則を言っておくよ。

まず大規模アプリを作るときに重要なのは細かくモジュールに分けましょうということ
モジュールという言葉の意味は文脈で微妙に異なるけど、きっちり定義したいわけじゃなく
小さなプログラム、小さなファイル、小さなクラス、小さな関数等に分けましょうという話

これをやっておかないと、例えばC言語のHello Worldであっても、
printfの複雑な実装を、一つのファイルに全部書かないといけなくなくなって
数百行なんてあっという間に超えてしまう

>>612は数百行程度で静的言語にするとか言ってるが、
俺に言わせれば、大規模アプリであっても"1モジュール(最小単位の関数)"で
数百行なんてめったになることなんてないだろうと。

まあ、どうせ >>612はプロジェクト全体で数百行と言ったつもりなんだろうが、
お前は単体テストできるようにしてないのかと。それぞれ独立して考えられるように設計しろよ。

小さなモジュールを組み合わせて作るんだから、プロジェクト全体の行数で考えるのは意味ないんだよ。
Hello Worldでもプロジェクト全体という話ならprintfの実装も含めなきゃいけない。
でもブラックボックスとして扱ってるんだろ? それと同じで自分で作る場合もブラックボックス化させればいいんだよ
つまり小さなモジュールに分けて作れば、静的言語でなくとも大規模アプリは十分作れるわけだ。
もちろんシェルスクリプトであってもね

もし「シェルスクリプトは上から下へ流れるように作るのが普通なんだ。
関数なんて作ってはいけない、複数のファイルに分けたりしてはいけない、複数のスクリプトに分けるのも禁止
だから大きなものは作れないんだ!それが世界の常識なんだ!!」という理屈であれば、
それは頭が固いお前の思い込みが、大きな物を作れない根本原因だろ。ってこと

結局プログラマを自称しているようだが、小さく分けるという設計ができない
アマチュアレベルの人間なんだろうって話だ

624 :デフォルトの名無しさん:2018/09/03(月) 20:11:02.86 ID:lS5Tq6xt.net
渾身の長文わろたw

625 :デフォルトの名無しさん:2018/09/03(月) 20:13:45.46 ID:IWP2OX+N.net
まあいつものことだなw

626 :612:2018/09/03(月) 20:30:39.38 ID:HxI+JP9z.net
やっぱり例の人だったかw
しかも長文の割に
(a) >>612が別に矛盾したこと言ってないと分かった
のか、それとも
(b) 相変わらず>>612が矛盾してると思ってる
のかを書いてないように俺には思えるというwww

>>623 よ、お馬鹿な俺に、君の意見が(a)なのか(b)なのか教えてくれ。

627 :デフォルトの名無しさん:2018/09/03(月) 20:40:49.84 ID:IWP2OX+N.net
>>626
いや、別にお前にレスしてないしw
大規模アプリを作るときの鉄則を言っただけだし

明日の19時過ぎたら、なんか答え書くんだろ?
それを書いてくれればいいよ。
俺の文章読んで恥ずかしくないならね


まあ一つ言うとしたら、技術力の差ってやっぱりあるよな
他の人が動的言語できているという事実があるというのに
俺はできないんだ!ってよく恥ずかしげもなく言えるよなーと

628 :デフォルトの名無しさん:2018/09/03(月) 20:43:08.65 ID:lS5Tq6xt.net
大規模アプリを作るときの鉄則www
なんやろ?www

629 :デフォルトの名無しさん:2018/09/03(月) 20:43:49.57 ID:IWP2OX+N.net
そうだ、ヒントをやろうw

俺、(1関数で)数百行クラスになったら設計が悪い思って作り直すから、
数百行クラスになることはない

630 :デフォルトの名無しさん:2018/09/03(月) 20:45:19.54 ID:RephN+2M.net
なんか一つ一つが長文でここ最近ずっとだらっと最下部までスクロールして閉じるを繰り返してるわ

631 :612:2018/09/03(月) 21:00:52.21 ID:HxI+JP9z.net
これはアレですね。
(a)と答えると自分の間違いを認めることになって耐えられないし、
(b)と答えると明日の19時以降に赤っ恥を書くことになるしで、
(a)とも(b)とも答えられないってヤツですねw

分かりやすい。
自分の間違いを認めると死んぢゃう病に罹患中って奴だw

632 :デフォルトの名無しさん:2018/09/03(月) 21:09:15.31 ID:E2St7m4+.net
個々の簡単な完結した機能の簡単なシェルにしといたほうが
単体試験仕様書の設計も簡単
結合試験仕様書の設計も簡単
総合試験仕様書の設計も簡単

知恵遅れが作ると試験による検証すらできないシステムができあがる

633 :デフォルトの名無しさん:2018/09/03(月) 21:12:48.08 ID:IWP2OX+N.net
>>631
ん? 俺は間違ってないんだから、必然的に(b)ということになるな。
はい、明日の19時待ってますよw

634 :デフォルトの名無しさん:2018/09/03(月) 21:13:14.86 ID:IWP2OX+N.net
>>632

>>2を読め
>・シェルスクリプトのことをシェルってゆうな

635 :デフォルトの名無しさん:2018/09/03(月) 21:14:05.20 ID:ttVcJTrG.net
TypeScript・Haxe の違い

大規模開発なら圧倒的に、Haxe

636 :デフォルトの名無しさん:2018/09/03(月) 21:17:55.11 ID:lS5Tq6xt.net
>>634
おまえ大規模アプリを作っとるんやろ?そうゆう初心者くさい事ゆうなよwwww
ちょっとだけ失望したわw

637 :デフォルトの名無しさん:2018/09/03(月) 21:27:46.12 ID:zLYH5Np3.net
すげーなこのスレ。
とうとうrubyガイジも呼び寄せたぞ。
オールスターじゃん

638 :デフォルトの名無しさん:2018/09/03(月) 21:28:01.12 ID:IWP2OX+N.net
作業していて気づいたんだが >>537-538
どういう場合にシェルスクリプトが適しているかの話

少し毛色が違うが、コールバックの仕組みを取り入れるなら
必然的にシェルスクリプトで書かなければいけなくなるな

つまり
1. 簡単なことをやるためにシェルスクリプトを使う
2. だけど中身で一部複雑な処理があるので、そこだけ別コマンドを使う
3. その別コマンドから、シェルスクリプトに定義したコールバック関数を呼び出す

というようなことをやろうと思ったが、2の「別コマンド」がシェルスクリプト以外(正確には別プロセス)だと
シェルスクリプトに定義したコールバック関数を呼び出せない

つまりPerlで書くならば以下のような感じで、正規表現置換をsedコマンドで
実行してしまったら、(スクリプトの内部関数である)foo関数を呼び出すことができない

sub foo { uc($_[0]) }
$text = 'abcdefg';
$text =~ s/([a-c])/foo($1)/eg;
print $text;

639 :デフォルトの名無しさん:2018/09/03(月) 21:28:41.85 ID:RephN+2M.net
さすがの総合スレ

640 :デフォルトの名無しさん:2018/09/03(月) 21:33:19.27 ID:IWP2OX+N.net
どうでもいいが(俺にとってはどうでも良くないが)
sedとawkとgrepとexprで使える正規表現のパターンが違うのって地味に嫌だなw
もし1から仕様を決められるなら、全部統一されるんだろうな。
HTML5みたいに一度足並み揃えた仕様にリセットされてほしい

641 :デフォルトの名無しさん:2018/09/03(月) 21:51:24.51 ID:IWP2OX+N.net
sedの非互換性も辛い・・・というかGNUが便利すぎなんだろうな

642 :デフォルトの名無しさん:2018/09/03(月) 22:05:03.93 ID:5Vmu1cpr.net
>>641
最近知ったのだが、GNU awk に ARGIND という組み込み変数が
あってエラい助かった

643 :デフォルトの名無しさん:2018/09/03(月) 23:01:37.14 ID:E2St7m4+.net
もうコタエは書いたからな
次の患者さんどうぞ

644 :デフォルトの名無しさん:2018/09/03(月) 23:24:25.75 ID:O250GQ8L.net
誰がどう見ても患者はお前だろ。精神の

645 :デフォルトの名無しさん:2018/09/03(月) 23:39:11.39 ID:YrDXnGw5.net
>>643も精神のという意味だろう。この読めなさはw

646 :デフォルトの名無しさん:2018/09/03(月) 23:57:12.64 ID:E2St7m4+.net
キミラは重篤な患者さんだからな
しょうがない

647 :デフォルトの名無しさん:2018/09/03(月) 23:59:36.46 ID:IWP2OX+N.net
sedで「command i expects \ followed by text」というエラーが出たが
なんか-iの話ばっかり見つかって、期待する答えがなかなか見つからないwww

GNUだと
echo text | sed 'i===' って書くだけで簡単に
===
text
と表示されるんだが、

BSDだと上記エラーがでて、しばらくどうすりゃいいの?状態だったw
持ってた sed & awk ポケットリファレンス 眺めても書いてあることがさっぱりでさ

正しく(POSIX)ではこう書かないといけないんだな。改行がいるとかw
echo text | sed 'i\
===
'

これを1行で書くために、改行を変数に入れるべくこんな変なことをしないといけなかったりw
LF=$(printf '\012_')

LF=${LF%_}


sedって置換機能以外の、本来stream editorとしてバリバリ使いこなそうと思ったら難しいな
ホールドスペース使いこなせる気がしない。何ができるのかも想像できないしw

648 :デフォルトの名無しさん:2018/09/04(火) 00:05:33.37 ID:gZnu4stV.net
ココは隔離病棟の集中治療室

649 :デフォルトの名無しさん:2018/09/04(火) 01:03:24.22 ID:zS1fHlcp.net
自覚はあるんだな

650 :デフォルトの名無しさん:2018/09/04(火) 06:08:51.64 ID:fH4o5qCk.net
ホールドスペースをバリバリ使ってた。使いこなしてたかはともかく…
20 年以上も前のことだから、もうできない。

651 :デフォルトの名無しさん:2018/09/04(火) 08:53:12.61 ID:jvRjWg/I.net
ホールドスペースやブランチを使いたくなったらsedやめて他の言語使えって、Macで女子高生が話してた。

652 :デフォルトの名無しさん:2018/09/04(火) 08:53:37.92 ID:ROt4XEkp.net
sedがなんで分かりづらいかの理由がわかった
b(とt)の解説が悪いんだよ。

たいてい、b・・・無条件ジャンプのように書いてあるから
これだけでどうやってフロー制御すりゃいいんだよ?ってなる

正確にはこれ、条件分岐なんだな。ニュアンス的にはこんな感じ
/条件/b :label

bの前はアドレスってことだが、正規表現でもアドレス指定できるから
これを条件とすれば、条件分岐となる。

だけどアドレス(条件)はすべてのコマンドで使えるものだからなのか
そのコマンドの説明のところで省いてしまうから、解説だけを読んでも
ジャンプはあるが条件付きジャンプがねーじゃねーかってなるわけだ

条件文があるならあとは簡単だ。普通の手続き型のコードだわ

653 :デフォルトの名無しさん:2018/09/04(火) 09:49:28.21 ID:+CEwKGA5.net
"Commands which accept address ranges" って書いてあるやん…

654 :デフォルトの名無しさん:2018/09/04(火) 10:20:13.70 ID:ROt4XEkp.net
>>653
アドレスの範囲を受け付けますって遠く離れた所に書いても
それが条件として使えるとは気づきにくいって話

655 :デフォルトの名無しさん:2018/09/04(火) 11:30:26.75 ID:+CEwKGA5.net
>>654
数行上に書いてあるで

656 :デフォルトの名無しさん:2018/09/04(火) 12:17:38.09 ID:ROt4XEkp.net
>>655
何度も同じことを言わせないでくれ

657 :デフォルトの名無しさん:2018/09/04(火) 13:15:59.22 ID:+CEwKGA5.net
実際には3行上だった

658 :デフォルトの名無しさん:2018/09/04(火) 18:17:39.81 ID:i2l0SoWn.net
>>652
そこは、素人お断りですw よく読みましょう。
This is just a brief synopsis of sed commands to serve as a reminder to those who already know sed

659 :612:2018/09/04(火) 19:19:21.04 ID:GKTPwsNb.net
19時過ぎたから答を書く。

言っておくがチョー当たり前のつまらん話だよ。

・短いプログラムは、シェルスクリプトやruby/pythonなど動的型付き言語で書くことが多い
・拡張していくうちに、これ以上長くなったら静的型付き言語で書いた方が楽そうだと思ったら、まるまる静的型付き言語で書き直す。あまり長くなると書き直しも面倒になるから、早めに手を打つ。
・長くなりそうだと初めから分かっている場合は、もちろん最初から静的型付き言語で書く

ってだけだよ。

静的型付き言語使いにはわりとよくある開発形態のはずだが、なんで>>612が矛盾してるなんて結論に至るのか。

660 :デフォルトの名無しさん:2018/09/04(火) 19:33:33.93 ID:FEVdkErP.net
とりあえずここまでレス飛ばしてきたんでまとめを頼む

661 :612:2018/09/04(火) 19:43:12.33 ID:GKTPwsNb.net
>>660
俺が>>612
「数百行くらいのプログラムになると、俺の場合は静的型検査がないと面倒くさいので、静的型付き言語で書く」
と書いたら、いつもの人が例のごとく謎の難癖をつけてきたってだけの話。

別に「全員がそうすべき」って書いたわけじゃなくて
あくまで「俺にとっては面倒くさい」って書いただけなのに、どうも許せないみたいだな。
難癖は全然反論になってないので読む必要はない。

662 :デフォルトの名無しさん:2018/09/04(火) 19:43:56.78 ID:FEVdkErP.net
把握

663 :612:2018/09/04(火) 19:53:45.96 ID:GKTPwsNb.net
あ、>>612の「数百行クラス」ってのを
「(オブジェクト指向言語の)1つのクラスのコードサイズが数百行」と誤解されたようではあるな。
これは俺の表現も誤解を招くものではあった。
単に「1プログラムのコードサイズが数百行くらい」って意味で書いてたんだけどね。

まさかシェルスクリプトスレでオブジェクト指向のクラスのことだと解釈されるとは思わなかった。

664 :デフォルトの名無しさん:2018/09/04(火) 21:01:45.22 ID:wTvbP50/.net
>>612
興味本位で聞くんだが、数百行って具体的にはどの範囲をイメージしてる?〜500程度?
あと静的型付けって何使ってる?

665 :612:2018/09/04(火) 21:24:00.90 ID:GKTPwsNb.net
>>664
500行を越えるぐらいからかな。
常にその原則を守ってるわけでもなくて、不特定ユーザーに配布するスクリプトではBourne shellで3000行ぐらいのをメンテしてたりもする。
これは規模的に結構辛い。orz

言語は最近はCrystalを試してる。
まだ書き慣れたって段階には達してないけど。

666 :デフォルトの名無しさん:2018/09/04(火) 21:57:53.47 ID:wTvbP50/.net
>>665
俺は数百行って聞くと2、300をイメージするから、どのぐらいか気になった
crystalとは・・・俺は1.0も出てないものは使えんなあ

うちは処理結果が揮発で良いなら基本bash/pythonを使ってる

667 :デフォルトの名無しさん:2018/09/04(火) 22:13:29.28 ID:ROt4XEkp.net
>>659
やっぱり矛盾してるじゃんw

1. 俺、数百行クラスになったら静的言語にするから、シェルスクリプトどころかrubyもpythonも使わない。
2. 短いプログラムは、シェルスクリプトやruby/pythonなど動的型付き言語で書くことが多い
3. 拡張していくうちに、これ以上長くなったら静的型付き言語で書いた方が楽そうだと思ったら、まるまる静的型付き言語で書き直す。

では、長くならない場合は?
シェルスクリプトやrubyもpythonを使うんだろw

668 :デフォルトの名無しさん:2018/09/04(火) 22:15:09.44 ID:ROt4XEkp.net
>>665
> 常にその原則を守ってるわけでもなくて、不特定ユーザーに配布するスクリプトではBourne shellで3000行ぐらいのをメンテしてたりもする。

小さく分けようぜw
ファイルを分けたり、関数にすりゃ、
たった3000行なんて十分メンテ可能だろ

669 :デフォルトの名無しさん:2018/09/04(火) 22:15:31.25 ID:dB7ca3M3.net
やはりワッチョイいるな

670 :デフォルトの名無しさん:2018/09/04(火) 22:18:59.76 ID:ROt4XEkp.net
>>663
> まさかシェルスクリプトスレでオブジェクト指向のクラスのことだと解釈されるとは思わなかった。

自分でrubyやpythonも使わないって言ったんだろw
自分でオブジェクト指向の言語だしといて何いってんだよ

結局最初に予測したとおり、大きな(それほど大きくもないがw)
プログラムを作るときの、小さなモジュールで作るってことを知らないだけじゃん

671 :612:2018/09/04(火) 22:45:12.74 ID:GKTPwsNb.net
>>667
> では、長くならない場合は?
> シェルスクリプトやrubyもpythonを使うんだろw

勿論そうだよ。

> やっぱり矛盾してるじゃんw

> 1. 俺、静的言語にするから、シェルスクリプトどころかrubyもpythonも使わない。

「シェルスクリプトどころかrubyもpythonも使わない」ってのが「数百行クラスになったら」に限定された記述だってことに気づかないあたりが君の鈍いところ。
初見で気づかないのはまあ元の文が多義的に解釈できるから仕方ないとしても、
この期に及んで気づいてないのは致命的かな。

672 :612:2018/09/04(火) 22:52:14.96 ID:GKTPwsNb.net
>>668
> 小さく分けようぜw
> ファイルを分けたり、関数にすりゃ、
たった3000行なんて十分メンテ可能だろ

勿論分けてるよ。
シェル関数も使ってるし、1ファイル500行を越えるモジュールはない。
まったく同じようにモジュール化しても、静的型付き言語に比べて
動的型付き言語は人間にかかる負担が大きいってのが
>>612の趣旨なわけだが、君は相変わらずそのことに気づいてないんだな。

それなりのプログラマーであれば、動的、静的と言った瞬間にこの趣旨に気づくはずなんだが...

673 :デフォルトの名無しさん:2018/09/04(火) 23:01:52.48 ID:ROt4XEkp.net
>>672
(全てのプログラムは)長くなるからシェルスクリプトどころかrubyもpythonも使わない
って言っただろ?

長くならないプログラムがあって
「その場合はシェルスクリプトやrubyもpythonを使ってる」というのなら、
明らかな矛盾。使わないと言っておきながら使ってると言ってる。


>>671
負担が大きいから何だって言うんだ?
負担の大小ではなく、管理可能かどうかだろ

現実見てみろ。動的言語でも全体で何万行もあるシステムは作れている
お前が作れないのは単にお前の能力不足でしかない

その事に気づいたようで、動的言語では作れないんだというニュアンスから
負担が大きいに言い換えたようだが、バレバレだw


最初(>>623)に言っておいたとおり、プロジェクト全体の行数を考えるのは意味がない
> 小さなモジュールを組み合わせて作るんだから、プロジェクト全体の行数で考えるのは意味ないんだよ。

小さいモジュールのあつまりで作ればいいだけの話
小さいモジュールの集まりで作るから、
> 小さなプログラム、小さなファイル、小さなクラス、小さな関数等
は長くならない

674 :デフォルトの名無しさん:2018/09/04(火) 23:05:52.86 ID:ROt4XEkp.net
シェルスクリプトの話に戻すならば、
頭が固い人のたわごとは無視して、
複数のファイルで作れば良いってことなんだよ

もちろん、100行のコードと、
100行の10個のファイルだと後者のほうが
複雑だが(そりゃコード量が増えてるからな)

100行の10個のファイルの動的言語と
100行の10個のファイルの静的言語の
複雑度は変わらない

675 :デフォルトの名無しさん:2018/09/04(火) 23:06:43.34 ID:ROt4XEkp.net
行とかいたら、コメント含めたりするかw
一応実行行(ステップ数)と言い換えておく

676 :デフォルトの名無しさん:2018/09/04(火) 23:14:44.94 ID:RaX7EawA.net
この話オチあるんか?

677 :デフォルトの名無しさん:2018/09/04(火) 23:17:47.09 ID:ROt4XEkp.net
>>676
さあなー。能力が低いのを言語のせいにしてるだけだしね。

そういや、連想配列がなかったらプログラム作れないと
言ってる人がいるがC言語には連想配列はない

678 :デフォルトの名無しさん:2018/09/04(火) 23:20:18.74 ID:ROt4XEkp.net
C言語に連想配列はなくても、誰かが作ったライブラリはある
そう考えると>>571の結論に戻る

> まとめると、現在のシェルスクリプトが大規模開発に向いてないのは
> フレームワークやライブラリが不足しているから。
> 俺がシェルスクリプトで大規模開発をやらないのは、
> シェルスクリプトが適した内容で大規模なものを思いつかないから。
> それはそれとして中規模を小規模にするためのフレームワークやライブラリは欲しい。

679 : :2018/09/04(火) 23:25:36.88 ID:lJV/Mb/R.net
>>678
>誰かが作ったライブラリはある
それは具体的にどこにあるのですか?
それを見つけたとして、それを自分のプログラムに適用できるかどうか判断できるのですか?

単に(論理的に)存在すること、だけを言及しても意味がないと思いますけれども

680 :デフォルトの名無しさん:2018/09/04(火) 23:26:38.84 ID:ROt4XEkp.net
C言語用連想配列の話?

681 :デフォルトの名無しさん:2018/09/04(火) 23:27:47.89 ID:ROt4XEkp.net
http://d.hatena.ne.jp/fd0/20080419/p1

glibc
言わずと知れた GNU の標準 C ライブラリ。search.h というヘッダがあり、
その中にハッシュテーブルを管理できる API が提供されている。


glibcなら誰でも知ってるだろう

682 :612:2018/09/04(火) 23:29:35.30 ID:GKTPwsNb.net
>>673
どうも君は健忘症みたいだから>>612から引用してあげるね。

> 俺、数百行クラスになったら静的言語にするから、シェルスクリプトどころかrubyもpythonも使わない。

「数百行クラスになったら」って書いてますね...
相手の発言を確認せずに「全てのプログラムは」とか言っちゃうの、仕事でやったら信用失うから今後は気をつけた方がいいと思うよ。

> 静的型検査なしで書くのは面倒くさい。

はい、「動的言語では作れないんだというニュアンス」なんて全くないですね。
動的言語だと「面倒くさい」って書いてるだけでした。

仕事でもこんな調子でコミュニケーションしてるのかなあ。

> 小さいモジュールの集まりで作るから、

せっかく「まったく同じようにモジュール化しても、静的型付き言語に比べて動的型付き言語は人間にかかる負担が大きい」って書いてあげたのに読めてないんだね。
モジュール粒度が同じでも、動的型付き言語と静的型付き言語では、人間の負担するコストに違いがあるんですよ。

683 :612:2018/09/04(火) 23:32:47.66 ID:GKTPwsNb.net
search.h のハッシュ関数は別にglibc依存じゃなくてPOSIXだよ。
日頃POSIX POSIX言ってるけど、シェルスクリプトの範囲しか知らない人かな。

684 :デフォルトの名無しさん:2018/09/04(火) 23:33:18.38 ID:ROt4XEkp.net
>>682
> 「数百行クラスになったら」って書いてますね...

だから矛盾してるんだよ。

「条件付きの結論」っていうのは、その結論(シェルスクリプトやRubyやPythonを使わない)が
正しいのはあくまで条件を満たされている場合であって

条件を満たさなければ、シェルスクリプトやRubyやPythonを使うということになる

685 :デフォルトの名無しさん:2018/09/04(火) 23:34:16.08 ID:ROt4XEkp.net
>>683
> search.h のハッシュ関数は別にglibc依存じゃなくてPOSIXだよ。

いつ俺がPOSIXじゃないって言ったんだ?
「glibcで提供している」と書いてあるブログを持ってきただけだろ

686 :デフォルトの名無しさん:2018/09/04(火) 23:34:31.63 ID:ROt4XEkp.net
ほんとどうでもいいところにばっかり突っ込むよなw

687 :デフォルトの名無しさん:2018/09/04(火) 23:36:12.99 ID:idomDZwg.net
お前がな

688 :デフォルトの名無しさん:2018/09/04(火) 23:36:56.71 ID:ROt4XEkp.net
>>682

> せっかく「まったく同じようにモジュール化しても、静的型付き言語に比べて動的型付き言語は人間にかかる負担が大きい」って書いてあげたのに読めてないんだね。
> モジュール粒度が同じでも、動的型付き言語と静的型付き言語では、人間の負担するコストに違いがあるんですよ。

だから、負担が大きいが、別に作れるだろって話

お前は極端なんだよ。規模が大きくなったときのことで悩んで、負担が大きいから使わないと
規模を大きくしなければ済む話なのに、それに気づいていない

まあ行数が同じなら、負担なんて大して変わらんがね。
動的型付き言語で大変なら、静的型付き言語でも大変

689 :612:2018/09/04(火) 23:39:09.68 ID:GKTPwsNb.net
>>684
君には日本語の勉強をお勧めしておく。

690 :デフォルトの名無しさん:2018/09/04(火) 23:40:26.52 ID:ROt4XEkp.net
お前がな

691 :デフォルトの名無しさん:2018/09/04(火) 23:41:11.31 ID:gZnu4stV.net
隔離病棟はものすごいことになってる

692 :デフォルトの名無しさん:2018/09/04(火) 23:41:41.00 ID:ROt4XEkp.net
>>612の正しい日本語を書いておくよ

俺、数百行クラスにならないときは動的言語にするから、
シェルスクリプトやrubyもpythonも使う

693 :デフォルトの名無しさん:2018/09/04(火) 23:42:22.29 ID:+CEwKGA5.net
元の板に戻ったほうが良いんじゃないかな

694 :デフォルトの名無しさん:2018/09/04(火) 23:42:47.42 ID:Gq1Hay5m.net
キチガイに触んなすな

695 :612:2018/09/04(火) 23:43:57.27 ID:GKTPwsNb.net
いや、IDがないともっと悲惨だよ、これ。
次スレはワッチョイもつけた方がいい気がする。

696 :デフォルトの名無しさん:2018/09/04(火) 23:44:19.45 ID:ROt4XEkp.net
>>693
そういう可能性も考えて、元の板にも
スレ立てといたんだがねw

サマータイム導入に気をつけろよ
ローカルタイム使ってると同じ日時が
2回でてくることになるぜ

697 :612:2018/09/04(火) 23:44:37.68 ID:GKTPwsNb.net
>>694
すいません、以後控えます。

698 :デフォルトの名無しさん:2018/09/04(火) 23:46:10.08 ID:gZnu4stV.net
懸命に手を尽くしたましたが
手の施しようがありません

699 :デフォルトの名無しさん:2018/09/04(火) 23:47:02.77 ID:ROt4XEkp.net
>>695
ワッチョイついてるスレでの俺の活躍を見よ(笑)

Git 16©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1502726047/458-

700 :612:2018/09/04(火) 23:47:07.77 ID:GKTPwsNb.net
やっぱり前スレの荒らしおよび、UNIX 板で後から意図的に重複スレ立てた人物だったんだね。
まあそうだろうとは思ってはいたが。

701 :デフォルトの名無しさん:2018/09/04(火) 23:48:37.75 ID:ROt4XEkp.net
>>700
ひどいな。ネタに決まってるじゃないか

702 :デフォルトの名無しさん:2018/09/04(火) 23:50:01.24 ID:gZnu4stV.net
なるほどサマータイムスレであばれた低学歴知恵遅れの一部で
マジキチだったヤツか

703 :デフォルトの名無しさん:2018/09/04(火) 23:50:48.48 ID:zILy+Zrq.net
迷惑なスレの乱立は
ID:ROt4XEkp の仕業だったんだな

704 :デフォルトの名無しさん:2018/09/04(火) 23:50:57.04 ID:ROt4XEkp.net
それは半角使うやつだろ
はっ!お前半角使ってるじゃん!

705 :612:2018/09/04(火) 23:51:43.34 ID:GKTPwsNb.net
福岡県かあ。関東かと思ってたが違ったんだな。

706 :612:2018/09/04(火) 23:53:33.54 ID:GKTPwsNb.net
>>703
前々からそうじゃないかと思ってたが、やっぱりでしたね。

707 :デフォルトの名無しさん:2018/09/04(火) 23:55:45.20 ID:ROt4XEkp.net
>>705
実はもう一つプロバイダ持ってるw
そっちはホスト名調べても県名がでない

予備回線で昔(10年以上前)は大手プロバイダでも時々回線異常発生してたんで
持ってたんだけど、最近は使わないからやめようかと思ってるけどね
もう2ちゃんねるでスレ立てるするときにしか使ってないしw

708 :デフォルトの名無しさん:2018/09/04(火) 23:56:24.91 ID:ROt4XEkp.net
んで、元の板に戻るのかどうか?
俺はどっちでもいいよ

709 :デフォルトの名無しさん:2018/09/04(火) 23:58:49.53 ID:ROt4XEkp.net
ワッチョイ板でも書いたけど日付変わったらIPアドレス変更するよ!
攻撃しないでね!(まあやっても無駄だけど)

710 :デフォルトの名無しさん:2018/09/04(火) 23:59:32.47 ID:ROt4XEkp.net
(まあIPアドレス変わっても書き込み内容が独特なのでストーキングしていればすぐに分かる)

711 :612:2018/09/05(水) 00:01:43.69 ID:D7naH2YM.net
これだけ荒らしておいて、まだUNIX板に戻る選択肢があると思ってるとは...
絶対に戻らないっことが、今回の
件でさらに強固になっただけだね。
そして ID:+CEwKGA5 はもう一つのプロバイダーを使った自演だったというわけだ。

712 :デフォルトの名無しさん:2018/09/05(水) 00:05:18.62 ID:NuDqxS96.net
疑心暗鬼(笑)

713 :デフォルトの名無しさん:2018/09/05(水) 00:33:48.24 ID:uppndDPA.net
まず馬鹿ガイキチには叶わないっていう如実なサンプルってことで、以後ID:ROt4XEkp とわかったら途中でも終了スルーでいいだろう

714 :デフォルトの名無しさん:2018/09/05(水) 03:10:59.07 ID:mw/V56zA.net
元に戻るってのはID無くすってことだぞ
全く解決になってない
解決ってのはワッチョイなりIPなり表示させることだ

715 :デフォルトの名無しさん:2018/09/05(水) 09:56:32.93 ID:NuDqxS96.net
a="abc" から最初の一文字を削除するのは
echo "${a#?}" でいけますが、
この削除した文字を取得する方法ってないですよね?

716 :デフォルトの名無しさん:2018/09/05(水) 10:20:06.92 ID:04P6tucf.net
>>715
そのままだと多分ないな
今手元にkshしかないから検証は出来んがbashだったら
echo "${a:1}"
echo "${a:0:1}"
で代用したらどうだ

717 :デフォルトの名無しさん:2018/09/05(水) 10:33:50.47 ID:NuDqxS96.net
bashはまあそれでいけますよね・・・

試しに文字列の長さを測って
(ループで空になるまで1文字ずつ消していけばわかる)

文字列の長さ-1個の??????・・・という文字列を作って
${a%????・・・} で文字列の後ろを削って1文字残す
というやり方でevalも駆使して取り出したけど、

このやり方で1文字ずつループさせたら
1KB程度の文字列で1秒かかってしまったw
これならたぶんsedで1文字ずつ改行させて処理したほうが速いだろうな

718 :デフォルトの名無しさん:2018/09/05(水) 10:34:25.02 ID:NuDqxS96.net
>>716
ついでに聞きたいんだけど、手元にkshしかない状況ってどんな状況?

719 :デフォルトの名無しさん:2018/09/05(水) 10:36:03.21 ID:04P6tucf.net
>>718
仕事中

720 :デフォルトの名無しさん:2018/09/05(水) 10:36:40.11 ID:jCw2sC+8.net
${a%${a#?}}
でいいのかな。dashでもとれてそう

721 :デフォルトの名無しさん:2018/09/05(水) 10:40:24.63 ID:04P6tucf.net
お、kshでも取れたわ
なるほど

722 :デフォルトの名無しさん:2018/09/05(水) 10:48:45.20 ID:NuDqxS96.net
>>719
あ、いや、どんな仕事をしているのかという
Linux、Macではないようだから
どんなOSを使っているのかとか

723 :デフォルトの名無しさん:2018/09/05(水) 10:51:17.41 ID:04P6tucf.net
>>722
あぁ、AIXだよ

724 :デフォルトの名無しさん:2018/09/05(水) 10:51:44.08 ID:NuDqxS96.net
>>720
それでもいけるように見えるんだけど
aの中にa*bとか入れてみたら動かない

動くパターン
a="abc"
echo "${a%${a#?}}"
=> a

動かないパターン
a="a*b"
echo "${a%${a#?}}"
=> a*

725 :デフォルトの名無しさん:2018/09/05(水) 10:52:39.04 ID:NuDqxS96.net
>>723
なるほど。そっち系はよくわからないな。

726 :デフォルトの名無しさん:2018/09/05(水) 11:14:09.22 ID:jCw2sC+8.net
特殊文字かあ。 ' で括ってで問題なさげ
${a%'*b'}
なので、こうかな
eval 'b=${a%'"'${a#?}'}"

727 :デフォルトの名無しさん:2018/09/05(水) 11:18:19.46 ID:jCw2sC+8.net
ああ、今度は ' が邪魔か。sedで

728 :デフォルトの名無しさん:2018/09/05(水) 11:22:08.23 ID:04P6tucf.net
変数展開にこだわると特殊文字がきついな
eval容認するならもうcutでいい気が

729 :デフォルトの名無しさん:2018/09/05(水) 11:26:44.33 ID:jCw2sC+8.net
なるほど

730 :デフォルトの名無しさん:2018/09/05(水) 11:33:48.80 ID:jCw2sC+8.net
あら。" で括ってでいいみたい?また、入れ子にちゃんとなってるの?{ } でちゃんとなってるのか
echo "${a%"${a#?}"}"
dashでも大丈夫みたいな

731 :デフォルトの名無しさん:2018/09/05(水) 11:37:46.43 ID:04P6tucf.net
シングルクォートで駄目でもダブルクォートはいけるのか…

732 :デフォルトの名無しさん:2018/09/05(水) 12:19:13.88 ID:NuDqxS96.net
あ、本当だ。パフォーマンス出るかな?
あとでやってみよう

733 :デフォルトの名無しさん:2018/09/05(水) 12:30:25.22 ID:NuDqxS96.net
>>728
WSLも使ってるんだよね。cygwinもそうだったけど
外部プロセス起動っていうかforkになるのかしらないけど、
かなり遅くて、これぐらいに差になっちゃう

time sh -c 'for i in $(seq 100); do echo > /dev/null; done'

real 0m0.030s
user 0m0.000s
sys 0m0.031s

time sh -c 'for i in $(seq 100); do /bin/echo > /dev/null; done'

real 0m1.213s
user 0m0.000s
sys 0m0.750s

734 :デフォルトの名無しさん:2018/09/05(水) 12:32:33.02 ID:NuDqxS96.net
evalはさほど変わらない

time sh -c 'for i in $(seq 100); do eval "echo" > /dev/null; done'

real 0m0.031s
user 0m0.000s
sys 0m0.016s

735 :デフォルトの名無しさん:2018/09/05(水) 13:00:13.96 ID:NuDqxS96.net
>>730
めっちゃ高速化したw

1506文字を>>717でやったら1.7秒だったのが0.1秒にまで減った。およそ1/10

もっとも4倍の約6000文字をやったら1.6秒にまでなったので、
文字列が長くなるにつれてどんどん遅くなるようだね。
コピーする文字が多くなるからだろう。

sedで1文字ずつ分解した場合は6000文字でも0.2秒だったので
長い文字列を1文字ずつ処理するならsed、もしくはそれ相当の何かを使ったほうが良さそう。
(シェル芸で有名らしい grep -o . は改行が抜け落ちる)

736 :デフォルトの名無しさん:2018/09/06(木) 20:18:06.55 ID:DUG5skog.net
macOSのbrewでインストールしたdashで
echo '!' って実行したら \! ってなぜか
エスケープされて表示されるんだけど誰か心当たりある?

printf '%s' '!' でも \! と表示される

737 :デフォルトの名無しさん:2018/09/06(木) 20:33:38.49 ID:DUG5skog.net
もう一つ

case '!' in
[\!]) echo OK ;;
*) echo NG ;;
esac

これを実行すると、kshだけNGって表示されるんだけどkshのバグ?
mkshだとOKなのに

738 :デフォルトの名無しさん:2018/09/06(木) 22:05:19.31 ID:DUG5skog.net
>>736はここじゃ知ってる人少なそうなんでこっちに移動しますね。

OS XをUnixとして使ってる人の為のスレ 18 [無断転載禁止]©2ch.net
https://egg.5ch.net/test/read.cgi/mac/1462475819/

739 :デフォルトの名無しさん:2018/09/07(金) 03:14:55.87 ID:SvYUtRYX.net
>>737
ブラケット内だけの特殊文字 ! (および ^) でのエスケープ対応が必須ならバグだし、言及してないとかだったら動作不定なだけだな
ブラケット内の ! と ^ でのエスケープが効く効かないの動作が違うのはcaseの場合だけじゃないよ

740 :デフォルトの名無しさん:2018/09/07(金) 08:32:30.20 ID:dfq99u5c.net
>>739

いろいろ挙動を調べたけど
1. ブラケット内で!のエスケープは必須ではないし、必要ない。
2. 多くの実装ではどんな文字でもエスケープできるため \! は ! と認識されるが、kshはそうではない
3. ブラケットの先頭に!をつけた、 [!・・・] は否定表現
4. 否定表現自体にはどの実装も対応している
5. 例えば[A]だとAにマッチだが、[!]だと否定表現として扱われる
6. kshでは[!]を否定表現として扱われるのを防ぐ方法がない
7. 普通は[]を使うときは2文字以上になるはずなので殆どの場合問題ない
 (ただし何かの処理で動的にパターンを生成している場合はありえる)

ってことなのかな?

ちなみにこれ、POSIXブラケット表現っていう名前なのかな?

741 :デフォルトの名無しさん:2018/09/07(金) 08:42:27.12 ID:SvYUtRYX.net
動的の場合もksh以外でもエスケープしなきゃならないんだから同じじゃね
[!] は文法上エラーのようなもんだから、そもそもブラケットで括らないとかなんかもう一文字入れて ! を2文字目にするとか

742 :デフォルトの名無しさん:2018/09/07(金) 08:53:35.87 ID:dfq99u5c.net
あー、動的っていうのは、
> そもそもブラケットで括らないとかなんかもう一文字入れて ! を2文字目にするとか
ということをしたいんだけど、
ここが設定ファイルに書かれている文字とかで
ユーザーが1文字を指定してしまった場合
とかいうことです。

まあ1文字なら[!]じゃなくて!にするようにすればいいんですが。

> 動的の場合もksh以外でもエスケープしなきゃならないんだから同じじゃね
ksh以外だとエスケープして [\!] と書けばOKですが、
kshだとエスケープして [\!] と書いてもNGという問題です。

743 :デフォルトの名無しさん:2018/09/07(金) 09:02:06.16 ID:SvYUtRYX.net
POSIXブラケット表現は違うんじゃないかなあ
ブラケットだけを何というのか知らんけど、パターンマッチング、ワイルドカード、グロブ定義のひとつかな。グロブがどうやららしいがそんな言葉使ったことないw

744 :デフォルトの名無しさん:2018/09/07(金) 09:04:59.23 ID:SvYUtRYX.net
>>742
細かく拘ってるけど、なに言いたいのかちょっとわからないねえ。本題と関係ないってことでいいね?

745 :デフォルトの名無しさん:2018/09/07(金) 09:18:53.90 ID:dfq99u5c.net
Bracket Expression
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05

ワイルドカードっていうのは仕様ではなく何にでも使える文字という意味でしか無く
globはファイル名に展開するもののことだと思いますよ

746 :デフォルトの名無しさん:2018/09/07(金) 09:27:59.54 ID:SvYUtRYX.net
じゃ、パターンマッチングでいいよ。めんどくさいw

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13
2.13.1 Patterns Matching a Single Character
では、エスケープ対応しろと読めるような気がしないでもない。が、! 関連ではエスケープだけじゃなく動作が違うな、dash/bash/kshでは(bashだけが違うというのもある)

747 :デフォルトの名無しさん:2018/09/07(金) 09:40:21.51 ID:dfq99u5c.net
あー、やっぱりバグな気がしてきました。
一旦変数に入れるとkshでもOKになりました
ちなみにksh以外とはbash、zsh、dash、yash、posh、mkshのことです。

# 挙動を合わせるためposix互換モードにしています
# もしかしてkshにも似たようなのありますかね?
# kshでPOSIXLY_CORRECT、set -o posixは使えませんでした。
[ -n "$BASH_VERSION" ] && set -o posix

[ -n "$ZSH_VERSION" ] && emulate -R sh


expression='[\!]'
case '!' in
$expression) echo OK ;; # ksh、ksh以外でOKになる
*) echo NG ;;
esac

case '!' in
[\!]) echo OK ;; # ksh以外でOKになる
*) echo NG ;; # kshだけNGとなる
esac

748 :デフォルトの名無しさん:2018/09/07(金) 09:44:26.93 ID:SvYUtRYX.net
なんか「バグ」にこだわっているようだけど、バグだったらバグレポートでもする気なの??
bashの [a!] の場合の方が大きな問題のような気がしないでもないが、それもエスケープすればすむのでkshさえなのかな??

749 :デフォルトの名無しさん:2018/09/07(金) 09:52:52.93 ID:dfq99u5c.net
>>748
> bashの [a!] の場合の方が大きな問題のような気がしないでもないが、
どういうことでしょうか?
試してみましたが、どの環境でも想定通り動いているようですが。
↓検証コード

[ -n "${BASH_VERSION:-}" ] && set -o posix
[ -n "${ZSH_VERSION:-}" ] && emulate -R sh

expression='[a!]'
case '!' in
$expression) echo OK ;; # すべてでOKになる
*) echo NG ;;
esac

case '!' in
[a!]) echo OK ;; # すべてでOKになる
*) echo NG ;;
esac

!は最初に持ってきたときだけメタ文字扱い(エスケープが必要)で
途中にあってもエスケープは必要ないみたいですね。
(むしろエスケープしないほうが良いみたい。後述?)

750 :デフォルトの名無しさん:2018/09/07(金) 09:57:25.65 ID:SvYUtRYX.net
ああ、すまん勘違いしてた。コマンドライン上での ! でのヒストリからの展開だった

751 :デフォルトの名無しさん:2018/09/07(金) 10:04:32.56 ID:dfq99u5c.net
!が最初以外にある場合に、\! とエスケープするとどうなるか?ですが挙動がバラけました。

[ -n "${BASH_VERSION:-}" ] && set -o posix
[ -n "${ZSH_VERSION:-}" ] && emulate -R sh

expression='[a\!]'
case '\' in
$expression) echo OK ;;
*) echo NG ;;
esac

case '\' in
[a\!]) echo OK ;;
*) echo NG ;;
esac

# 変数に入れると a \ ! のいずれかだと判断されている
#(\はエスケープ文字列として認識されていない)
ksh  OK  NG
zsh  OK  NG
yash  OK  NG
posh  OK  NG
mksh  OK  NG

# 変数に入れると a ! のいずれかだと判断されている
#(\はエスケープ文字列として認識されている)
bash  NG  NG
dash  NG  NG

変数に入れない場合は、どちらも\はエスケープ文字列として認識されている


752 :デフォルトの名無しさん:2018/09/07(金) 10:11:14.19 ID:dfq99u5c.net
まとめると、どのシェルでも同じように動かすには

1. 可能ならば!は[]の最初に書かない
2. 1を満たしている場合には、!はエスケープする必要はない(しても良い)
3. !が[]の最初に書く場合は変数に入れてマッチングさせる
4. 3の場合には、!はエスケープする

というところでしょうか?

753 :デフォルトの名無しさん:2018/09/07(金) 10:11:47.58 ID:SvYUtRYX.net
んー、発表会なの??どうすんのかどう書くのかじゃないのか??

754 :デフォルトの名無しさん:2018/09/07(金) 10:13:19.48 ID:SvYUtRYX.net
! を文字としてなら、ブラッケットで括らない、他の文字があるなら2文字目以降にする
だけじゃないのかなあ

755 :デフォルトの名無しさん:2018/09/07(金) 17:31:04.46 ID:+cI6iexZ.net
>>736はへえと思ったけど他は正直どうでもいい
シェルによって違いはあるものだし同じシェルでもバージョンによっても違うかもしれないし

756 :デフォルトの名無しさん:2018/09/08(土) 12:02:12.04 ID:t/+GvP7Y.net
文字列の末尾がLFのものを別の変数に入れる場合、
b=$a ってするしかないかな?
b=$(foo "$a") ってやったら消えるよね

関数で処理した結果を変数に代入したいんだけど、文字列末尾のLFは消したくないし、
LFはない場合も複数個の場合もあるので無条件にLFつけたりもできない

757 :デフォルトの名無しさん:2018/09/08(土) 12:14:51.45 ID:S5S855ao.net
IFS

758 :デフォルトの名無しさん:2018/09/08(土) 12:29:20.28 ID:S5S855ao.net
IFS変更しなくてもb=$(foo "$a")ってやったら消えてないじゃん。"$a"ならば

759 :デフォルトの名無しさん:2018/09/08(土) 12:57:29.41 ID:t/+GvP7Y.net
消えますよ

[test.sh]
IFS=""
LF=$(printf '\012_') LF=${LF%_}
a="test$LF$LF$LF"
foo() { printf '%s' "$1"; }

printf '%s' "$a" # 1つめのテストの末尾のLFは消えていない
b="$(foo "$a")"
printf '%s' "$b" # 2つめのテストの末尾のLFは消えてる

[実行]
test.sh | hexdump -C

00000000 74 65 73 74 0a 0a 0a 74 65 73 74 |test...test|

760 :デフォルトの名無しさん:2018/09/08(土) 13:25:21.83 ID:wZDaW80s.net
foo() { printf '%s ' "$1"; } とすると挙動が変わるんだね

761 :デフォルトの名無しさん:2018/09/08(土) 13:28:37.24 ID:t/+GvP7Y.net
違う。$(・・・)をすると挙動が変わる(末尾のLFに全削除の効果)

foo "$a" だけなら末尾のLFは消えない

762 :デフォルトの名無しさん:2018/09/08(土) 13:38:57.95 ID:wZDaW80s.net
Command substitution の仕様ってことね。

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_03

> removing sequences of one or more <newline> characters at the end of the substitution.

763 :デフォルトの名無しさん:2018/09/08(土) 13:54:13.20 ID:t/+GvP7Y.net
そういやファイル名やディレクトリ名に改行を含めるべきかどうか
POSIXで議論してるみたいな話が上の方で書いてあったけど
名前の末尾に改行が含まれてる場合に消えるから
dirnameやbasenameで取得できないってことになるな。
もういい加減仕様で含めるのやめればいいのに

764 :デフォルトの名無しさん:2018/09/08(土) 16:24:05.28 ID:xje6Dohs.net
実際名前に改行含めるような仕事したくないけどな

765 :デフォルトの名無しさん:2018/09/08(土) 16:39:55.00 ID:S5S855ao.net
>>763
あんたって決して自分のミスは認めないのね。うやむやにするいつもの人でしょ

766 :デフォルトの名無しさん:2018/09/08(土) 16:53:13.12 ID:SescvIaG.net
>>765
一人で何の話してるの?

767 :デフォルトの名無しさん:2018/09/08(土) 16:55:08.56 ID:SescvIaG.net
> IFS変更しなくてもb=$(foo "$a")ってやったら消えてないじゃん。"$a"ならば

消えますよ?だからまず自分のミスを認めましょうってことですよ。

768 :デフォルトの名無しさん:2018/09/08(土) 16:58:21.15 ID:SescvIaG.net
自分のミスはちゃんと認めましょう。

認めるまで言い続けますよ

769 :デフォルトの名無しさん:2018/09/08(土) 16:59:06.30 ID:SescvIaG.net
> IFS変更しなくてもb=$(foo "$a")ってやったら消えてないじゃん。"$a"ならば

>>759を読みましょう。
明らかに消えています。

あなたのミスですよね?
実験もしないで嘘ばっかり

770 :デフォルトの名無しさん:2018/09/08(土) 22:31:06.03 ID:B+r7WAvB.net
なんか病人多いなここ最近

771 :デフォルトの名無しさん:2018/09/09(日) 00:05:42.19 ID:MseSAwkB.net
うん

772 :デフォルトの名無しさん:2018/09/09(日) 01:30:00.09 ID:40h5Vf3t.net
alias wgeti='wget -ci <(cat <<_'
エイリアスでwgetをちょっと弄ったんですがこれの関数版作れないですかね
これで複数行のURLをDLできるけど最後に_と)入れる必要あるので

773 :デフォルトの名無しさん:2018/09/09(日) 11:41:02.87 ID:ZnXA8VyU.net
bashの拡張機能で便利なのってなんだろうか?
変数展開は便利だと思うんだが、
配列とかハッシュとか必要なんだろうかね?

配列は標準入力から受け取ってループで回せば良いわけで
それが必要になった時点で使い方を間違ってるという気がしてる

他にbashで便利なものってあるかな?
pipefailぐらい?

774 :デフォルトの名無しさん:2018/09/09(日) 11:55:57.22 ID:ZnXA8VyU.net
>>772
こういう事してるってこと?

alias wgeti='wget -ci <(cat <<_'

wgeti
http://example.com/a
http://example.com/b
http://example.com/c
_
)

それやるぐらいならこうするな。bash依存しなくてすむし

wgeti() { wget -ci -; }

wgeti<<URLs
http://example.com/a
http://example.com/b
http://example.com/c
URLs

775 :デフォルトの名無しさん:2018/09/09(日) 12:01:20.84 ID:ZnXA8VyU.net
もしくは引数で渡す場合はこう

wgeti() {
for i in "$@"; do
echo "$i"
done | wget -ci -
}

wgeti \
'http://example.com/a' \
'http://example.com/b' \
'http://example.com/c'

短く書くなら

wgeti() {
printf '%s\n' "$@" | wget -ci -
}

776 :デフォルトの名無しさん:2018/09/10(月) 00:47:57.63 ID:hUyLWeb6.net
それってこれでいいのでは?

wgeti () {
wget -c $@
}

777 :デフォルトの名無しさん:2018/09/10(月) 00:48:53.10 ID:hUyLWeb6.net
ああ、でも、引数にするなら何もしなくていいのかw
そのまんま wget の後に URL 入れるだけだ。

778 :デフォルトの名無しさん:2018/09/10(月) 02:03:17.65 ID:P2aNZV+z.net
標準入力からURLのリストを渡したいから
<(cat <<_って書いてあるんだと思った。
wget、普通に引数から複数のURL渡せるね

779 :デフォルトの名無しさん:2018/09/10(月) 02:36:11.00 ID:MLFQqRH+.net
コマンド引数の文字数制限に引っかかる可能性を
考慮すると wget -ci <(cat <<_ の方が無難なのだろう
(xargs でもいいけど)

780 :デフォルトの名無しさん:2018/09/10(月) 21:09:13.29 ID:P2aNZV+z.net
local or typeset を使用しても本物のローカル変数ではないというのは面白い性質だよな
(本物のっていうのは一般的な言語相当のローカル変数という意味)

i=A
foo() {
local i=B
echo "foo1 $i" # => foo1 B
bar
echo "foo2 $i" # => foo2 C
}
bar() {
echo "bar $i" # => bar B
i=C
}
foo
echo "$i" # => A

「この関数の中だけで使う変数です。」ではなくて
「localの場所で変数を保存します。関数が抜けたら保存した値を戻します。」
という意味なんだよね。

POSIXにはないlocalやtypesetを使っても本物のローカル変数にはなれないが、
引数だけは本物のローカル変数になっているというのも面白い
(何も書かなくても関数に入った時点で、自動的にlocalが実行されると考えることもできる)

引数への代入は $1=123 とか 1=123 みたいにはできないけど、
set -- "123" "456" "789" みたいにすると再設定できる。
$1だけ設定したくても、すべての引数を設定する必要があるけど。
グローバル変数は時に分かりづらいバグを生むことがあるけど
これをうまく使えば、使用する変数をなくせたり減らせたりするかもしれないな

781 :デフォルトの名無しさん:2018/09/10(月) 23:57:57.78 ID:3w8KnLJN.net
ダイナミックスコープはperlとかpowershellとかmathematicaとかにもあるけど、これもグ口ーバル変数並にバグの温床な気がする

782 :デフォルトの名無しさん:2018/09/11(火) 01:49:50.99 ID:oHtbKRPF.net
あぁ、これがダイナミックスコープのことなのか
Perl?って思ったけど、(Perlの)localを使った場合の話なのね。
通常はmyを使ってたから。

783 :デフォルトの名無しさん:2018/09/13(木) 14:07:12.80 ID:q7iUBK5M.net
ふと思ったんだけどシバンってあるじゃんシバン
あれってさ、#がコメントじゃない言語だったらどうするの?
Cインタプリタだったら

//!/usr/local/bin/c

とか書くの?

784 :デフォルトの名無しさん:2018/09/13(木) 15:47:52.06 ID:CY4XgXEU.net
>>783
あれはカーネルが解釈してるからだめ。

785 :デフォルトの名無しさん:2018/09/13(木) 16:45:07.13 ID:1sKEH3Wo.net
>>784
シバンってカーネルが解釈してんのか
だからFreeBSDとOS XとGNU/Linuxで挙動が変わるんだな。同じbashでも。

786 :デフォルトの名無しさん:2018/09/13(木) 17:23:01.88 ID:CY4XgXEU.net
>>785
別問題じゃね?どんな挙動?

787 :デフォルトの名無しさん:2018/09/13(木) 21:25:29.73 ID:fcPV9kIu.net
>>783
面白いネタを振ってくれてありがとう。いろいろ調べて勉強になったよ。
ちなみに質問の答えは「できないとは限らない」ということになるかなあ。
ネタを振ってくれたことには感謝するけど、自分で調べるほうが楽しいよ。

788 :デフォルトの名無しさん:2018/09/13(木) 21:47:40.27 ID:mocTFwRb.net
今日の荒らしは ID:fcPV9kIu か。NG推奨

789 :デフォルトの名無しさん:2018/09/13(木) 22:02:34.22 ID:QPFUtiyL.net
落ち着け

790 :デフォルトの名無しさん:2018/09/14(金) 04:16:04.32 ID:q3l06dS7.net
>>786
FreeBSDだと
#! /usr/bin/env awk -f
これが普通に通るけど
GNU/Linuxだと
“awk -f”なるコマンドがないとかなんとか言われる

791 :デフォルトの名無しさん:2018/09/14(金) 05:06:28.57 ID:hVbFTBye.net
素朴な疑問
・ shebangは シェバン? シバン?
・ "#!"の後にスペース入れずに "#!/bin/sh" ? スペース入れて "#! /bin/sh" ?
自分はともに前者、特にスペースについては入れるべきではないというの最初に覚えたんだけど、
結構後者も目にすることがあるので、実際のところ、どうなの?

792 :デフォルトの名無しさん:2018/09/14(金) 09:25:36.66 ID:lqNqtREE.net
>>790
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/execve.2.html
うぉ、Linuxまじ最低だな

インタープリタースクリプトの optional-arg 引き数の解釈方法は実装により異なる。
Linux では、インタープリター名 interpreter に続く文字列全体がインタープリターに
1個の引き数として渡される。 しかし、動作が異なるシステムもある。 あるシステム
では、 optional-arg のうち最初のホワイトスペースまでが 引き数として渡される。
また、別のシステムでは インタープリタースクリプトは複数の引き数を持つことができ、
optional-arg 内のホワイトスペースが引き数の区切りとなる。

793 :デフォルトの名無しさん:2018/09/14(金) 09:40:37.87 ID:CXa+ZLzo.net
>>790
本題のshebang仕様とは話がずれるが、
awkはいにしえの奴も含め俺の知る限りすべて/usr/bin/awkで起動できるから
env使う必要ないと思う。

794 :デフォルトの名無しさん:2018/09/14(金) 09:48:01.90 ID:CXa+ZLzo.net
>>791
#! の後のスペースは、どのOSでも有無に関わらず動いたと思う。
ただしshebang行に32バイト制限のあるOS があったので、
それに引っかかるギリギリならスペース無しにする必要アリ。

読みは知らない。

795 :デフォルトの名無しさん:2018/09/14(金) 10:54:54.26 ID:6xTUz+7n.net
>>793
自分でビルドしたawkを使う場合は?

796 :デフォルトの名無しさん:2018/09/14(金) 12:12:08.80 ID:CXa+ZLzo.net
>>795
システム付属じゃ駄目で、自分でビルドした特有の事情があるなら、絶対パス指定で呼べばいいのでは?

797 :デフォルトの名無しさん:2018/09/14(金) 16:14:10.39 ID:6xTUz+7n.net
>>796
それだと実行権限の意味がなくなるじゃん
実行権限をつけるのは、いちいち実行プログラムのパスを指定しなくていいからでしょ?
拡張子もなくせばなんの言語で作られているかも意識しないですむし。

手でコマンドを打ったときと同じように、環境変数の$PATHからどれを使うかが決まる。
そもそもなんで最初からそういう仕組みにして置かなかったんだろう?
そうすりゃシバンなんて #!awk だけですんだのにね

798 :デフォルトの名無しさん:2018/09/14(金) 16:33:58.92 ID:gmWhNmZA.net
実行権限は絶対パスでも相対パスでも必要なので関係ない

799 :デフォルトの名無しさん:2018/09/14(金) 16:35:21.26 ID:KKMncdOE.net
スクリプトのパスとインタプリタのパスを混同している

800 :デフォルトの名無しさん:2018/09/14(金) 16:36:11.79 ID:6xTUz+7n.net
>>798
シバンの話だよ
実行するスクリプトのパスじゃなくて
実行するスクリプトが使用するインタプリタのパス

801 :デフォルトの名無しさん:2018/09/14(金) 16:46:56.10 ID:gmWhNmZA.net
シバンの話は分かってるけど?
実行するスクリプトが使用するインタプリタに実行権限付いてなかったら
当たり前だけど絶対パスで指定したって実行できないよ?

802 :デフォルトの名無しさん:2018/09/14(金) 16:49:01.41 ID:CXa+ZLzo.net
>>797
なんか誤解してる?
絶対パスで書くってのは
#!/home/me/bin/awk -f
みたいに書くって意味だよ。

803 :デフォルトの名無しさん:2018/09/14(金) 16:53:40.07 ID:UfVRD/gP.net
>>794
> shebang行に32バイト制限のあるOSがあった
なるほど、そんな理由もあったんだね。

逆にスペースorタブを入れなければならない、なんていう例(4.1BSD)もあったみたいだ。
これについては修正されたようだけど、今でもこれを守っている人もいるらしい。

同じ#で始まっていても、コメントとは違うと思うから、
やはりスペースを入れることにはなんとなく躊躇しちゃうわ。

804 :デフォルトの名無しさん:2018/09/14(金) 18:40:33.82 ID:q3l06dS7.net
俺は半分脳死状態で
#! /bin/sh -
↑半角スペース ↑ハイフンマイナス
にしてるわ。

上でも書いてくれた人がいるけど,#!の後に空白が必要な環境があったり
先頭行から継続してパースしてしまい
(ほとんどありえないことだけど)
#! /bin/sh

-c
みたいなファイルに対し
/bin/sh -cというオプション付きshインタプリンタを起動してしまうOSもあるみたい
(オライリーのシェルスクリプト本に記述あり)

805 :デフォルトの名無しさん:2018/09/14(金) 18:50:01.26 ID:hBiQ1eS5.net
- で閉じるのはオレもやってるけど、
シバンの後のスペースは入れない
#!/bin/sh -

806 :デフォルトの名無しさん:2018/09/14(金) 19:07:11.14 ID:6xTUz+7n.net
>>802
わかってる

#!/home/me/bin/awk -f
って書いたら、必ず /home/me/bin/awk が使われてしまう

例えばdebian 9のawkは4.1.4だがdebian 7は4.0.4だった
debianのawkのパスは /usr/bin/awk だが。debian 9で自分でawkの
最新版をビルドして /usr/local/bin/awk に入れたとしよう

awkスクリプトのシバンが #!/usr/bin/env awk と書いてあれば
$PATHを見て適切な /usr/local/bin/awk を選んでくれるが、
envを使ってないと、/usr/bin/awk 決め打ちになってしまう

大量にある(かもしれない)awkスクリプトのシバンを全部書き換えるなんてナンセンスだし
せっかく実行権限が付いてるのに、awk スクリプトファイル名 と書くのもナンセンスだろ

実行プログラムが何の言語で書かれているかなんて、利用者には知ったことじゃないんだから
fooコマンドはfooコマンドとして実行してほしいし、 使用するインタプリタは $PATH を見て欲しい

807 :デフォルトの名無しさん:2018/09/14(金) 19:21:44.66 ID:za5qG/O1.net
なんかいろいろ誤解しとるw

808 :デフォルトの名無しさん:2018/09/14(金) 19:27:29.88 ID:EsLYvq4M.net
>>806
何をしたいとかは別として、実装としてできないんだよ。
カーネルのシステムコールexecveはPATHを見ない。
PATHを見てるのはユーザランドのライブラリ関数のexecvpとか。
大改造が必要になる。

809 :デフォルトの名無しさん:2018/09/14(金) 19:38:49.59 ID:6xTUz+7n.net
>>808
実装としてできないってどっちの話?

勘違いしている人がいて、話の前提で止まっている人がいてややこしいけど
>>806の話は理解した上で、俺が提案した #!awk でいいじゃんって話だよね?

PATHを見れないというのなら、見る必要はないよ。
#!awk -f という記述(絶対パスでないもの)を決め打ちした文字(/usr/bin/env )を
頭に入れて #!/usr/bin/env awk -f として解釈すればいいだけ

どういう文字を頭に入れるかはディストリが決めたカーネルの
ビルドオプションででも設定すればいいだろう

単なる文字列の変換でしかないので、カーネルだけでできる

810 :デフォルトの名無しさん:2018/09/14(金) 20:18:23.13 ID:EsLYvq4M.net
カーネルが特定の決め打ちしたバイナリを呼ぶようなことはないよ。
せいぜいinitだけ。

811 :デフォルトの名無しさん:2018/09/14(金) 20:29:56.82 ID:6xTUz+7n.net
そういう中途半端なレスはやめて欲しい。
結局>>809の方法で可能だってことだろう?
そうでないなら、そうでないとわかるように理由を添えて書いてくれ

812 :デフォルトの名無しさん:2018/09/14(金) 20:33:39.49 ID:EsLYvq4M.net
それほど言うなら試しにlinuxのパッチ書いて投げてみたら?

813 :デフォルトの名無しさん:2018/09/14(金) 20:33:54.17 ID:6xTUz+7n.net
補足すると>>809読めばわかると思うけど、読み取ったシバンの文字列を置き換えるだけ。
だからカーネルが特定の決め打ちしたバイナリを呼ばないというのが事実であっても
読み取ったシバンの文字列を置き換える話と無関係の話ということ

814 :デフォルトの名無しさん:2018/09/14(金) 20:35:05.30 ID:6xTUz+7n.net
>>812
話がすり替わってる。

技術的に可能かどうかの話をしている所に、
じゃあってみせろと言われても、
それは関係者を説得するのは難しいだろう?別の話だろ?

815 :デフォルトの名無しさん:2018/09/14(金) 20:36:01.42 ID:EsLYvq4M.net
可能か不可能かで言えば、もちろん可能だよ。なんだって可能。
でも、カーネルとユーザランドは明確に分けろって怒られるだろうね。

816 :デフォルトの名無しさん:2018/09/14(金) 20:39:33.43 ID:6xTUz+7n.net
>>815
話聞いてるか?
シバンはカーネルが読み取るもの
ユーザーランドのものには一切手を出していない。
読み取ったシバン文字列を置き換えるだけなんだから

817 :デフォルトの名無しさん:2018/09/14(金) 20:39:41.70 ID:1jWDqP4V.net
>>809
カーネルいじればそれは可能だな。
カーネル書ける人なら目茶目茶難しいってほどじゃないから、
カーネル書ける人雇えばいいぞ!

ただしそれを標準カーネルの機能として入れてもらえるように
議論するのは、カーネルに機能追加するよりだいぶ大変かも。
#! じゃない別のmagic文字列にした方が提案通りやすいかもな。
頑張れw

818 :デフォルトの名無しさん:2018/09/14(金) 20:42:06.79 ID:6xTUz+7n.net
>>817
技術的に可能でありユーザーランドを触ってないってのは同意したの?

だから関係者と話をつけるのが難しいっていうのは
別の話だから、すり替えるのはやめてくれと行ったんだが

819 :デフォルトの名無しさん:2018/09/14(金) 20:43:14.61 ID:6xTUz+7n.net
つーか、いい加減にしないといつもの荒らしモードに入るぞ?w

議論に負けそうになると、話をすり替えて、
俺を呼ばわりするのはいつもの手だよなw

もうそろそろ荒らし認定することだと思ってるんだが?w

820 :デフォルトの名無しさん:2018/09/14(金) 20:43:32.04 ID:6xTUz+7n.net
訂正

俺を荒らし呼ばわりするのはいつもの手だよなw

821 :デフォルトの名無しさん:2018/09/14(金) 20:46:17.92 ID:6xTUz+7n.net
反論しないならさっさとNGIDに入れて
俺に反論できない状態を作ってくれよ?

見れなくなったら俺に反論できないんだから
それこそ俺の望んだ結果だw

はい、結論。>>809の方法で技術的には実現可能です。
反論がある人は、関係者を説得して調整をするのが難しいって
別の話にすり替えないで技術的な話でお願いしますねー

822 :デフォルトの名無しさん:2018/09/14(金) 20:46:23.72 ID:1jWDqP4V.net
>>818
なんか別人と勘違いしてるようだが、俺は技術的にできないと書いたことは一度もない。

この勝手に勘違いしてるあたり、もしかしていつもの人か?

823 :デフォルトの名無しさん:2018/09/14(金) 20:48:41.19 ID:6xTUz+7n.net
>>822
はい、技術的な内容を長文で書いて
相手を論破するのは、いつもの俺のパターンw

824 :デフォルトの名無しさん:2018/09/14(金) 20:48:54.07 ID:1jWDqP4V.net
だって勝手に勘違いして勝手な仮定して勝手に腹立ててるんだもん。

せっかく賛成してた俺まで敵視しだす有り様だし。
自業自得ってことよ。

825 :デフォルトの名無しさん:2018/09/14(金) 20:51:13.71 ID:jAge75Zy.net
長文ってだけでとりあえずスクロールする

826 :デフォルトの名無しさん:2018/09/14(金) 20:54:16.23 ID:6xTUz+7n.net
>>824
5ちゃんねるなんだからこの程度のもんよ

こっちが真面目に話をしていても、とりあえず何か言い返せば
それが反論したことになるみたいな、みたいなクソみたいなレスしてくる

いい案だと思うなら一言「それはいい考えだ」ぐらい書けと
自分が間違っていたら、素直に間違いを認めるやつばかりなら、
それもこんなにどうでもいいことを、毎回書かなくてすむんだよ

827 :デフォルトの名無しさん:2018/09/14(金) 20:58:13.19 ID:EsLYvq4M.net
>>816
ファイルシステムの構成に何らかの仮定を置いた時点でユーザランドと分離できていない。

828 :デフォルトの名無しさん:2018/09/14(金) 20:59:16.05 ID:EsLYvq4M.net
ちなみに俺はIDずっと変えてないよ。

829 :デフォルトの名無しさん:2018/09/14(金) 20:59:57.05 ID:6xTUz+7n.net
>>827
ファイルシステムの構成に仮定をおいたりしてない
単にシバン文字列を置換するだけ

830 :デフォルトの名無しさん:2018/09/14(金) 21:08:41.85 ID:EsLYvq4M.net
>>829
仮定せずにどうやって/usr/bin/env付ければいいってわかるの?

831 :デフォルトの名無しさん:2018/09/14(金) 21:12:09.04 ID:6xTUz+7n.net
>>830
単なる文字列の置換に過ぎない
カーネルはシバンがファイルパスなんて思ってない。

カーネルがシバンを読み取るというのなら、少なくとも
読み取ったものがシバンであるということはわかってる
あとはそこににある文字列が、ファイルパスだろうが
ランダム文字列だろうが関係ない

単に#!の後に固定の文字列を埋めるだけ
あとは後続のプログラムに渡せば、
そいつが勝手になにかしてくれるんだろ?
それはカーネルの知ったことじゃない

832 :デフォルトの名無しさん:2018/09/14(金) 21:30:49.25 ID:gmWhNmZA.net
この話と実行権限が関係ないのは理解できたのか?

833 :デフォルトの名無しさん:2018/09/14(金) 21:44:08.73 ID:6xTUz+7n.net
>>832
お前1人で意味不明の話をしてるんだってw

(awkスクリプトで書いた)fooコマンドが実行できるのは
fooコマンドに実行権限がついているからだし、そのfooコマンドの
シバンで指定されたプログラムも実行権限がついていなければいけない

当たり前の話だが、上記の理由により awkであっても /usr/bin/envを
使っておいたほうが良いって結論を言ったんだが、
それに対して前は何の話をしてるのだ?

834 :デフォルトの名無しさん:2018/09/14(金) 21:46:58.87 ID:6xTUz+7n.net
どうもこの話を理解できないのが、おかしいと思うんだが、
もしかしてawkスクリプトに実行権限をつけるという発想がないのか?
いつもawk -f スクリプトファイル名 で実行してるとか?

いや、まさかな。
シバンはスクリプトファイル名だけで実行するためにあるんだし
そのために実行権限つけるだろう。

でもなぁ、ここまで以上に理解能力がないのは、
まかさが的中しているとしか思えない。
シバンをつける意味もわかってなかったりしてw

835 :デフォルトの名無しさん:2018/09/14(金) 21:49:19.68 ID:jAge75Zy.net
ここまでの話全く読んでないけどawk実行させる時は-f使うわ

836 :デフォルトの名無しさん:2018/09/14(金) 22:00:24.41 ID:6xTUz+7n.net
>>835
ということは、シェルスクリプトを実行させるときはsh使って
perlスクリプトを実行させる時はperlを使ってるのかな?

かつてsystemdが普及するまではみんなが使っていた
serviceコマンドやbyobuはシェルスクリプトだし
apt-fileやshasumはPerlスクリプトだし
ufwはPythonスクリプトだよ

実装がなんのスクリプト言語で作られているかなんて気にしなくていいじゃないかw

837 :デフォルトの名無しさん:2018/09/14(金) 22:02:01.56 ID:jAge75Zy.net
shは実行権限つける
perlは場合による
意味はない

838 :デフォルトの名無しさん:2018/09/14(金) 23:01:40.99 ID:gmWhNmZA.net
>>833
俺は>>797でお前が意味不明な
> それだと実行権限の意味がなくなるじゃん
と、書いてたからパス指定と実行権限の意味は無関係だと指摘してるだけなんだが
機能的文盲とかいうやつなのか?

839 :デフォルトの名無しさん:2018/09/14(金) 23:05:15.75 ID:fXySkelb.net
$ls aho.sh
rw-r--r-- aho
$. ./aho.sh
aho
$

840 :デフォルトの名無しさん:2018/09/14(金) 23:06:41.90 ID:fXySkelb.net
$cat ./aho.sh
echo aho
$

841 :デフォルトの名無しさん:2018/09/14(金) 23:15:17.42 ID:1jWDqP4V.net
>>838
確かにあの書き込みは全体的に意味不明だったね。

842 :デフォルトの名無しさん:2018/09/15(土) 01:10:17.43 ID:pm09nqHo.net
>>838
> と、書いてたからパス指定と実行権限の意味は無関係だと指摘してるだけなんだが
> 機能的文盲とかいうやつなのか?

実行権限がついているとパスの指定を省略できるんだよ

ご存知じゃないかもしれないが(皮肉)パスの指定を省略した時に
$PATHに設定された複数のパスから、パスを補完してくれる機能がある
つまり$PATHからパスを補完してほしいなら実行権限をつけないとだめ

(awk)スクリプトを$PATHの中から補完してほしいなら実行権限をつける。
そうするとパスを省略して実行できる。
スクリプト自体は$PATHから補完してくれる、だけどそのスクリプトに
シバンが/usr/bin/awkとなっていると、スクリプトを実行するインタプリタは
/usr/bin/awk固定となってしまう。

/usr/bin/env awk -f と書くことで、インタプリタ自体も$PATHから検索してくれる

パス指定を"省略すること" と 実行権限の意味、いい加減理解しましたかね?

843 :デフォルトの名無しさん:2018/09/15(土) 01:13:44.97 ID:pm09nqHo.net
ほんと、理解能力がないのか、
それとも、単に技術レベルが数ランク下なのか知らんが
馬鹿を相手にしてると疲れる。煽りたくもなるわw

844 :デフォルトの名無しさん:2018/09/15(土) 01:20:22.61 ID:pm09nqHo.net
> 796 返信:デフォルトの名無しさん[sage] 投稿日:2018/09/14(金) 12:12:08.80 ID:CXa+ZLzo [3/4]
>>795
システム付属じゃ駄目で、自分でビルドした特有の事情があるなら、絶対パス指定で呼べばいいのでは?


797 名前:デフォルトの名無しさん[sage] 投稿日:2018/09/14(金) 16:14:10.39 ID:6xTUz+7n [2/20]
>>796
それだと実行権限(をつけてパスを省略できるようにした)の意味がなくなるじゃん


ここまで言えば、馬鹿でも理解できるかな?
まだ説明しないと理解できない?

845 :デフォルトの名無しさん:2018/09/15(土) 01:22:03.62 ID:pm09nqHo.net
実行権限は単に実行可能にするだけじゃない
パスを省略して$PATHの中からパスを補完してくれる機能があるのだ

846 :デフォルトの名無しさん:2018/09/15(土) 01:32:29.75 ID:pm09nqHo.net
まあ、細かいことを説明するなら、"スクリプトファイル" の実行パスを
検索してくれるのはシェルで、シェルが$PATHの中から
実行ファイルを見つけることができるようにするために実行権限をつける

でも今は "スクリプトファイル" の実行パスの検索の話ではなく
シバンから起動する "インタプリタ" の話
シバン自体には$PATHの中から検索してくれる機能はなくて
単にシバンに書かれたパスのプログラムを実行するだけ

そこで出てくるマジックが /usr/bin/env awk -f
シバンは$PATHを検索しないが、/usr/bin/envが$PATHを検索して
適切なプログラム(ここではawk)に引き継いでくれる


などと丁寧に説明してやったら、今度は長文だーとか言って
荒らし呼ばわりするんだろう?

847 :デフォルトの名無しさん:2018/09/15(土) 02:03:07.61 ID:pm09nqHo.net
話は変わるけどさ、

シェルスクリプト(シバンは #!/bin/sh 実体はdash)に
A=
A=123 echo "$A-1"
echo "$A-2"

って書いて実行したら以下のように表示されるんだよ。
-1
-2
この動きはA=123が評価される前にechoの変数展開が行われて-1になって
実行したらAの内容が元に戻るから-2と表示されるということで理解できる


でも以下のように書いたら
A=
A=123 eval 'echo "$A-1"'
echo "$A-2"

次のように表示されるんだよ
123-1
123-2

これはどういうわけだろう?

さらにbashとzshで実行した場合は以下のように表示されたw
123-1
-2
この動作ならまだ理解できる。

でもkshやposhやyashなんかはdashと同じ
どっちが正しい動きなんだろう?

848 :デフォルトの名無しさん:2018/09/15(土) 04:27:15.99 ID:2etSWec6.net
またかww

849 :デフォルトの名無しさん:2018/09/15(土) 05:43:59.56 ID:krdUo6un.net
>>847
単にシェルごとに仕様が違ってるだけで全て正常動作だろうし正しいと言えば正しいのでは?
てか、あらゆるシェルはこのような時はこのような動きにならなければいけないみたいな決まりがあるわけでもないんだから正しいか間違いかで考えること自体がおかしい。

850 :デフォルトの名無しさん:2018/09/15(土) 06:12:06.93 ID:pm09nqHo.net
>>849
> 単にシェルごとに仕様が違ってるだけで全て正常動作だろうし正しいと言えば正しいのでは?

POSIXの仕様と照らし合わせてって意味だよ

POSIXの仕様と照らし合わせて正しいのか間違ってるのか
そもそもPOSIXにこういったときの仕様は定義されていないのか

> あらゆるシェルはこのような時はこのような動きにならなければいけないみたいな決まりがあるわけでもないんだから

決まりはあって、それがPOSIXの仕様のことだよ

851 :デフォルトの名無しさん:2018/09/15(土) 06:13:27.92 ID:pm09nqHo.net
>>848
> またかww

うん、またなんだ。済まない。
バーボン(略

852 :デフォルトの名無しさん:2018/09/15(土) 09:25:08.76 ID:bwURAev4.net
よほどリアルでぼっちなんだな。そらそうだなという人格と見えるし

853 :デフォルトの名無しさん:2018/09/15(土) 11:18:23.22 ID:OUVvcRON.net
>>843
> それとも、単に技術レベルが数ランク下なのか知らんが
https://cdn-ak.f.st-hatena.com/images/fotolife/k/kemurikikakuku/20170201/20170201184641.jpg

854 :デフォルトの名無しさん:2018/09/15(土) 15:58:58.37 ID:8KftQgLD.net
俺自身にもそういう傾向があるが
訊かれてもないことをずらずら書いて自己満足に浸るのはよくないと思う。
現実の人間関係でもそういう人はハブられがちだし。

855 :デフォルトの名無しさん:2018/09/15(土) 16:00:37.10 ID:KIanXBkQ.net
聞いたことを答えないで
聞かれてないことを答えるのは
それはそいつが何も知らないときだ

オマエはなにもわかってない

856 :デフォルトの名無しさん:2018/09/15(土) 16:04:38.00 ID:pm09nqHo.net
>>855
誰がそんなことを答えてくれと質問したんだ?

聞かれてないことをペラペラ喋ってるのは
あんただろう?w

857 :デフォルトの名無しさん:2018/09/15(土) 16:05:17.15 ID:pm09nqHo.net
>>847の質問よろしくおねがいします。

858 :デフォルトの名無しさん:2018/09/15(土) 16:16:01.63 ID:iaCHT03n.net
文書なげぇんだよなぁ

859 :デフォルトの名無しさん:2018/09/15(土) 16:16:38.70 ID:pm09nqHo.net
前に情報小出しにするなって言われたからねw

860 :デフォルトの名無しさん:2018/09/15(土) 16:32:31.20 ID:Svn0IWNp.net
質問のときだけはへり下るのな
身を正してのつもりかもだが、質問のときだけですぐに豹変するからお前の場合はもうただただ気持ち悪いだけ

861 :デフォルトの名無しさん:2018/09/15(土) 16:35:43.79 ID:pm09nqHo.net
何だ?質問も高圧的にすれば満足するんか?
ただ文句言いたいだけだろ。
そんな無駄な会話してないで
本題にもどれや

862 :デフォルトの名無しさん:2018/09/15(土) 16:38:13.80 ID:Svn0IWNp.net
どうしてそっちになるのだか。やっぱりそっちが素で付け焼き刃のへりくだりか
社会的にはは豹変しない方になんだけどなあ

863 :デフォルトの名無しさん:2018/09/15(土) 16:45:50.83 ID:pm09nqHo.net
やっぱり意地でもスレと無関係の話をしたいようだ。
お前がいなくなればスレは平和になるのになぁw

864 :デフォルトの名無しさん:2018/09/15(土) 16:50:58.66 ID:Svn0IWNp.net
なにその俺は違う的なレスは
さすがいままでのレスで自己中ぶりを発揮しまくっただけあるやつだなあ。ただただ気持ち悪いのもそれは自己中ぶりからなんだかが、わからないだろうな、わかってたらそんな自己中にはならんだろうし

865 :デフォルトの名無しさん:2018/09/15(土) 16:55:24.75 ID:SSTURz0o.net
なるほど、コマンドライン上にある変数(シェルが予め展開する変数)はそのままなのか
fork & exec されるプロセス空間の環境変数にのみ作用するのだからそうなるわな

$ PATH=hoge ls "${PATH}"
$ PATH=hoge /bin/ls "${PATH}"

866 :デフォルトの名無しさん:2018/09/15(土) 17:01:07.67 ID:Svn0IWNp.net
>>865
それと、(一時的)環境変数をいつするのかと、環境変数をいつ展開するのかが被ってるてとこかなあ
A=123 /bin/echo "$A"
A=123 bash/dash/ksh/etc... -c 'echo "$A"'

867 :デフォルトの名無しさん:2018/09/15(土) 17:19:32.41 ID:8KftQgLD.net
>>866
そのコマンドラインは,「直前に指定した変数が影響しない」のが正しい挙動だよな

なぜならシェルはそれらを一緒くたに処理するから,変数の変化を参照できない
↑この理解って正しい?

bashコマンドラインで
$ VAR=val echo $VAR
# なにも返らず
$ VAR=val; echo $VAR
val
こういう挙動から推測したんだけども。

868 :867:2018/09/15(土) 17:20:16.67 ID:8KftQgLD.net
ごめん安価ミス
1s/>>866/>>865/1

869 :デフォルトの名無しさん:2018/09/15(土) 17:42:37.90 ID:pm09nqHo.net
>>865
forkされる場合ってのはわかりやすいんだけどね

> A=
> A=123 echo "$A-1"
> echo "$A-2"
>
> 次のように表示されるんだよ
> 123-1
> 123-2

実行するのがシェルビルトインコマンドであっても実行後は元に戻る

ん?頭にA=123をつけた時、本当にシェルビルトインの
echoが呼ばれてるのか?と思ってecho --versionとしてみたが、
やっぱりシェルビルトインの方だった。
(/bin/echo --versionだとバージョン情報が表示される)
他のシェルで試してみたがすべて同じ挙動

ということで

> A=123 echo "$A-1"

と書いたら変数の内容は実行後に元に戻る。
というのが基本の動きでいいのだろう
まあよく知られた機能だよね。

870 :デフォルトの名無しさん:2018/09/15(土) 17:43:08.57 ID:pm09nqHo.net
ちなみにコマンドライン(シェル)じゃなくて
スクリプトを書いて実行して確かめてる

871 :デフォルトの名無しさん:2018/09/15(土) 17:56:26.73 ID:pm09nqHo.net
知ってると思うんだけど、念の為

var=value command

この構文は、変数varにvalueを入れるだけじゃなくて
export varした状態になる。だからcommandが
外部コマンドであっても値は引き継がれている
(今回の話とは直接関係はない)

872 :デフォルトの名無しさん:2018/09/15(土) 18:00:22.45 ID:pm09nqHo.net
話を簡単にすると

A=
A=123 eval :
echo $A

dashだと123と表示される。
bashだと何も表示されない。

873 :デフォルトの名無しさん:2018/09/15(土) 18:15:21.72 ID:SSTURz0o.net
>>872
ふむ、bash で set -o posix してから実行すると 123 って表示されるね

874 :デフォルトの名無しさん:2018/09/15(土) 18:22:17.36 ID:pm09nqHo.net
>>873
それは気づかなかった。ってことはPOSIXで仕様化されてるってことかな?
evalだけ特殊と。なんでだろうね。

875 :デフォルトの名無しさん:2018/09/15(土) 18:34:31.19 ID:8KftQgLD.net
>>871
$ VAR=val echo $VAR
とした場合,「VAR=val」が反映されていないように見えるのはどうしてだろう

876 :デフォルトの名無しさん:2018/09/15(土) 18:43:07.13 ID:pm09nqHo.net
>>875
それは単に「VAR=var echo $VAR」が1行だから
先に$VARが展開されるだけだと思うよ

変数を一時的に変更したいけど、別変数にバックアップして元に戻すの面倒だな
その他にも方法あるけどアレ(省略)だし、

よし、var=value command構文を使おう!
うお、先に$VARが展開されちまった
ぴこーん!だったらeval使えば先に展開されることないんじゃね?

よし動い・・・あれぁ、変数を一時的に変更したかったのに
実行終わっても変数が元に戻らないよぉ

よし5ちゃんねるだ。という流れw

877 :デフォルトの名無しさん:2018/09/15(土) 18:52:32.83 ID:8KftQgLD.net
>>876
もうとっくに分かってると思うが 俺が思い付いたのは
$ VAR=val-b4
$ (VAR=val-tmp; echo $VAR)
→ val-tmp
$ echo $VAR
→ val-b4
くらいだな

878 :デフォルトの名無しさん:2018/09/15(土) 19:22:09.86 ID:imSsWev+.net
https://i.imgur.com/VhwX2Fq.jpg

このスクショのようにmediainfoというコマンドのAudioの項目のFormatを取り出す方法教えてほしいです

以前はそのAudioのFormatという文字列はFormat profileだったので、
mediainfo "$FILE" | grep -E '^Format profile' | sed -E 's/.*: (.*)/\1/'
こうやってその行を抽出していたんですが、mediainfoがバージョンアップしてFormatという文字列に変わってしまいました。
Generalの項目にもFormatがあるので、これだと調べられません。
どうやるんでしょうか?

879 :デフォルトの名無しさん:2018/09/15(土) 19:37:37.26 ID:SSTURz0o.net
GNU sed の -r オプション使ってるけど、こんな感じで

$ mediainfo "$FILE" | sed -nr '/^Audio/,$s/^Format +: (.+)/\1/p'

880 :デフォルトの名無しさん:2018/09/15(土) 19:38:31.49 ID:pm09nqHo.net
>>878
mediainfo "$FILE" | sed -n -E '/Audio/,/\s*$/{s/Format\s*:\s//p}'

881 :デフォルトの名無しさん:2018/09/15(土) 19:41:31.43 ID:SSTURz0o.net
ヘルプメッセージ読んだらこれでいいかも

$ mediainfo --Inform="Audio;%Format%" "$FILE"

882 :デフォルトの名無しさん:2018/09/15(土) 19:41:51.97 ID:pm09nqHo.net
Audioにformatが複数あっても対応できないかなー?ってやってたら遅れたw

883 :デフォルトの名無しさん:2018/09/15(土) 19:42:08.44 ID:8KftQgLD.net
>>878
mediainfo "$FILE" | sed -n -e '/^Audio/,$p' | grep '^Format' | cut -f '2-' -d ':' -s
これでどうだろう?

ところで綺麗な端末だね。

884 :デフォルトの名無しさん:2018/09/15(土) 19:42:36.17 ID:8KftQgLD.net
ちょっと確かめてたらめっちゃ回答ついてたw

885 :デフォルトの名無しさん:2018/09/15(土) 19:43:35.86 ID:8KftQgLD.net
ちなみに俺のコマンドラインはPOSIXに準拠してるので可搬性は高いと思うよ(ドヤ顔)

886 :デフォルトの名無しさん:2018/09/15(土) 19:50:28.32 ID:pm09nqHo.net
Format複数あっても出力されるはずなのにおかしいと思ったら
CRLFになってたw いい加減ATOMのデフォルトを変えないと

>>885
> POSIXに準拠してるので
そうそう。それを言おうと思っていたw

>>879
> GNU sed の -r オプション使ってるけど、こんな感じで
-r じゃなくて -E を使えば良いのでは?
POSIX準拠?かどうか知らないけど-Eは使えるはず

887 :デフォルトの名無しさん:2018/09/15(土) 19:57:27.53 ID:SSTURz0o.net
>>886
>> GNU sed の -r オプション使ってるけど、こんな感じで
>-r じゃなくて -E を使えば良いのでは?
>POSIX準拠?かどうか知らないけど-Eは使えるはず

癖で指が -r を押してしまう…以後気をつけます

888 :デフォルトの名無しさん:2018/09/15(土) 19:59:15.83 ID:pm09nqHo.net
Macだと\sは使えないのかな?
とりあえず>>879を参考にしつつ修正してみた。
General、Audio、の次になにか来ても対応できるようにしてみた。
これなら-Eいらんかったわ。macOSで動くのを確認済み

sed -n '/^Audio/,/^$/ s/^Format *: *// p'

889 :デフォルトの名無しさん:2018/09/15(土) 20:01:46.68 ID:pm09nqHo.net
-Eが良いよ(ドヤァ)

POSIX準拠というより可搬性重視なので、
-Eが使えるなら-Eつけてれば良いんじゃね?ぐらいに思ってるw

890 :デフォルトの名無しさん:2018/09/15(土) 20:06:03.93 ID:pm09nqHo.net
>>883
> grep '^Format' | cut -f '2-' -d ':' -s

grepしてcutするって流れは、俺もよくやるんだけど、
awk一つにまとめられる(と後からよく気づくw)

891 :デフォルトの名無しさん:2018/09/15(土) 20:13:17.74 ID:8KftQgLD.net
>>890
でもなんかその操作をawk一つにまとめるって
emacsのorgモードに近い印象を受けるというか
ちょっとUnix哲学っぽくねえなと思う。

もちろんUnix哲学に従う必要性は皆無なんだけど,あくまで個人的な意見として。

892 :デフォルトの名無しさん:2018/09/15(土) 20:16:21.20 ID:pm09nqHo.net
>>891
それ言ったらsedは今回、範囲選択+行選択+置換 の3つを同時にやってるんやで?w

893 :デフォルトの名無しさん:2018/09/15(土) 20:20:10.43 ID:8KftQgLD.net
>>892
俺の >>883 ←これはそんなことやってねえぞ(謎の自信)
検索→表示オンリー

スレチにもほどがあるのでそろそろやめるわ

894 :デフォルトの名無しさん:2018/09/15(土) 20:41:53.02 ID:pm09nqHo.net
sedもawkも複数行のスクリプトを実行できるわけで
一つのコマンドで複雑な異なる機能を提供してるから
Unix哲学から反してるのかもね

だから例のアレはUnix哲学がどうとか言ってる割に
結局awkでプログラム書くんかいって突っ込みたくなるんだな

895 :デフォルトの名無しさん:2018/09/15(土) 20:45:00.31 ID:8rxpHkWL.net
まだとどまる事のない誤解を披瀝し続けとってわろたw

896 :デフォルトの名無しさん:2018/09/15(土) 21:28:41.91 ID:imSsWev+.net
みなさんどうもありがとうございます!

>>881
おお!こんなオプションがあったんですか!って思って試してみたんですが、
上のスクショのLC-AAC-Sample.aac、HE-AAC-Sample.aacで試すと、どちらもAACと表示され、
このファイルはLC-AACかHE-AACなのか判別して次の処理に進む事が出来なかったので、このオプションではダメでした。

INFO=$(mediainfo "$FILE" | sedほげほげ"
case "$INFO" in
"AAC LC" )
ほげほげ1

"AAC LC SBR")
ほげほげ2

*)
ほげほげ3

って感じで次の処理に進むんですが、
>>879、880、888だとほげほげ1か2に進めて、>>883だとほげほげ3になってしまいました。

897 :デフォルトの名無しさん:2018/09/15(土) 21:30:45.05 ID:imSsWev+.net
>>883
端末はMacのiTerm、シェルはfish、プロンプトは適当にいじったやつです。

898 :デフォルトの名無しさん:2018/09/15(土) 21:43:49.56 ID:pm09nqHo.net
>>896
> このファイルはLC-AACかHE-AACなのか判別して次の処理に進む事が出来なかったので、このオプションではダメでした。

ちゃんと調べた? %Format%以外で出るのあるんじゃないの?

899 :デフォルトの名無しさん:2018/09/15(土) 21:59:26.07 ID:imSsWev+.net
>>898
Audio;%Format/Info%
だと上のスクショの
Advanced Audio Codec Low Complexityなになに
が取り出せるようでした。
これだとLC AACならAdvanced Audio Codec Low Complexity
HE-AACならAdvanced Audio Codec Low Complexity with Spectral Band Replication
が取り出せるので判別出来そうです。

900 :デフォルトの名無しさん:2018/09/15(土) 22:08:36.45 ID:8KftQgLD.net
>>896
>>883のコマンドラインを提案した者だが
mediainfo "$FILE" | sed -n -e '/^Audio/,$p' | grep '^Format' | cut -f '2-' -d ':' -s | sed -e 's/^[[:blank:]]//1'
↑これでいけるかな。
ただ長いので他の人のを使ったほうがいいかも

901 :デフォルトの名無しさん:2018/09/15(土) 22:18:17.17 ID:8KftQgLD.net
>>899
ところで
http://www.mpeg-audio.org/members/files/DASH_Files/Audio_Only_Stereo_Dash.zip
↑こっからDLできるサンプルファイルで試したところ

AAC-LC/Technology-en-69s-2-lc-64000bps_seg.mp4

HE-AAC/Technology-en-69s-2-heaac-64000bps_seg.mp4

mediainfoの出力結果で
Audio;FormatではどちらもAAC表示で区別できず
Audio;Format profileでやっと区別できるんだけど,俺の勘違いかな。

902 :デフォルトの名無しさん:2018/09/15(土) 22:25:58.84 ID:8KftQgLD.net
何度も投稿してすまん。
これでいいんじゃないかな。
確かめた環境はMediaInfo 0.7.91 on Debian 9.5。
case "$(mediainfo --Inform='Audio;%Format_Profile%' "$FILE")" in
HE*) echo 'HE';;
LC*) echo 'LC';;
esac

903 :デフォルトの名無しさん:2018/09/15(土) 22:45:32.78 ID:pm09nqHo.net
>>896のコード見て思うのは

Unix哲学(を完全に受け入れたわけじゃないが)
9. 全てのプログラムはフィルタとして振る舞うようにせよ。

すべてのプログラムはフィルタとして振る舞うようにしたとして
そのプログラムを使う側もフィルタとして利用するようにすべきだと思うわけよ

つまりね、こういうふうに書くべきじゃないのか?ってこと

mediainfo --Inform='Audio;%Format_Profile%\n' "$FILE" | while IFS= read -r line; do
 case $line in
  HE*) echo 'HE';;
  LC*) echo 'LC';;
 esac
done

本当は$FILEの所も"$@"にして複数ファイル対応できるようにしたい。
だけどメディアファイルっていうのはオーディオを複数入れることができるはずだから、
この場合どうなるのか?という疑問がある。その場合はうまくいかないかもしれない。
まあ適切なサンプルファイルを思いつかんし面倒だから試しては見てないが


904 :デフォルトの名無しさん:2018/09/15(土) 23:39:36.74 ID:imSsWev+.net
みなさんどうもありがとうございます
>>896の時点のコードは以下です
https://pastebin.com/qdNT6iBm
拡張子がaacのファイルがあるディレクトリでこのスクリプトを動かしたらaacファイル全て(ひとつづつ)処理させてます。

>>900-903
明日確認してみます

$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v18.08.1

以前のバージョンではFormat profile欄があったのでそこで判別してたんですが、いつのまにか(昨日気がつきました)最近のバージョンではFormat profile欄がなくなっているんです。>>878のスクショです

905 :デフォルトの名無しさん:2018/09/15(土) 23:59:46.80 ID:8KftQgLD.net
>>904
なるほどね。Debainのaptで入れたやつは古いのか。

$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v18.08.1
$ mediainfo --Output='Audio;%Format_AdditionalFeatures%' ./Audio_Only_Stereo_Dash/HE-AAC/Technology-en-69s-2-heaac-32000bps_seg.mp4
LC SBR
$ mediainfo --Output='Audio;%Format_AdditionalFeatures%' ./Audio_Only_Stereo_Dash/AAC-LC/Technology-en-69s-2-lc-64000bps_seg.mp4
LC
これは結構見分けやすいんじゃないか?

906 :デフォルトの名無しさん:2018/09/16(日) 00:12:32.41 ID:ynEgKPZ+.net
>>904
ちょっと訊きたいんだけど,MPEG4のLCとHEの違いってSBRが適用されてるかいなかの差?
もしそうならまさにそのオプションがあって
mediainfo --Output='Audio;%Format_Settings_SBR%'
↑これは,SBRが含まれていれば“Yes (Explicit)”,含まれていなけば空文字を返す。

907 :デフォルトの名無しさん:2018/09/16(日) 00:17:30.07 ID:6L484PJq.net
>>904
> >>896の時点のコードは以下です
> https://pastebin.com/qdNT6iBm

つまらん。特に指摘する点はない。
細かい趣味程度のことぐらいだな。

ファイルは引数で渡したほうがいいんじゃね?とか
俺ならset -eu -o pipefailをつけるとか
(一行で書く場合を除いて)コマンドの後ろの ;; は嫌いだとか

908 :デフォルトの名無しさん:2018/09/16(日) 01:08:58.79 ID:dyBKzwHe.net
大先生かよw

909 :デフォルトの名無しさん:2018/09/16(日) 01:22:39.05 ID:6L484PJq.net
ちーす

910 :デフォルトの名無しさん:2018/09/16(日) 13:43:22.79 ID:dTju3huw.net
ネタフリ、これ前に紹介したことあったっけ?

modernish: a shell moderniser library
https://github.com/modernish/modernishhttps://github.com/modernish/modernish#modernish-a-shell-moderniser-library

良さそうなことを書いてあるが、大きすぎて、それでいて何ができるのかよくわからない
ようするに誰か日本語で簡潔に解説してくれとw

911 :デフォルトの名無しさん:2018/09/16(日) 21:03:29.36 ID:ynEgKPZ+.net
変な人が二人いるせいで質問者が帰っちゃったじゃん。せっかく良い案を思いついたのに。

912 :デフォルトの名無しさん:2018/09/16(日) 23:14:50.58 ID:dTju3huw.net
いや、気にせず書けよw
また見るかもしれないじゃん

913 :デフォルトの名無しさん:2018/09/16(日) 23:27:44.88 ID:ynEgKPZ+.net
もう書いてるよw

914 :デフォルトの名無しさん:2018/09/17(月) 09:30:58.79 ID:yJ/mJYoq.net
二人いるんじゃなくて、同一人物なんじゃ?
例の人、プロバイダー2つ契約してて自演に使ってるんだし。

915 :デフォルトの名無しさん:2018/09/19(水) 03:32:21.41 ID:6Ke1Nn09.net
引用符を除去するいい方法ってないかな。
個人的には変数の仕様("abc"はabcとみなされる)とかを利用してエレガントに解決できるんじゃないかと思ってるんだけど うまくいかん。
いまのところsed -e 's/"\([^"]+\)"/\1'で問題はないけれど「\"」の形のエスケープに対応したりするのが面倒になってくるんだよね この形だと。

916 :デフォルトの名無しさん:2018/09/19(水) 04:43:37.82 ID:ScWhkKn/.net
a='"aa\"a"'
eval echo "$a" とか eval "b=$a"
じゃだめ?


おまけ、最近のbashには以下のような変数展開が
増えているけど今回は関係なさそう
${parameter@A}
${parameter@E}
${parameter@P}
${parameter@Q}

917 :デフォルトの名無しさん:2018/09/19(水) 07:25:21.58 ID:6Ke1Nn09.net
>>916
なるほどevalは思いつかんかったわ。
ただそれだと "aa\""→aa" になってしまうんだが これは正常な動作なんだろうか。

918 :デフォルトの名無しさん:2018/09/19(水) 07:59:33.05 ID:ScWhkKn/.net
>>917
さあね。「引用符を除去するいい方法」の正確な意味がよくわからないので
もしかして単に前後の引用符を除去するだけだった?
ならこれだけで行けるけど

a='"aa\"a"'
a=${a#\"}
a=${a%\"}

エレガントに解決っていうから、なんかもっと複雑な話かと思った

919 :デフォルトの名無しさん:2018/09/19(水) 08:36:50.27 ID:6Ke1Nn09.net
>>918
いや 別に文句を言ったつもりはない
先に挙げてもらった方法で解決してるし あれはすごくエレガントだと思う。


エレガントっていうのは数学畑の言葉のつもりで使った。
つまりまわりくどいやりかたではなく本質をつらぬいた方法。
今回は,
「シェルに対してトークンの区切りを示すための引用符をシェルに読み込ませることによって除去する」
という非常に直感的で素晴しい方法を学べた。
俺のやりかたはわざわざsedを使ってる点で,シェルが解釈するという本質から外れてしまっている。

920 :デフォルトの名無しさん:2018/09/19(水) 08:38:35.76 ID:6Ke1Nn09.net
ちなみにやりたかったことは単純に
VAR="value with space"
↑こういうことが書かれたファイルから
value with space
という語句を取り出すというもの。

$ cat /etc/os-release | grep '^PRETTY_NAME' | cut -f 2 -d '=' | eval echo "$(cat)"
↑こういう感じ。

921 :デフォルトの名無しさん:2018/09/19(水) 09:31:58.31 ID:qXmDWFW/.net
$ cat /etc/os-release | grep '^PRETTY_NAME' | cut -d'"' -f2

というのはどうだろう

922 :デフォルトの名無しさん:2018/09/19(水) 09:41:44.85 ID:ScWhkKn/.net
>>919
単に文字列の途中にどういう意味かわからなかっただけだよ。
>「\"」の形のエスケープに対応したりするのが面倒
とか書いてあったから、何がしたいんだろうと

前後の""を取るだけなら>>918のやり方が最短で最速

>>920
> VAR="value with space"
> ↑こういうことが書かれたファイルから
> value with space
> という語句を取り出すというもの。

それだとまた話が変わってくるな
(. /etc/os-release; echo $PRETTY_NAME)

()でくくってるのは、単に変数のスコープをサブシェルに閉じ込めてるだけ
カレントシェルにばらまいていいなら()はいらない

シェル互換の文法としてみなせるファイルならこれでいけるよ
コードが入っていたら実行されるから、安全なファイルと断定できるものにしか使えないけど

923 :デフォルトの名無しさん:2018/09/19(水) 22:30:20.23 ID:/Yn8C735.net
"a" → a

こういう変換は、CSV でも苦労してる。
" が偶数個なら良いけど、奇数個なら形式エラーにするとか

CSV は、様々なバグが考えられるから、TSV が良い

"a""b" → a""b

ただし、" " 内で、" を使う場合、"" と連続させる。
この場合も、奇数個なら形式エラーにするとか、ややこしい

924 :デフォルトの名無しさん:2018/09/19(水) 22:42:07.01 ID:ScWhkKn/.net
>>923
別々の言語で3回ぐらいCSVのパーサーを書いたことありますよ
ダブルクォートがない場合、あって改行が入ってる場合など
Excelの仕様に完全対応したCSVライブラリがその言語になかったので

Perlの変態正規表現レベルにまでなれば可能かもしれないですが、
そういうネスト構造のあるものは単純な正規表現では解決不可能な問題です。

925 :デフォルトの名無しさん:2018/09/19(水) 22:46:07.55 ID:xLP4ypV2.net
タブ区切りでも
当然ダブルクォートがいる

頭悪いこといってるわ。。。

926 :デフォルトの名無しさん:2018/09/20(木) 09:41:46.66 ID:cMPVhU9i.net
ダブルクォートを特別扱いするかどうは仕様によるのでは?

927 :デフォルトの名無しさん:2018/09/20(木) 10:46:25.87 ID:jnBpqPJK.net
CSVの仕様といったらRFC4180やろ

928 :デフォルトの名無しさん:2018/09/20(木) 12:24:25.01 ID:rEtRtbV+.net
>>927
それって区切り文字がタブの場合も書かれてるの?

929 :デフォルトの名無しさん:2018/09/20(木) 12:57:43.85 ID:ILleL3Gt.net
それくらい読めよw

RFCにはないけど、MIMEタイプ定義してる
https://www.iana.org/assignments/media-types/text/tab-separated-values
によると、
Note that fields that contain tabs are not allowable in this encoding.
となっているし、たぶんEOLも含んじゃだめそうなので、ダブルクオートいらねえよ。

930 :デフォルトの名無しさん:2018/09/20(木) 20:07:29.45 ID:v1EqyHAs.net
まあいくらRFCで規定してもディファクトスタンダードのExcel読めるフォーマットでないと意味ないしな w

931 :デフォルトの名無しさん:2018/09/20(木) 20:41:14.92 ID:jnBpqPJK.net
>>930
RFC4180とExcelのCSVはほとんど同じ

違いはデータの中に改行が含まれてる場合
Excelデータの中の改行はLF。(一行の最後はCRLF)
RFC4180はデータの中の改行はCRLF(一行の最後は同じくCRLF)

これだけしか違いはないよ

932 :デフォルトの名無しさん:2018/09/20(木) 20:45:03.75 ID:jnBpqPJK.net
CSVもTSVデータとしてキーボードから入力可能な文字を
区切り記号としているわけで、なんで
RS (0x1e Record Separator) とか
US (0x1f Unit Separator) とかいう
便利な文字を使わなかったのか?って思うな

933 :デフォルトの名無しさん:2018/09/20(木) 21:32:37.16 ID:zLqp8E23.net
頭悪いこといってるわ
そんなコードなキーボードからどうやって入力すんの

viならできるが
こんなアホが、vi使えるとは考えらればいしな

934 :デフォルトの名無しさん:2018/09/20(木) 21:37:28.28 ID:IHzBiPD0.net
いつまでトリップはずしてんねんお前

935 :デフォルトの名無しさん:2018/09/20(木) 21:38:06.55 ID:MjJalB6Y.net
>>931
ほとんど同じとか言うプログラマーは信用できない

936 :デフォルトの名無しさん:2018/09/20(木) 21:38:41.53 ID:t6JihYkI.net
そもそもCSVは数値の表のためのデータ形式だからね

937 :デフォルトの名無しさん:2018/09/20(木) 21:39:06.57 ID:Rg0LfXUv.net
ほとんど病気

938 :デフォルトの名無しさん:2018/09/20(木) 21:42:44.26 ID:zLqp8E23.net
カンマのキーとタブのキーと改行のキーは
どのキーボードについてる

低学歴知恵遅れにはコレが分からない

939 :デフォルトの名無しさん:2018/09/20(木) 21:51:32.09 ID:jnBpqPJK.net
>>933
CSVエディタを使えばいいだけでは?

940 :デフォルトの名無しさん:2018/09/20(木) 21:51:35.97 ID:5pjY9bpj.net
CSVネタで久しぶりにアノヒトが嬉々として現れたなってことかな?w

941 :デフォルトの名無しさん:2018/09/20(木) 21:53:59.48 ID:jnBpqPJK.net
つーかCSVファイルをテキストエディタなんかで閲覧、編集する人なんていないでしょう?
可能か不可能かで言えば、可能だけどバイナリエディタでテキスト編集するような感じで
効率が悪いから、みんなエクセルつかってCSVファイルの読み書きするんだけど

942 :デフォルトの名無しさん:2018/09/20(木) 22:13:21.07 ID:8Bepevhe.net
国によっては、カンマとピリオドの意味が逆転してるのあるけど
そんな国でも割り切って、セパレータはカンマにしてるんだろか

小数点がカンマ、どーしてそうなったか興味あるが

943 :デフォルトの名無しさん:2018/09/20(木) 22:16:57.13 ID:zLqp8E23.net
引用符でくくられてたらどんな記号でも問題起きないからな
textを普通のエディタで開いてなんのコードが混入してるか分からないほうが
普通の感覚でイヤだから

低学歴知恵遅れなら細かいことは気にしないかもしれない

944 :デフォルトの名無しさん:2018/09/20(木) 22:18:05.52 ID:MjJalB6Y.net
>>941
編集はExcelだけど差分が容易に取れるからバージョン管理の為にcsvしてる

945 :デフォルトの名無しさん:2018/09/20(木) 22:24:15.47 ID:zLqp8E23.net
たとえばhttpもsmtpもコンテンツ以外は
crlfを除いて普通にぜんぶ0x20以上0x7e以下のテキストでやりとりしてるからな
低学歴知恵遅れなら、自分はそんなの意識しないUA使ってるからなんでもいいというワケ

946 :デフォルトの名無しさん:2018/09/20(木) 22:28:11.99 ID:zLqp8E23.net
低学歴知恵遅れは
まずcsvがデータ交換用のフォーマットであることが分かってない

947 :デフォルトの名無しさん:2018/09/20(木) 22:33:55.28 ID:8pZm26YJ.net
>>925
半角また間違えたんか。何度目だよ

948 :デフォルトの名無しさん:2018/09/20(木) 22:39:27.57 ID:zLqp8E23.net
デファクトスタンダードのエクセルで
タブ区切りで保存すると
ふつうにこうやって保存されるからな

aho<HT>"boo""foo"<HT>baka
aho<HT>"boo""foo"<HT>baka

949 :デフォルトの名無しさん:2018/09/20(木) 23:21:58.71 ID:fVTsYrUH.net
>>948
そうだね そうだね

950 :デフォルトの名無しさん:2018/09/21(金) 00:46:25.95 ID:m8DL5ZJ4.net
>>931
TSV にして、データ中に、タブ・改行を使わないのが良さそう

>Excelデータの中の改行はLF。(一行の最後はCRLF)
Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ

951 :デフォルトの名無しさん:2018/09/21(金) 01:24:23.69 ID:i9i22CNp.net
Excelで直接開くと勝手にフォーマット変換されるのが気に入らないからテキストエディタで開いてからExcelにコピーとかやってるわ

952 :デフォルトの名無しさん:2018/09/21(金) 02:43:02.52 ID:v8LFlyn0.net
>>950
タブはともかく改行は無理
Excel使ってると改行は絶対入れる

953 :デフォルトの名無しさん:2018/09/21(金) 02:43:36.28 ID:v8LFlyn0.net
>>950
> Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ
バイナリ扱いすればいいだけ

954 :デフォルトの名無しさん:2018/09/21(金) 04:04:34.44 ID:m7KC0L1Z.net
>>951
拡張子を txt にしてから開いてウィザード動かすか、または 0 で始まる数字だけの文字列は ="0123" のようにして最初から作っておくとうまく行く。

955 :デフォルトの名無しさん:2018/09/21(金) 04:48:00.63 ID:dtC8HZuo.net
ちょっと荒れたのであまり話題にはしたくないものの
Unicodeの区切り文字を使うのはいい手段だと思う。
ただし思い切り独自規格なので既存の製品には対応できないけどね。もちろん

956 :デフォルトの名無しさん:2018/09/21(金) 05:30:02.46 ID:v8LFlyn0.net
RS、USってのはUnicodeじゃなくてASCIIの制御文字だよ

957 :デフォルトの名無しさん:2018/09/21(金) 05:37:53.78 ID:v8LFlyn0.net
もちろんUnicodeでも使えるけどね

958 :デフォルトの名無しさん:2018/09/21(金) 06:06:23.57 ID:v8LFlyn0.net
一般人はCSVファイルをExcelで編集する
となると別にテキスト形式ベースじゃなくても良いわけだ
だとすると誰がCSVファイルを望んでいるのだろうか?
おそらくプログラマなんだろうね。

考えてみればテーブル型データに限っていれば
CSVはJSONよりも効率よくデータを記述できる
JSONだったらこんな感じだしね

[
{"field1": 1, "field2": 2, "field3": 3},
{"field1": 1, "field2": 2, "field3": 3},
]

これがCSVだとここまでコンパクトに纏められる

field1,field2,field3
1,2,3
1,2,3

一般人のことを考えないくていいという前提のものと、もっと良い形式が考えてみよう
それもシェルスクリプトで扱うのが容易な形式

一行ずつ読み取るのだから、一データの終わりはLFであるべきだろう
そしてデータの中には改行は含まず、カンマや制御コードはprintfコマンドで
簡単に解釈ができるよう8進数にエスケープを行う。どうかね?
エスケープの処理を除けば既存のツールでも扱えるだろう

ただ問題があるとすれば、printfで変数に代入する時forkを行う必要があるということだな
これだと時間がかかってしまう。かといって1文字ずつパースするのも時間がかかる

一行ずつ処理するのが可能で、1カラムずつ処理するのも可能で処理に時間がかからない方法はないだろうか

959 :950:2018/09/21(金) 07:09:48.97 ID:m8DL5ZJ4.net
>>931
>Excelデータの中の改行はLF。(一行の最後はCRLF)

もし、このCSV を、Linux で扱う場合には、やばくない?
行区切りをCRLF に設定すれば、データ中に、LF があっても問題ないのかな?

960 :デフォルトの名無しさん:2018/09/21(金) 08:12:42.97 ID:LR4lwFnG.net
>>959
別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ
標準のアプリと動作が違うけどそういう特殊フォーマットだと思えばいいだけ

961 :デフォルトの名無しさん:2018/09/21(金) 09:34:09.19 ID:7bTZc31z.net
>>958
fork?どういう処理を想定してるのか?

962 :デフォルトの名無しさん:2018/09/21(金) 09:47:27.07 ID:NXw3/PDJ.net
みんなで輪になって踊る処理やろ

963 :デフォルトの名無しさん:2018/09/21(金) 09:56:30.62 ID:7bTZc31z.net
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'


964 :デフォルトの名無しさん:2018/09/21(金) 10:10:07.17 ID:v8LFlyn0.net
>>961
a=$(printf 'test')

ビルトインコマンドであってもforkが行われる

965 :デフォルトの名無しさん:2018/09/21(金) 10:49:46.73 ID:v8LFlyn0.net
なんか次から次へと変なテクニックが編み出されていくw

966 :デフォルトの名無しさん:2018/09/21(金) 12:41:08.14 ID:FeY49FdE.net
構内放送「直ちに中庭に集合してください」
従業員 (また誰かforkコマンド実行したな…)

967 :デフォルトの名無しさん:2018/09/21(金) 12:48:09.10 ID:v8LFlyn0.net
>>960
> 別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ

よく考えたら、シェルスクリプトでもそれなりに使いやすいかもしれない。
readで1行(LFがくるまで)読んで、読み込んだ最後がCRだったら行区切りあつかい
そうでなければ同一行としてあつかえば良いわけだし

968 :デフォルトの名無しさん:2018/09/21(金) 12:50:18.79 ID:isbUNhMl.net
8進数エスケープってbashの機能で文字に直せなかったっけ?

969 :デフォルトの名無しさん:2018/09/21(金) 12:53:33.36 ID:v8LFlyn0.net
printf以外でってこと?

970 :デフォルトの名無しさん:2018/09/21(金) 12:56:03.96 ID:dtC8HZuo.net
たとえばエスケープをするのは
US,RS,エスケープ文字自体
↑これでどうだろうか各種エスケープは
\#,\%,\\
これ。

ちなみにあたり前だが 端末の画面に「分かりやすく」表示するときは
\#→水平タブ,\%→改行(LF)
に置換するのがいいだろう。

971 :デフォルトの名無しさん:2018/09/21(金) 12:57:07.23 ID:dtC8HZuo.net
>>968
echo $'\030'
↑こういう感じやね。

972 :デフォルトの名無しさん:2018/09/21(金) 13:28:31.46 ID:v8LFlyn0.net
>>971
あー、dashで使えないから頭から抜け落ちてたわw

973 :デフォルトの名無しさん:2018/09/21(金) 18:20:35.40 ID:dtC8HZuo.net
>>970
これはだめだ。
\<US> \<RS> \\
↑これで十分だった。

974 :デフォルトの名無しさん:2018/09/21(金) 20:25:16.42 ID:FeY49FdE.net
思いつきだけど、エスケープ文字自体を表すときは別の文字をエスケープして表現するほうが何かと都合がよくないか?

975 :デフォルトの名無しさん:2018/09/21(金) 21:30:40.16 ID:dtC8HZuo.net
>>974
くわしく。
具体例でたのむわ(アホで申し訳ない)

976 :デフォルトの名無しさん:2018/09/21(金) 23:27:59.03 ID:/eJt2TVD.net
例えば\rsを検索したいときに、\が\\でなければ\rsを検索するだけでよいけど、\が\\のときは見つけたあとに\の数をたどってそれが本当に\rsなのか調べないといけない、とか、
とある場所までシークしたときに、その場所の文字が何なのか、\を繰り返し数えないといけない、とか、
\?はすぐエラーとわかるとか。

977 :デフォルトの名無しさん:2018/09/22(土) 00:50:25.74 ID:9bcvhAfJ.net
>>974
その別のエスケープ文字をエスケープするには
どうすればいいの?

978 :デフォルトの名無しさん:2018/09/22(土) 01:10:24.01 ID:Whfp6XnZ.net
>>977
エスケープ文字はあくまで\だけ。
例えば%を使うとして、
rsを表すなら\rs、
usを表すなら\us、
\を表すなら\%、
%を表すなら%、
と記す。とかね

979 :デフォルトの名無しさん:2018/09/22(土) 03:37:20.07 ID:LHC7cNdc.net
>>978
よくわからん。そのルールだと

\rsを表すときは、\%rs
\usを表す時は、\%us
\%を表す時は、\%%
%を表す時は、%
ってことか?

%を検索した時、それが本当の%であるかは
一文字前が\であるかどうかを調べないといけなくて、
\rsを検索したい時は、\%rsで検索しないといけないってことか?

980 :デフォルトの名無しさん:2018/09/22(土) 04:10:01.34 ID:wyOkhzEz.net
>>979
あってるよ。

\が\\の場合は、
\を検索するときは\\を見つけるだけじゃ不十分だけど、
\が\%の場合は、
%を検索するときは一文字前が\でない%を見つけるだけで十分だし、
\を検索するときも\%を見つけるだけで十分なんだ。

同様に、
\が\\の場合は、
\rsを検索するときは\\rsを見つけるだけじゃ不十分だけど、
\が\%の場合は、
\rsを検索するときは\%rsを見つけるだけで十分になる。

981 :デフォルトの名無しさん:2018/09/22(土) 06:13:58.91 ID:dKJ+Zat7.net
どうせRS,USとかの非文字を使うんなら
エスケープ文字もESCでいいんじゃないだろうか。

982 :デフォルトの名無しさん:2018/09/22(土) 06:46:52.90 ID:LHC7cNdc.net
bashでさ、typesetで関数の中身を出力できるじゃん?
それをevalで評価したら同じ関数が出来上がるじゃん?
これってどれくらい信用できるんだろう?

作成した関数のコードそのままの形で出力されるなら
evalで評価して同じものができるだろうけど、
ぱっとみtypesetで出力するされたものをみると、
改行の位置とか変わって整形された状態になって
関数にはfunctionが頭に追加されてる。

元のコードをどれくらい書き換えるんだろうか?
これ以外になにか変わる事知ってたりする人いない?

983 :デフォルトの名無しさん:2018/09/22(土) 11:47:57.86 ID:rfhCLeCr.net
次スレたてるわ

984 :デフォルトの名無しさん:2018/09/22(土) 11:56:38.68 ID:rfhCLeCr.net
次スレ
ワッチョイつけたぞ

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

985 :デフォルトの名無しさん:2018/09/22(土) 12:03:50.02 ID:rfhCLeCr.net
今まで人気ないスレだったから全く不要だったわけだが、今後は次スレ立てる安価指定しといたほうがいいか
次回の勢い次第でテンプレ編集で

986 :デフォルトの名無しさん:2018/09/22(土) 21:25:51.74 ID:SEEeyc/q.net
埋めろって言っても反発されて埋まらん気もするし自分でやるわ

987 :デフォルトの名無しさん:2018/09/22(土) 21:26:12.71 ID:SEEeyc/q.net
埋め

988 :デフォルトの名無しさん:2018/09/22(土) 21:26:36.85 ID:SEEeyc/q.net
埋め

989 :デフォルトの名無しさん:2018/09/22(土) 21:26:59.15 ID:SEEeyc/q.net
埋め

990 :デフォルトの名無しさん:2018/09/22(土) 21:27:22.40 ID:SEEeyc/q.net
埋め

991 :デフォルトの名無しさん:2018/09/22(土) 21:27:46.75 ID:SEEeyc/q.net
埋め

992 :デフォルトの名無しさん:2018/09/22(土) 21:27:56.78 ID:wyOkhzEz.net
埋めない!

993 :デフォルトの名無しさん:2018/09/22(土) 21:27:56.90 ID:PGp2AKzL.net
荒らすなよハゲ

994 :デフォルトの名無しさん:2018/09/22(土) 21:28:09.05 ID:SEEeyc/q.net
埋め

995 :デフォルトの名無しさん:2018/09/22(土) 21:28:36.50 ID:PGp2AKzL.net
ID:SEEeyc/q ← アラシ

996 :デフォルトの名無しさん:2018/09/22(土) 21:28:55.88 ID:SEEeyc/q.net
埋めも理解できない阿呆がいるのか…

997 :デフォルトの名無しさん:2018/09/22(土) 21:30:18.74 ID:SEEeyc/q.net
このスレも埋まらんうちにすでにCSV荒らしと半角荒らしが次スレ移動してるからな
前スレ使え言っても子供が言うこと聞くわけないから自分でやることにしただけよ

998 :デフォルトの名無しさん:2018/09/22(土) 21:31:28.53 ID:wyOkhzEz.net
梅屋敷!

999 :デフォルトの名無しさん:2018/09/22(土) 21:31:44.51 ID:SEEeyc/q.net
埋め

1000 :デフォルトの名無しさん:2018/09/22(土) 21:32:32.82 ID:SEEeyc/q.net
終わり。質問はなし

1001 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1001
308 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★