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

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2018/07/24(火) 11:01:16.36ID:r0TJj2hB
シェルスクリプトに関する総合スレッドです。

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

前スレ: シェルスクリプト総合 その27(https://mevius.5ch.net/test/read.cgi/unix/1525337663/
2018/07/24(火) 11:01:46.51ID:r0TJj2hB
お約束
・特記なき場合、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オプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
2018/07/24(火) 11:02:04.48ID:r0TJj2hB
初心者へのアドバイス
・適した道具を判断するのも頭の重要な使い方。
 シェルスクリプトよりもPerlまたはPythonの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらman(1)を引きましょう。
・思い通りに動かないときは、まずはsh(1)の-xオプションでトレースしましょう。

回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに、「そういうのはPerl, Python使え」と回答するのはやめましょう。
 安易にPerlやPythonに逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
2018/07/24(火) 11:05:09.89ID:r0TJj2hB
補足(今スレ限り)
いままではUNIX板でスレ立てをしていましたが、IDやワッチョイが無いことを理由とした自演・荒しが目立ってきておりスレがまともに機能しなくなりかけているので、今回よりプログラム板に移動することになりました。
2018/07/24(火) 14:22:58.96ID:r0TJj2hB
とりあえず保守っぽい書き込み
2018/07/24(火) 15:29:38.59ID:4yafhCFC
おつ
2018/07/24(火) 15:31:12.93ID:ux1Ayazo
り返せ
2018/07/24(火) 16:40:14.98ID:PsBikv9p
ません
2018/07/24(火) 16:45:11.85ID:dOWUO1eS
m9
2018/07/24(火) 20:36:43.40ID:0V9luMBh
>>1
スレ立て乙!111
2018/07/24(火) 21:04:07.46ID:ux1Ayazo
112
2018/07/24(火) 22:37:58.80ID:ukUjoRN2
>1 乙
支援
2018/07/25(水) 01:58:18.49ID:41CwtA3+
乙なんよ
2018/07/25(水) 02:54:55.73ID:7zvfAEGp
テンプレの↓
> 自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
ちょっと痛いかな
2018/07/25(水) 03:03:02.74ID:JJXqrWB8
bashのあれやこれは、shでどうかけばいいかってのがあるといいな
特に配列。配列は引数として処理するんだよっていうのが体系的にまとまるといいな
2018/07/25(水) 08:44:11.14ID:go981At1
本来の引数配列以外で配列が必要になったら、基本的にはawkその他の言語使うなあ。
まあ自分用だと気の迷いで引数配列転用したり、evalで頑張ったりすることもあるけど、
仕事で他の人に引き継ぐこと考えると保守性で問題になるので
仕事ではやらないようにしてる。
2018/07/25(水) 15:17:48.54ID:JJXqrWB8
>>16
配列が必要になるっていうのは、シェルスクリプトの
プログラミングの仕方が間違えてるってことだよ

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

シェルスクリプトは引数または標準入力で渡されたものを
順次処理していくという書き方をするもんなんだろう。
一時的に変数にためておくなんてことはしないので
配列は使わないですむ
2018/07/25(水) 15:24:58.23ID:eezz2RvW
evalだけは怖いから使わない
それでしか解決できない問題をまだ扱った事がないからだが
2018/07/25(水) 15:32:42.01ID:JJXqrWB8
evalは信頼できない文字をevalするのが問題なのであって
コードの中で作り出した文字をevalするなら問題もないんだよ
信頼できない文字であっても、使える文字種を限定すればいいし
2016
垢版 |
2018/07/25(水) 17:16:52.45ID:BMgdIVPp
>>17
だいたい同感。
配列や連想配列がぴったりした応用もあるんだけど、
シェルで書くようなプログラムじゃないね。
2018/07/25(水) 17:47:06.73ID:7zvfAEGp
あるリモートファイルの最新のバージョンをダウンロードする方法ってありますか。
具体的にはhttp://ftp.jaist.ac.jp/pub/GNU/gnuzilla/←ここの最新バージョンのディレクトリを知りたいです。
2018/07/25(水) 17:59:04.34ID:DddK84yb
ある
2018/07/25(水) 21:12:21.99ID:l3Vcc9bz
>>17
バッチファイル程度のシェルスクリプトしか
知らないからそう思うんでしょ
知れば奥が深いよ
配列も結構多くのシェルがサポートしてる(例えばcsh)
2018/07/25(水) 21:32:58.42ID:tKZkTFhc
極端な例を挙げるなら、行列演算をシェルスクリプトで書く馬鹿はいないみたいな話よ。
配列に限った話ではなく、ほとんど全ての高級言語にあるのにシェルにはない言語機能がいろいろある。
例えば構造体に類する機能とか、参照とか。
言語には向き不向きがあって、シェルでは向いてない用途に無理矢理使うのは井の中の蛙。
2018/07/25(水) 22:46:32.67ID:c/fHfsdl
>>21
wget -qO - 'http://ftp.jaist.ac.jp/pub/GNU/gnuzilla/?C=M;O=D' | grep -m1 -Po '\[DIR\].+?href="\K[0-9.]+'
2621
垢版 |
2018/07/26(木) 05:58:11.67ID:BvZq73xc
>>25
ありがとうございます。
上手くいきました。
2018/07/27(金) 11:44:05.25ID:+pgu0NCD
この本って信用していいの?
https://image.yodobashi.com/product/100/000/009/002/686/263/100000009002686263_10204.jpg
2018/07/27(金) 15:01:43.20ID:GvW3yrkV
できるだけ可搬なUNIX時間<->ISO 8601形式時間の変換器ってどんなのがありますかね
PerlやRubyでいけるのは知っていますが,もうちょっとPOSIXに従ってるやり方が知りたいです
2018/07/27(金) 15:34:58.00ID:2MP7doyF
>>28
GNU date 限定の技だと思うのであまり嬉しくないかもしれないけど、以下のコマンドでいけるそうだ。

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

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

dateコマンドを使ってUnixTimeをISO8601形式へ変換する - Qiita
https://qiita.com/EDAPIYO/items/1bf163604006fd667988
2018/07/27(金) 15:42:57.75ID:2MP7doyF
>>28
小出しでスマン。こういうオプションもあるみたいなんだけど、man に記載されてないね……

$ date --date "@1501201492" --iso-8601=seconds
2017-07-28T09:24:52+0900
2018/07/27(金) 16:35:57.77ID:GvW3yrkV
>>29
ありがとうございます。
そうっすね……。dateコマンドでできるのは知っていますが,
これ,ものっすごく可搬性悪いんですよ。下手するとPerlでやったほうがマシなくらい。
なぜかというと,各種OSによってdateコマンドのUNIX時間<->ISO 8601形式時間変換のオプションが違うんです。
*BSDはdate -jだしGNU/Linuxでは書いてもらったdate --dateとかdate -dとか。
ある種のOSではdate -rもあるっぽいです……。
2018/07/27(金) 20:53:36.25ID:5PTGcdNX
>>31
BSD一般は date -r 数字 では?
最近の NetBSD だと date -d @数字 とも書けるから GNU と共通にできる。
33デフォルトの名無しさん
垢版 |
2018/07/31(火) 09:25:51.28ID:nOeIYYJj
>>28
アルゴリズムとしては
秒数→日時変換と日時の足し算だけなんだから
自力で作れない?
2018/07/31(火) 09:56:38.03ID:2+1mdxB2
自力で作るならコマンド見分けたほうが楽だなw
どちらも同じオプションだけど意味が違うものを使って見分ける
2018/07/31(火) 11:29:27.77ID:3VAn/oI8
>>31
自分で言ってる様に Perl で書いちゃえば良いような…
2018/07/31(火) 19:49:30.25ID:M5dn2TAr
自分で足し算すると、サマータイム・うるう秒は、大丈夫なのか?
2018/07/31(火) 20:11:42.59ID:qTamNnJo
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"
2018/07/31(火) 20:15:49.79ID:6LkeIiyI
何か間違ってるんだろ
2018/07/31(火) 20:18:57.37ID:qTamNnJo
どこを変更したら動くの?
2018/07/31(火) 21:14:19.18ID:1f/UcTRP
想定通りの動きをしてない行
2018/07/31(火) 21:14:23.24ID:MEUSBOQW
eval ${cmd}
2018/07/31(火) 21:16:43.59ID:MEUSBOQW
bb.sh で
echo "$*"
してみりゃ、理解できるだろう
2018/07/31(火) 21:24:56.48ID:qTamNnJo
>>41
サンクス!できたw
2018/07/31(火) 21:27:46.12ID:MZe54JNj
>>43
cmdに代入しなきゃダメなの?
2018/07/31(火) 22:50:34.87ID:nOeIYYJj
>>36
確かそういうのを考慮してないんじゃないの?
2018/07/31(火) 22:58:00.65ID:RprViRTw
>>45
うるう秒はUNIX Epochからの秒数には入ってないので無視して良い。
サマータイムやタイムゾーンの考慮は必要だしとても大変。
日本のタイムゾーン固定ならサマータイムも今のところ無視できるし簡単だけど、perlでも使ってライブラリに任せた方がいいと思う。
2018/07/31(火) 23:52:51.22ID:nOeIYYJj
どうでもいいが俺のID末尾がjってなんだこれ
2018/08/01(水) 08:18:10.49ID:4ZTIK2TR
>>47
この板のIDは8桁だから9桁目(いわゆる末尾)はないよ
49デフォルトの名無しさん
垢版 |
2018/08/01(水) 11:52:30.09ID:cj6lI2dq
昨日発見した事なんだけど、シェルというよりは test コマンドの問題だけど、test -f で対象のファイルを指定しない時って0になるのな。
これはbash用に書かれたこんな記述の時の動作によって気づいた。

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

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

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

まあbashなら[[ ]] 使っとけばエラーになるからそっち使っておけば良いんだけどね。
2018/08/01(水) 12:14:18.97ID:sWzzPqiz
testの仕様。
"" で囲まなかったのが悪い。
2018/08/01(水) 12:31:44.03ID:GtWBM62w
find [xxx] -type f | xargs grep [yyy]
をよく使うので
search xxx yyy みたいな alias にしたいんですけど
引数を途中に挟むのってどうすればいいんでしょうか
52デフォルトの名無しさん
垢版 |
2018/08/01(水) 12:34:38.30ID:cj6lI2dq
>>50
そ、そうか。

しかしなんでまたそんな仕様になったんだ?
53デフォルトの名無しさん
垢版 |
2018/08/01(水) 12:43:22.75ID:cj6lI2dq
>>51
bash の場合は function で定義するしかないようだよ。ググって探してみな。
2018/08/01(水) 14:48:58.76ID:GtWBM62w
>>53
functionでできました
ありがとうございました
2018/08/01(水) 14:58:33.41ID:RF/jFH0Y
>>52
ググって探してみなw
まあ、何らかの歴史的な背景だろうけど、明確に仕様に書いてあるのだから
2018/08/01(水) 15:09:30.95ID:Al4aQLEL
>>51は grep -r [yyy] [xxx] もしくは rgrep [yyy] [xxx] でいいんじゃねーの?
俺はagの方をよく使うが
2018/08/01(水) 15:16:54.25ID:Al4aQLEL
>>49
そもそも if [ ! -f $file ]; then だと $fileにスペース等が入っている時に
対応できないので "$file" と書くのは必須
更に言うなら set -u すればいい。$file が空のときはエラーになる
2018/08/01(水) 15:25:42.75ID:RF/jFH0Y
0 arguments:
Exit false (1).
1 argument:
Exit true (0) if $1 is not null; otherwise, exit false.
って、だけなんだけどな。2 arguments から本格的に判定に入るってとこかな。演算子が有効なものなのかも含めて
2018/08/01(水) 15:35:17.39ID:RF/jFH0Y
ああ、1 argumentの場合は空文字列でないかどうかっていうテストになるのか。そう思えば不思議でも何でもないな。使わないけどw
歴史的にそんなのがあっても不思議ではないな、実際どうなのか知らんけど
60デフォルトの名無しさん
垢版 |
2018/08/01(水) 23:58:14.58ID:GZaAdjmn
# 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
2018/08/02(木) 00:06:27.75ID:LJtboBWc
>>60
変数の値として ; が入ってても、文の区切り扱いにはならないので嘘くさい。
evalしてれば話は別だが。
6260
垢版 |
2018/08/02(木) 00:07:43.15ID:yvP4ulwr
だから、ディレクトリパス・ユーザー名とか、
システムで使うものに、半角空白を入れたら、ダメ

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

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

Windows には、半角空白が入ったフォルダ名があるから、危険
6360
垢版 |
2018/08/02(木) 00:12:09.87ID:yvP4ulwr
>60 は、
日経Linux で連載している、Piro の有名なマンガ、
「Linux シス管系女子3」に書いてある

このマンガを知らなかったら、もぐりw
2018/08/02(木) 00:35:21.87ID:4n+0BAwB
>>62
> Mac ユーザーにも、よく言われる
ほんとかよ。macOSの標準ディレクトリに普通にスペース入っているのあるけど
うそくさい、えせくさいw
2018/08/02(木) 00:47:05.64ID:aFy8Ou9l
実際に試してみればええんじゃないの

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

その下の rm はイミフだな。>>61のほぼ言う通り。もちょっと「なんか」あるんじゃないの
そんなマンガ知らなかったらモグリよばわりされるならモグリで十分すぎるw
6760
垢版 |
2018/08/02(木) 01:12:36.09ID:yvP4ulwr
日経Linux は、Ruby の作者・Matz と、マンガの「シス管系女子」の連載が有名

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

システム管理者の必須本
2018/08/02(木) 01:20:26.73ID:AdBDijUE
坂本文さんの 「たのしいUNIX」なら知ってる
2018/08/02(木) 01:47:58.08ID:dc2nLErP
>>67
それ以上システム管理者とやらを貶めるなよw
2018/08/02(木) 03:58:43.02ID:tOum0Ceh
>>60
> 変数中に空白があっても良いように、たいてい変数は" " で囲む。
> 一方、固定値は囲まない

固定値だから囲まないんじゃなくて、
固定値かつ、空白が含まれてないから囲ってないだけ
固定値でも、空白が含まれていれば囲む
2018/08/02(木) 04:04:23.88ID:tOum0Ceh
>>62
> Windows には、半角空白が入ったフォルダ名があるから、危険

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

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

そんなことよりもshellcheckでチェックするほうが常識
これを知らないやつはモーグリ
2018/08/02(木) 04:16:33.42ID:tOum0Ceh
>>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でも様々な引掛けがあるという話。
2018/08/02(木) 05:32:18.98ID:5bB71pa/
Ruby使うくらいならPython使うわ。
でもここはシェルスクリプトのスレなんですよ。
しかも「ダブルクォートで囲む」という至極単純な対策でバグを回避できるんだから
他の言語を使う必要もないな。
ところでファイル名にダブルクォートが入っている場合があるので
ダブルクォートで囲む前にsed -e 's/"/\\&/g' とやる必要がある。
2018/08/02(木) 06:11:19.56ID:tOum0Ceh
>>73
> ところでファイル名にダブルクォートが入っている場合があるので

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

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

$ echo test > a\'\"b
$ ./test.sh
a'"b: ASCII text
2018/08/02(木) 11:35:22.97ID:N9CdGDK2
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
2018/08/02(木) 11:45:13.93ID:N9CdGDK2
ちょっと訂正します。
間違えたコードはi==0ではなく、条件式にi=0としていました。
だから毎回判定するごとにiに0が代入されてループに入れなかったんですが、
お聞きしたかったのは0が偽だからループに入れなかったのか?ということでした。
条件式に代入式を持ってくる時点で素人丸出しなんですが、どうかご容赦ください。
2018/08/02(木) 12:23:00.77ID:N9CdGDK2
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の原則が適用されるようですね。自己解決したっぽいです。
どうもお騒がせしました。
2018/08/03(金) 14:17:14.85ID:htH9kPBS
>>72
エディタに、TeraPad を使っているけど、半角・全角文字へ変換ってある

こりゃ便利
2018/08/03(金) 14:39:56.40ID:nG7YYTv9
そんなんsakuraだってあるぞ
2018/08/03(金) 14:58:08.23ID:htH9kPBS
>ファイル名に、ダブルクォートが入っている

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

テレビ番組の録画で「何々!」「何々!!」みたいな番組名が、ファイル名になる場合
2018/08/03(金) 15:01:48.95ID:TC+4ZTQW
>>80
感嘆符が特殊文字になるのってインタラクティブなときだけじゃね?
2018/08/03(金) 17:12:49.75ID:5qGFGeHO
>>80
こういうのって何言いたいのかわからんな。「問題」でも出してるのか??
2018/08/03(金) 17:30:20.61ID:TDL18VXl
>>80
それこそ、自分で何とかしろって感じだな
2018/08/03(金) 18:47:15.20ID:TC+4ZTQW
いやだから,感嘆符が特殊文字になるのはインタラクティブなときのみじゃないの?
2018/08/03(金) 18:49:00.35ID:BX8VumvQ
bashあんまり使わんからなあ
86デフォルトの名無しさん
垢版 |
2018/08/03(金) 20:02:10.32ID:X+nM2ZWl
! を特別扱いするシェルを使っているかどうかの問題ではないかな。
OSやファイルシステムが特別扱いしているってこともあり得なくもないが。
UNIX系OSだと / しか特別扱いしてないよね。
8780
垢版 |
2018/08/03(金) 20:31:20.88ID:htH9kPBS
Linux 板で、テレビ番組名に、!!! みたいなものが入っていて、
それがファイル名になる場合に、バグるって言ってたから

! は、エスケープも出来ないとか
2018/08/03(金) 20:50:55.07ID:TDL18VXl
他の環境ではNGの可能性があるということを考えると
怪しい文字は極力ファイル名に使わないようにしてる。
ある意味思考停止だけどw

CD-R焼く時、使える文字がフォーマットによりまちまちで、
ものすごい複雑だったことを思い出したわ。
ロミオとジョリエットwとか、ロックリッジとかあったなぁ。
2018/08/03(金) 20:52:13.47ID:u/asMYJG
余計な手間を省くのは正攻法だしいんじゃね
2018/08/03(金) 21:25:09.26ID:5qGFGeHO
>>87
だから、なにを言っているのかわからんてww
2018/08/03(金) 21:36:10.72ID:8YejLfKY
>>80
ばーかばーかさんへ

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

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

ID:htH9kPBSが言っているのは、ID:TC+4ZTQW が言っているコマンドラインでのヒストリ(参照)処理に引っかかる場合で、シェル「スクリプト」の問題ではないだろう
2018/08/03(金) 22:13:10.45ID:5qGFGeHO
スクリプトとして關係ないが、超シンプルにしての
$ ls '!'
ls: !: No such file or directory
まあ、そうだな
$ ls !
ls: !: No such file or directory
ほう
$ ls "!"
-bash: !: event not found
なんでやねんっ!ってとこではあるな

コマンドラインでも ! を打たなきゃファイル名がんなの入っていてもだし、! を含めたファイル名なんぞを打たなきゃでも ' でくくればいいんじゃね
2018/08/03(金) 22:47:23.99ID:TC+4ZTQW
だからすごく単純な話で
$ cat ./hstex.sh
#! /usr/bin/env bash

case $- in
(*H*)
echo enabled
;;
(*)
echo disabled
;;
esac
$ ./hstex.sh
disabled
こういうことでしょ?
つまりシェルスクリプトになってるときbashはヒストリ展開を既定で行わないから
エスケープを考える必要はないの。
2018/08/03(金) 22:52:05.62ID:8YejLfKY
はぁ、シェル「スクリプト」かどうかの問題じゃないんだってば

>>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した時の挙動と一緒だろうが

プログラミングの基礎やで。ソースコードをパースするときの処理かどうかの違い
2018/08/03(金) 23:09:12.00ID:5qGFGeHO
>>95
なにを言っているのかわからんww なんか面倒なことになってるなww

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

ああ、bashのバージョンで
$ ls "!"
-bash: !: event not found
にならんことあるな。新しいのは。
$ ls "!!"
でもいいよ。今度は
$ ls !!
の挙動が変わるけど。まあ '' でくくればいいだけ&単に「コマンドライン」での問題
2018/08/03(金) 23:09:28.23ID:TC+4ZTQW
えぇ……
もしかして俺が間違ってるのかと不安になるほど自信満々な書き方だなw
2018/08/03(金) 23:11:06.77ID:5qGFGeHO
>>96
>'' でくくればいいだけ
うっかり ' を二つ並べた。シングルクォーテーション
2018/08/03(金) 23:14:28.27ID:5qGFGeHO
>>97
まあ...気にすんな。「ナニ」か違う(?)と思ったのだろう。よくわからんけど
2018/08/03(金) 23:28:02.17ID:h174pTLw
若者はヒストリー置換を知らないんだなあと感じいる俺はオッサン。

ヒストリー置換は対話的な入力にしか影響しないから、
スクリプトにするときは気にしなくていいよ。
2018/08/04(土) 02:05:18.25ID:j+kw9Zam
>>97
そりゃ間違ってるでしょ。

シェルスクリプトになってるときは〜とか言っちゃってる
インタラクティブシェル上でも変数を""で囲えば同じなのに
2018/08/04(土) 03:08:34.02ID:ddNokTrS
イミフ
2018/08/04(土) 03:15:50.13ID:ddNokTrS
初見イミフ、よく読んでもやっぱりイミフw
なんか問題点を勘違いしているでしょ
>>94のcaseからesacをコピペってみて実行してみ。たぶんそういう文脈での「シェルスクリプトになってるときは〜」だと思うぞ=間違ってはないと思うぞ

何を問題にしてんの?「インタラクティブシェル上でも変数を""で囲えば同じなのに」って
2018/08/04(土) 03:24:02.15ID:XmDLxyoB
なんでこんなに丁寧に教えてやらんと理解できんのか

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

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

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

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

ダブルクォートでくくればヒストリー展開が有効であっても
ファイル名に!が含まれてようが関係ない
2018/08/04(土) 03:25:51.10ID:XmDLxyoB
>>103
話の流れをよめ。

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

変数をダブルクォートで囲めば全部解決
エスケープなんぞいらん
2018/08/04(土) 03:26:21.86ID:ddNokTrS
違うよ。>>80の話だけだぞ?
2018/08/04(土) 03:28:41.06ID:ddNokTrS
! と " は別の問題
話の流れをよめ...ってw だめだこりゃ
2018/08/04(土) 03:57:51.51ID:ZE1/UEds
それは>>73からの続きだろ

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

これも囲む必要はない

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

その話の続きで>>80

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

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

なんかあなたが強調しているのはそんなのわかっている上でのだぞ?なんでそんなとこに拘っているの??
2018/08/04(土) 07:02:26.79ID:fp3S0oAr
ヒストリ置換知らないのはゆとり
2018/08/04(土) 08:42:45.49ID:Zm4mz9Pa
俺はゆとり世代より下だがずっと指摘してたぞ(>>81
そういう決め付けやめろ
2018/08/04(土) 15:19:02.62ID:EGr8asH9
やはりIPも入れたほうがいいかね
2018/08/04(土) 15:19:27.32ID:EGr8asH9
IPじゃねーやワッチョイ
2018/08/06(月) 08:36:00.23ID:/d0+B2Ty
ファイルやディレクトリを引数に取り、その許可属性を返すコマンドってありますか。
少なくともPOSIX Utilityにはないと分かっています。
期待する動作はそのコマンドの名前をownとして
$ own /some/file
-rwxrwxr-x
というような具合です。
2018/08/06(月) 09:07:09.56ID:BzDkzOUM
lsすりゃ済むのにunix的なセンスでそんなコマンドは作らないよ
2018/08/06(月) 09:23:02.61ID:Q3wSzLhg
ls
それで満足できないなら作れ、さすがにそれくらいできるだろ
2018/08/06(月) 09:25:30.08ID:RuHjlTsU
>>114
stat -c '%A' /some/file
118デフォルトの名無しさん
垢版 |
2018/08/06(月) 09:26:53.13ID:4JbBAPy3
>>114
lsまたは stat の出力の一部を自分で切り出せば良いのでは?
なんだったらそれだけをするシェルスクリプトまたはシェル関数作れば良い。
119デフォルトの名無しさん
垢版 |
2018/08/06(月) 09:29:30.92ID:4JbBAPy3
うはっw NGワードで引っ掛かってあれこれ変えてる内に回答が二つ書かれてたw
2018/08/06(月) 09:43:00.91ID:9v8Yooys
>>117でわかるのに、unix的なセンスとか、ワロえる。
センスないのはむしろ。ぷぷぷw
2018/08/06(月) 10:15:49.41ID:BzDkzOUM
なんか嘲笑してるつもり?
2018/08/06(月) 11:45:03.11ID:jTWGCXc0
>>115,116,118
わたしも最初はlsの結果をcutするシェルスクにしようと考えたけど
>>117
GNUならそれで、BSDのstatなら stat -f "%Sp" /some/file な感じか

POSIXの縛りならlsとcutかもしれんけど
2018/08/06(月) 15:01:42.52ID:/d0+B2Ty
stat -c '%A'
↑すばらしいです。ありがとうございました。
2018/08/06(月) 20:56:55.63ID:Z/jXU7Rj
>>960>>970>>980
次スレ立てるならワッチョイで頼む
2018/08/10(金) 03:53:11.11ID:5eVCbRBd
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;
2018/08/10(金) 08:46:11.76ID:bLDrGgRY
>>125
jq(1)が定番では?
2018/08/10(金) 11:19:27.53ID:zsXdw2zN
>>126
あ、はい。ググればわかる。
なんか変な人がjqはクソだって言ってる
で頑張ってオレオレで変なの実装してるが、
すでにあるよって話
2018/08/10(金) 11:44:23.91ID:r84RRSaO
>>127
そのおかしな人の言うことを解釈すると
そのコマンドはオプション引数でデータを受け渡すのであまりよくないのでは?
Unix哲学としてはデータは標準入力から渡すべき。
2018/08/10(金) 12:48:42.64ID:vqUG5YbC
おかしな人の言い分だな、確かにw
130デフォルトの名無しさん
垢版 |
2018/08/10(金) 12:52:37.04ID:EBuB6o8O
パイプで繋いで使えるようにってことかな
2018/08/10(金) 13:42:12.09ID:ndPpyRQZ
おかしな人がケチつけてたのって何年も前じゃん
2018/08/10(金) 14:53:48.86ID:19uTC1v8
ああ、某原理主義者のことか
2018/08/10(金) 14:57:29.03ID:xNR7R3k1
ポジックス
2018/08/10(金) 15:54:52.38ID:ndPpyRQZ
でもあの人の言うことなんて聞いてらんないよね。こっちは宗教で食ってるわけじゃないんだからさ。
作って見せたツールだって痒いところに手が届かない部分は
「そんなのはそもそもこうこうであるべきで必要ない」みたいな感じでほっぽってるし
作ってマウント取って射精後スッキリになったら全くメンテなんてしないし。「各人個別で改修・メンテしろ」ってことなんだろうけど、
こんなの個人の便利ツール止まりで世界中の不特定多数の共有便利ツール・知識にはなり得ないよ。
2018/08/10(金) 15:59:32.13ID:xNR7R3k1
何やってる人か知らんが、それはそれでいんじゃないの?
頼まれずに作ったツールの公開なんてオナニーそのものやろ
2018/08/10(金) 17:01:03.73ID:r84RRSaO
誰かが例の記事のはてブで言ってたけど,ああいう人も必要だとは思う。
というか正直俺はプログラマじゃない(つまりコーディングで飯食ってるわけじゃない)ので,
ああいう考え方にはすごく興味があるし,実際研究室の管理シェルスクリプトをPOSIX準拠で書き直したりもしてる。
しかし繰り返すがプログラマにとっては邪魔な存在なんだろうなとは感じる。
というか言い方がキツすぎる。
137デフォルトの名無しさん
垢版 |
2018/08/10(金) 17:59:17.69ID:q2LOavXt
だが、それがいい。
2018/08/12(日) 14:51:04.97ID:EQS0DV6K
#!/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' は無効な日付です
て表示されます。
助け船おねがいします
2018/08/12(日) 15:45:28.66ID:CtXb4bgk
>>138
シングルクオートだと変数が、展開されない気がすダブルクォートにしてみて
2018/08/12(日) 17:45:18.75ID:EQS0DV6K
>>139
n=`date +%Y-%m-%d_%H "-d ${i} hour ago"`
ありがとう、動きましたw
2018/08/13(月) 00:38:00.83ID:z6+TJcGX
"-d ${i} hour ago" の部分が -d "${i} hour ago" ではないのに何故大丈夫なのかと思ったが、
短いオプションだからパラメータと繋がってても大丈夫ってことだったんだな。
2018/08/14(火) 19:59:14.84ID:0dSYKDxo
上のやり取りをみてふと思いたって実験してみると
GNU dateではフォーマットにCSIとかに代表されるANSI制御綴りを指定できるけど
BSD dateでは無理だな。
POSIXではこの二つのどちらが正しい実装なのかはよく分からんが
個人的な意見としてはBSD dateのほうが堅牢で,GNU dateのほうが柔軟だとは思う。まあ当然すぎる事実だけどw
2018/08/15(水) 02:35:15.09ID:sxh1cciH
BSD date の仕様が分からないけど、標準出力が端末とは限らないし
指定そのまま出すほうが正しいんじゃないかな
2018/08/15(水) 13:56:33.60ID:/R99sNfj
標準出力がなんのかんけーがあんのー?
2018/08/15(水) 16:29:17.30ID:fSWxnCwv
かんけーし
146デフォルトの名無しさん
垢版 |
2018/08/17(金) 03:06:26.97ID:DWhhxT1h
単純な文字列置換ってどうしたら良いですかね?
sedつかうとメタ文字の置換で困るんです
2018/08/17(金) 03:42:44.91ID:l9m154d6
その辺りが楽なperlでいいんじゃない?
シェルスクリプトから使っちゃいけないというわけじゃないし
2018/08/17(金) 04:16:11.31ID:DWhhxT1h
>>147
さーせん、こんな状態なんです。

# perl
-ash: perl: not found
2018/08/17(金) 04:55:42.82ID:xP9ZimWn
awk
2018/08/17(金) 04:56:29.20ID:DWhhxT1h
awkに正規表現じゃない文字列置換命令ってありましたっけ?
2018/08/17(金) 06:24:27.95ID:/a+SCakG
Ruby が簡単
2018/08/17(金) 06:38:46.91ID:eWaVkn5S
>>151
perlが無いならrubyも無いでしょ
2018/08/17(金) 07:03:28.31ID:DWhhxT1h
はい、rubyもないし、pythonもなし、nodeもないです
2018/08/17(金) 08:18:50.56ID:/a+SCakG
Ruby をインストールすれば?

漏れは、WSL で、Rubyを入れているけど
2018/08/17(金) 08:24:08.77ID:RTbKyx/W
>>154
残り容量600KBを切ってるので入りません
Rubyは依存関係も含めると圧縮された
パッケージサイズで1MB以上あります。
2018/08/17(金) 08:34:23.82ID:vhwq6spf
viは?
2018/08/17(金) 08:36:24.83ID:RTbKyx/W
手動で置換は嫌です
2018/08/17(金) 08:40:03.28ID:vhwq6spf
viはスクリプト組めるでしょ
2018/08/17(金) 08:44:27.28ID:TmUZ5Zjz
パターン文字列をsedで置換しちゃうとか(GNU sed の場合)

$ pattern='foo[1]'
$ sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
foo[2]
2018/08/17(金) 08:49:02.25ID:vhwq6spf
脳みそが解読を拒否してる
2018/08/17(金) 08:53:02.98ID:xP9ZimWn
https://paste2.org/DsfvJPn9
(こういうのをすんなりレスで書けないのはイラつく)

変なこだわりは知らん。細かくはテストはしてないけどまあ動くんじゃね
2018/08/17(金) 08:56:35.86ID:RTbKyx/W
>>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
2018/08/17(金) 09:00:22.48ID:RTbKyx/W
>>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).
2018/08/17(金) 09:16:35.01ID:RTbKyx/W
>>161
ありがとうございます。動きました。
さくっとはできないもんなんですね。
2018/08/17(金) 09:16:49.96ID:TmUZ5Zjz
>>163
ああ、bash じゃなくて ash だから here string("<<<") が使えないのね…

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

こんな感じかな。
2018/08/17(金) 09:33:56.45ID:xP9ZimWn
>>164
-v のはawk内で展開されての右辺を文字列リテラルとして処理されてえのっぽい。ので、バックスラッシュが鬼門のよう
https://paste2.org/IhEG146f
2018/08/17(金) 09:48:06.80ID:RTbKyx/W
>>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
2018/08/17(金) 09:57:27.72ID:TmUZ5Zjz
>>167
う〜ん、ash でやってみたけど、1番目、2番目は問題ないなぁ
Busybox の sed は -r オプションがないんじゃなかったかな
2018/08/17(金) 09:58:49.05ID:TmUZ5Zjz
あ、ごめん勘違いしてた。ちょっと考えてみる
2018/08/17(金) 10:03:14.53ID:RTbKyx/W
そう。何が問題なのかよくわからないw
2018/08/17(金) 10:13:01.82ID:TmUZ5Zjz
あれ?でもさ、

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.76ID:5I+JCiH1
どうかな
https://ideone.com/PaP663
2018/08/17(金) 10:18:32.56ID:RTbKyx/W
>>171
ごめん、紛らわしかった。
そっちは正しいパターン

おかしいのは「a+」の時
2018/08/17(金) 10:20:29.64ID:RTbKyx/W
だから要するに + はエスケープしたらダメってことなのか?

単純な文字列置換って正規表現置換よりも簡単な処理なのに
どれも面倒くさいなぁw
175デフォルトの名無しさん
垢版 |
2018/08/17(金) 10:33:33.58ID:hKcJGgnp
ashの日本語manページはないのかなと思って検索した時に出てきた画面。
https://i.imgur.com/xzEhcAc.png
2018/08/17(金) 10:37:43.83ID:RTbKyx/W
>>175
いや、そんなの見せられましてもねぇ

https://www.google.co.jp/search?q=ash+love&;tbm=isch
177デフォルトの名無しさん
垢版 |
2018/08/17(金) 10:41:51.16ID:hKcJGgnp
>>176
カラフルな検索結果だがこれと言って役に立たないという共通点があるな・・・
2018/08/17(金) 10:51:57.16ID:RTbKyx/W
>>177
ニヤニヤできるぞ

今更だがluaなら入ってたで
2018/08/17(金) 11:32:47.25ID:TmUZ5Zjz
grep にある -F オプションと同等のオプションが sed にも
欲しいところではあるなぁ。生まれは同じなのに sed には無い
のは何故…(実はあったりして)
2018/08/17(金) 18:50:11.51ID:D/YAmHXf
fsedみたいなのを作ってる人ならしってる
2018/08/18(土) 17:22:09.36ID:rQWtSS3z
Googleのシェルスクリプトに関するコーディング規約で
「そう〔訳注: 連続したパイプ節が二つ以下〕でない場合は一行につき一つのパイプ節を含むようにする。その際,二番目以降のパイプ節は,2文字分の欧文空白による字下げを行なう。」
とあるんだが[1],ここの例示が
command1 \
 | command2 \
 | command3 \
 | command4
となっている。
普通(といってもパイプをこのように多用しかつ改行しまくっている例はほとんど見たことがないのだが)https://github.com/ShellShoccar-jpn/kotoriotoko/blob/master/BIN/twtl.sh#L297
↑こことかでは
command1 |
command2 |
command3 |
command4
という書き方になっている。
俺はこっちの書式のほうが見慣れているので,自分のシェルスクリプトもこういう書き方でやっているのだが,みなさんはどういう書き方がいいとかあるだろうか。あるいはGoogleとは別のところが発表してるシェルスクリプトのコーディング規約とかないだろうか。
2018/08/18(土) 17:22:24.47ID:rQWtSS3z
一応俺の意見: 後者の利点としては,バックスラッシュが不要なこととコマンドが行頭に来て流れを掴みやすいということがある。
加えて簡易的なデバッグするときに,前者は
command1 \
 | command2 \
 | cat
# | command3 \
# | command4
などとするのに対して 後者は
command1 |
command2 |
cat
# command3 |
# command4
このように「新しい行を挿入してcatを入力」という単純な動作ができるので,例えばVimやEmacsなどマクロが作れるエディタなどでのデバッグ用の編集に有用というのもある。
実際俺はシェルスクリプトに関してはIDEを使わずVimで開発していて,この類のマクロを作成して便利に使っている。
長文すまん
[1]: http://google.github.io/styleguide/shell.xml#Pipelines
2018/08/18(土) 18:05:23.17ID:5BnyFmRJ
簡易的なデバッグするときに前者は
command1 \
 | command2 \
# | command3 \
# | command4
などとするのに対して 後者は
command1 |
command2 |
# command3 |
# command4
のように行頭に#をいれるだけではSyntax errorになるから前者の方がデバッグなど編集に有用とも言える

個人的には大差ないと思う
2018/08/18(土) 18:29:20.16ID:LW/iu6SG
末尾にバックスラッシュを入れることで次行を見なくても明確にコマンドが続くことがわかるから前者を支持する
2018/08/18(土) 18:38:12.95ID:Bu4pj5O8
一長一短やな
使い分けか
2018/08/18(土) 19:19:56.79ID:rQWtSS3z
>>184
でも>>183のように,コメントアウトすると
「末尾にバックスラッシュがあっても後ろにコマンドがない(実行されない)」
という状況がありえる以上,
末尾のバックスラッシュの有無を過信するのはよくないと思う。
もちろん気をつければいい話だが。

なんというか,ハンガリアン記法の間違って流布された方法に近しい危険性がある
(変数i_VARを見て,本当はfloat型なのにint型だと思い込む)
2018/08/18(土) 19:21:44.26ID:rQWtSS3z
ていうか少なくとも二人くらいは
後者の方式に賛同してるのか。

Googleもそっちを推奨してるし,俺も手癖を直すべきなのかな。
2018/08/18(土) 20:18:01.73ID:pAmB63kN
>>184
それ、末尾にパイプ記号あるから〜
と同じことじゃね?
個人的には見栄え的には前者の方を採用したいが余計な継続記号が不要な後者で書いてる
2018/08/18(土) 21:09:33.95ID:bNUWoVQ1
パイプ記号が重要だから頭にもってきたいかなあ
2018/08/19(日) 00:41:34.89ID:6q4oK8R8
scsh 使え https://scsh.net/about/what.html
2018/08/19(日) 01:23:37.19ID:A4xH6fb7
バックスラッシュで行継続(改行)って多くの言語で採用されているから
多くの人はパイプ先頭、バックスラッシュ行末じゃないかな?
2018/08/19(日) 02:52:07.69ID:YqoTvka6
俺は1行か2行くらいなら後者だな。
何行もずらずら並べるなら中括弧で囲んでパイプ記号を先頭に持ってくるかも。
行末にバックスラッシュを置いて行継続はあまり美しくないと思うのでなるべく書きたくない。

>>191
構文的に行末で文(言語によっては式)が完結できていれば行末を文の終わりとみなし
そうでなければ次の行に継続、というのもshそのものをはじめpython, JavaScriptなど多くの言語で採用されているよ。
(pythonはshと同じく行末バックスラッシュで継続もできるが)
更にRubyは行の終わりで完結できるように見えても次の行の先頭を見てどうするか決めていたりする。
2018/08/19(日) 04:00:58.03ID:O9LemqF2
>>190
無知ながら初耳だった。
scshの説明をざっと読んだけど、今回の問題の解決になる?
むしろ「括弧の前で改行するかいなか」みたいな新たな規約が生まれそうじゃない?
2018/08/19(日) 16:16:41.68ID:L67BZdE+
shに限らず末尾に演算子を置く
2018/08/19(日) 19:55:46.26ID:O9LemqF2
シェルスクリプトの話題からちょっと外れるんだけど
$ somecmd --help
としたときの手引きって標準エラー出力に出力すべき?
GNU Coreutilsでは基本的に標準出力なんだけど……。
2018/08/19(日) 20:37:51.45ID:6q4oK8R8
stderr だとページャにつなげたい時に

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

とかするのが面倒。でも zsh とかだとエイリアスで
どうにかできるんだっけ?
2018/08/19(日) 22:24:00.37ID:teBDlI3J
helpはエラーではないから標準出力でいいのでは
2018/08/19(日) 23:44:45.76ID:O9LemqF2
>>196
$ somecmd --help |& $PAGER
↑これでいいんでは
2018/08/20(月) 00:18:14.36ID:anhi4Zz/
>>198
dクス、"|&" が使えるのは bash と zsh だけかな
2018/08/20(月) 00:25:54.45ID:V9a8ZDkH
>>199
csh(系)も使える
2018/08/20(月) 01:00:54.38ID:Za3ebEAA
>>199
あ ごめん。それPOSIX互換じゃねえわ
知らんまにbash主義に染まってた 反省。
2018/08/20(月) 03:03:17.26ID:miyFFq/v
csh由来のものをbashismというのはどうかと……
2018/08/20(月) 03:04:00.88ID:O40ujeeV
つくづく宗教戦争じみてるなこの文化は
2018/08/20(月) 03:32:09.94ID:OmELABLW
まあ>>201はそんな大層な意味で言ってるわけではないだろ。単にbashしか使ってない使い込んでるってだけの意味だろう。無知でしたという
2018/08/20(月) 03:46:49.27ID:GIvuOFoC
--helpで思い出したけど、あれって書き方ってあるの?

usageの書き方とかオプションの書き方とか
引数は大文字にするの?とか [ファイル]... とかの[] とか ... の使い方とか
あるようで、バラバラな気もしている
2018/08/20(月) 04:15:12.27ID:Za3ebEAA
>>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出力もこれに準ずる形だと思うよ
2018/08/21(火) 20:17:11.95ID:ExpCY3/V
>>206
多分>>205はそういうのを求めてたんじゃないな
2018/08/23(木) 05:30:33.48ID:L+hDtmKU
シェルスクリプトの言語にJavaScriptってアリだと思う?
#! /usr/local/bin/js24
みたいなシェバンでさ。
2018/08/23(木) 05:39:54.64ID:ncZgpeak
シェルスクリプトっていうのは
シェルとして実用に堪えるものじゃないとダメ
名前の通り

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

ls だけでlsコマンドを実行できるようにしたら
シェルスクリプトと認めてもいいが
210デフォルトの名無しさん
垢版 |
2018/08/23(木) 07:32:38.64ID:d2Ifs7B7
>>208
ナシだと思う
2018/08/23(木) 07:38:44.84ID:1n1CeI2l
シェルスクリプトというより、他のインタプリタ言語と同じようにコマンド(内容)記述用としてあっていいって話だろう
2018/08/23(木) 08:56:23.64ID:AY9SoYfw
普通にやるだろ。
#!/usr/bin/awk -f
とかだってたまにはやるぞ。
「#」がコメント扱いになる言語なら
気にせずどんどんやればいい。

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

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

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

落ち着け

それはスクリプト言語だ
"シェル"スクリプト言語ではない
2018/08/23(木) 09:45:44.18ID:ncZgpeak
> シェルは関与しないのにshell-bangなんて変な名前だけど、
shebang を shell-bangの略だと主張する人は少数派だよ
2018/08/23(木) 12:56:18.33ID:/qY100we
>>208
それはシェルスクリプトじゃなく、
JavaScriptスクリプトだ
2018/08/23(木) 12:59:05.57ID:XdhcXIaw
スクリプトスクリプトはもにょる
217デフォルトの名無しさん
垢版 |
2018/08/23(木) 13:18:49.52ID:cYcyOMDR
スクリプト
スクリプトスクリプト
スクリプトスクリプトスクリプト
スクリプトスクリプトスクリプトスクリプト 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
2018/08/23(木) 14:49:29.73ID:AY9SoYfw
>>213
落ち着け。
もうちょっと先まで読めば同じことが書いてあるぞw
2018/08/23(木) 14:59:38.25ID:AY9SoYfw
>>214
shebang の e って何から来てるの?
俺は shell から来てるんだと思ってた。

なお shabang という書き方も少数派だが使われてはいるみたい。
実際 sharp-bang なわけで、こっちなら分かる。
shabang ならシバンじゃなくて、シャバンだよな。
シャバ〜ン。
2018/08/23(木) 15:01:24.58ID:2Dv2zxdP
男なんだろ?
2018/08/23(木) 15:09:53.60ID:Jv3FRRxD
違うよ〜☆
2018/08/23(木) 15:11:13.70ID:e+w5jH4y
若さ、若さってなんだ
223デフォルトの名無しさん
垢版 |
2018/08/23(木) 15:13:13.81ID:eJiCstIz
なんというか、ヒーローの名前のようだ。
2018/08/23(木) 15:42:31.50ID:bMgbpjF3
それはギャバン
2018/08/23(木) 16:36:01.71ID:YQoAQycd
さぁ、盛り上がって参りました
226デフォルトの名無しさん
垢版 |
2018/08/23(木) 16:45:35.96ID:ssILkLQJ
宇宙刑事シャバン
2018/08/23(木) 16:48:23.72ID:e+w5jH4y
ギャバン
シャバン
シャリバン
2018/08/23(木) 17:03:22.02ID:ncZgpeak
癒着!
2018/08/23(木) 18:14:50.72ID:AY9SoYfw
なんつーかオッサンばっかだな。
まあ俺もそういう反応を期待してたわけだがw
2018/08/23(木) 18:43:16.20ID:1n1CeI2l
>>219
#! -> sharp-bang -> shabang -> 単語ならshellだしすでにあるとても似たshebangでいいんじゃね、shebangの意味自体が似合ってるし
とか。shebangというれっきとした単語の由来は別にある
2018/08/24(金) 01:02:04.55ID:TjDOkMEc
元ネタ分かんねーと思ったらおっさんどころかジジイじゃねーか
2018/08/24(金) 07:46:54.31ID:mVdVBkdF
マジで検索しても元ネタわからんw
平均年齢どのくらいだこのスレは
2018/08/24(金) 08:04:01.22ID:lit/+L8O
機動刑事シバン
234219
垢版 |
2018/08/24(金) 08:55:32.25ID:57yPHNQD
>>232
>>227 が元ネタ。
ギャバン/シャリバンのバンと、シャリバン/シャイダーのシャと、
ギャバンのオープニング末尾のギャーバーン♪
からの連想でシャーバンと書いた。
残りは歌詞検索とかすると分かる。

こんな連想するの俺だけかと思ったら他にも複数いてワラタ
2018/08/24(金) 09:13:07.93ID:LbFHGrVQ
>>234
男なんだろ?
の一言でギャバンOPテーマとわかるのはギャバン世代というよりもFLASH黄金世代な予感
実際俺はギャバンじゃなく当時の面白FLASHギャバソで知った
236219
垢版 |
2018/08/24(金) 09:35:23.98ID:57yPHNQD
>>235
そんなFLASHがあったのか。
4月のAnisonDaysに串田アキラが出てギャバンのOPを歌ってたから、
それで記憶が蘇ってる人もいるかも。
てゆうかそれ俺。
2018/08/24(金) 10:43:03.55ID:wXpFbMeR
そして>>228の癒着というのはケロロ軍曹の登場人物
556(コゴロー)が変身するときのセリフ
元ネタはギャバンが変身するときに言うセリフの蒸着
40代ならここまで連想する
2018/08/24(金) 10:59:15.82ID:4te4jIm4
蒸着の元ネタってギャバンだったのか…
DeadSpaceのアーマー更新シーンを蒸着言うやついたけど元ネタあったんだな
2018/08/24(金) 15:39:45.35ID:mVdVBkdF
>>237
あ それなら知ってるわ
ケロロ軍曹だったら子供のころアニメで観てた
2018/08/24(金) 16:02:03.60ID:wXpFbMeR
>>239
ようこそ。おっさんの世界へ
241デフォルトの名無しさん
垢版 |
2018/08/24(金) 19:44:16.61ID:Gfkbj1yB
バッチファイルやパワーシェルもシェルスクリプトですか?
何言語っていうんでしょうか?
2018/08/24(金) 19:45:54.13ID:wXpFbMeR
>>241
どうでもいいことを気にするな
243デフォルトの名無しさん
垢版 |
2018/08/24(金) 19:54:12.80ID:Gfkbj1yB
静かに
2018/08/24(金) 20:30:04.55ID:ap1IsA9z
確かに
だと思ったら
静かに
でなんか笑った
2018/08/24(金) 22:34:41.93ID:UXXFLepR
>>241
バッチファイルはシェルスクリプトには入れないなあ。
PowerShellの方は、PowerShellスクリプトって言うな俺は。
2018/08/25(土) 06:14:56.78ID:TgLfCzAb
バッチファイルをシェルスクリプトに入れない理由はないと思うけど?
2018/08/25(土) 12:12:23.81ID:r5O9PJUC
スクリプトに入れるのはありだけどシェルスクリプトって言う奴は少ないと思う
2018/08/25(土) 12:16:23.36ID:zrQnMjpj
ちゃんとした定義は知らんが、
シェルスクリプト=.sh
バッチファイル=.bat
と大抵は認識してそうな印象
249デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:58:20.34ID:R/mHQH6/
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
2018/08/25(土) 14:43:10.95ID:0Hfq0tYW
シェル スクリプトと言えばだから違うくね。バッチファイルをシェルスクリプト(ファイル)と実際に呼んでるヤツを見たことはないな
command.com自体が原始的でシェルのように打ち込んでってってのも見ない。あれはやっぱりバッチファイルを作るためのでしかないってうすうすわかっているからじゃねとか
2018/08/25(土) 14:47:50.16ID:TgLfCzAb
>>250
最初から結果ありきで書くなよ。単にお前がバッチファイルをシェルスクリプトに入れないためのこじつけを
お前が考えてるだけじゃねーか

wikipediaにも書いてあるし

> スクリプト言語の一種は、ジョブ制御の自動化から生み出されたもので、システムプログラムの起動と制御を行う。
> そういう意味ではシェルの祖先としてIBMの Job Control Language(JCL、ジョブ制御言語)があるとも言える。
> この種の言語の処理系(インタプリタ)の多くは、UNIXのシェルやMS-DOSのCOMMAND.COMといった
> コマンドラインインタプリタと呼ばれるものである。
2018/08/25(土) 14:48:52.43ID:TgLfCzAb
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などがある。
2018/08/25(土) 14:51:47.98ID:0Hfq0tYW
>>251
「実際」にだよ。お前の周りでバッチファイルをシェルスクリプトと呼んでいるヤツいるの?
呼んでもいないのになぜそんなとこに拘る。バッチファイルはバッチファイル、Unix系のはシェルスクリプトはシェルスクリプトでええやん

逆にシェルスクリプトで書かれたはファイルをバッチファイルとなぜ呼ばないまでこだわれよ、だったらw
2018/08/25(土) 14:58:00.88ID:TgLfCzAb
>>253
はい、いますー。論破w
2018/08/25(土) 15:01:01.94ID:0Hfq0tYW
いるんだww
2018/08/25(土) 15:31:37.30ID:4b56uGjx
いるのか…
2018/08/25(土) 16:39:23.62ID:CiVrtAH/
>>248

自分はこの定義に賛同する
258デフォルトの名無しさん
垢版 |
2018/08/25(土) 17:13:00.55ID:aJ7Wjpaw
バッチファイル=バッチスクリプトであってる?
バッチファイル=シェルスクリプトはまちがえ?
2018/08/25(土) 17:34:24.45ID:TgLfCzAb
>>258
シェルスクリプトというカテゴリがあって、
その中で、特別に言語を指定する場合は、
bashスクリプトやバッチファイルなどという具体的な呼び方をしている

バッチファイル = シェルスクリプト ではなく
バッチファイルはシェルスクリプトに含まれる
2018/08/25(土) 17:57:18.64ID:0Hfq0tYW
>>258
バッチファイルを作るための制御文なんぞを特に命名はしてないんじゃないの。バッチファイルというのがあってそれを作る/それで使える制御文は的な存在。誰も名前を言えないように

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

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

てかさ、バッチファイルのアレもシェルスクリプトだって言いたがりは、このスレでバッチファイルのことが出てきたらどうすんの?当たり前のように受け止めるの?てか、そんなトンチンカンが現れたことがないんだから、わかるようなもんだと思うけど
2018/08/25(土) 18:06:28.42ID:0Hfq0tYW
>>260
>バッチファイルと呼べるが、そんな呼び方をする人はいない
サーバーなんぞの1日深夜1回とか1週間に1回のごちゃごちゃ処理するのを呼んだりしているかもしれない。そういう狭義のある意味全くもってなバッチ処理を記述したファイルという意味で
2018/08/25(土) 18:11:40.65ID:TgLfCzAb
> てかさ、バッチファイルのアレもシェルスクリプトだって言いたがりは、このスレで
> バッチファイルのことが出てきたらどうすんの?当たり前のように受け止めるの?

なにか問題でも?

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

などと書いてあるから、バッチファイルと明記して書けば問題ないでしょ?
2018/08/25(土) 18:18:00.15ID:0Hfq0tYW
なにそれw
無茶苦茶やな。書かなくても誰もがわかっていたからそんなのが出てない書く必要もないという事実を無視して自説のためにでしかないやん
2018/08/25(土) 18:22:59.07ID:TgLfCzAb
なにいってんだか。

バッチファイルという名前が有名だから、普段はそっちの名前で読んでるだけで
cmd.exeはシェルだし、シェル上で動く言語という定義なんだから、
シェルスクリプトに当てはまるという至極まっとうなことを言ってるだけ
2018/08/25(土) 18:29:18.68ID:0Hfq0tYW
>シェルスクリプトに当てはまるという
だから?で?それが何かの役に立つというか意味があるのか?ってことだよ。別に当てはまろうが当てはまらないだろうが意味ないだろう??

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

バッチファイルをここで話題にしたがってるの??ww
2018/08/25(土) 18:29:21.83ID:zrQnMjpj
もうスクリプトでいいんじゃないかな(鼻ホジ
2018/08/25(土) 18:31:36.33ID:0Hfq0tYW
すでに出てたけど、>>247だわな
2018/08/25(土) 18:33:12.36ID:zrQnMjpj
cmd=シェルってのがピンとこないんだよな
大体シェル=シェルスクリプトみたいな使い方してるからなんだけどさ
2018/08/25(土) 18:34:28.54ID:TgLfCzAb
>>265
意味がないならシェルスクリプトでいいだろw
2018/08/25(土) 18:37:31.47ID:0Hfq0tYW
薄いな。なんでそんなに拘る。意味がないのはあんた個人に対してだよ
バッチファイルがシェルスクリプでもなければならない意味を言いなさい
271デフォルトの名無しさん
垢版 |
2018/08/25(土) 18:42:40.13ID:0r5h6/lL
コマンドラインインタープリタを自動化したもんを
シェルスクリプトとというの

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

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

わかった?
2018/08/25(土) 18:43:26.08ID:0Hfq0tYW
>>268
Unixでsh(系=シェル)を使うと、貧弱なにもできないって感じからcmd=シェルとはピンとこないこともあるな
シェルを起動してとは言わんし。てか大体の記事とかでも、いや、Microsoftでさえシェルとは呼んではく、Command Promptだからね
2018/08/25(土) 18:49:15.78ID:TgLfCzAb
>>270
普通にcmd.exeがシェルだし、そのシェルの言語で動くんだから
シェルスクリプトですってだけだが?

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

> cmd=シェルとはピンとこないこともある
お前が本質をわかってないからだろうねw
2018/08/25(土) 18:50:24.91ID:TgLfCzAb
> 貧弱なにもできないって感じから
何もできないからなんだっていうんだろうか?

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

本質wwあなた個人の意味も言えないのに本質wwwって思ってしまうよ
276デフォルトの名無しさん
垢版 |
2018/08/25(土) 18:56:00.29ID:0r5h6/lL
プリンタに内容がPDLのファイルをリダイレクトすれば
いまでも普通にコマンドプロンプトで印刷もできるからな

コマンドプロンプトでコマンドからなんでもできる
2018/08/25(土) 18:58:24.61ID:0Hfq0tYW
>>274
>Unixでsh(系=シェル)を使うと
って、言ってるのだけど。ああ...なんだ..MS好きか?単に

shとcmdの違い/使い勝手が天地なのは使えば明らかだと思うけど。shと同等にcmdを使ってるの?もしかしてsh使ってないとかはないよな?w
2018/08/25(土) 19:01:50.62ID:TgLfCzAb
>>277
だからなんで高機能なものがシェルスクリプトの定義だ
なんて思ってるのさ?
低機能なシェルスクリプトってだけだろ
つーか、なにができないとシェルスクリプトとは認められないって言ってるんだよ
お前の定義言ってみな。矛盾しないような。
2018/08/25(土) 19:10:24.45ID:0Hfq0tYW
>>278
一般的に、シェルスクリプトと言えばUnixが元のあれやこれや
一般的に、バッチファイルと言えばMS-DOS/Windows/Microsoftのあれやこれや
一般的に、バッチファイルと言えばわかるものをシュエルスクリプトとわざわざ言い換えはしない

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

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

ってとこ。別にバッチファイルはバッチファイルで何も問題がなく、わざわざシェルスクリプトと言い換える意味がわからん、混同という弊害もあるし
280デフォルトの名無しさん
垢版 |
2018/08/25(土) 19:12:53.54ID:0r5h6/lL
まさにシェルがなにかついて記述されている

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.


バカの世界では違うらしい
2018/08/25(土) 19:15:52.35ID:0Hfq0tYW
>>280
よく読んでみ。なんかこれ幸いな単語で喜んでいるだろう?
2018/08/25(土) 19:31:09.91ID:TgLfCzAb
>>279
一般的にって、全部お前がそうしたいってだけじゃねーかw
2018/08/25(土) 19:32:11.87ID:TgLfCzAb
>>281
お前のために翻訳してやったぜ


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

>>283
だーーかーらーー、その「一般的」って一般的ではない一般的だよw 他の全文読んでみ。どれだけバッチファイルに言及してる?そこだけだろ?
てかさ、お前の周りでバッチファイルをシェルスクリプトと言っているのそんなにいるの?
2018/08/25(土) 19:40:24.03ID:TgLfCzAb
>>284
? もともとこのスレはUnix板にあったし?
>>2にsh系前提って書いてあるし?

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

なんならここでバッチファイルの内容を入れても良い
次から>>2の内容を書き換えてあげようか?
2018/08/25(土) 19:44:09.41ID:0Hfq0tYW
なんだろ。こんだけ世間擦れして、なんかどこぞの辞書的なとかが絶対ってこだわり続けるのは...あれかな??w

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

次スレは>>2を書き換えたからな
2018/08/25(土) 19:55:20.14ID:0Hfq0tYW
拗らせるぐらいなら参加しなきゃいいのにw
すげえな今までを全く無視して個人的にそうするという自己中ぶりは
2018/08/25(土) 19:56:27.99ID:A3V5N+C6
自覚ないみたいだな
俺はシェルスクリプトの正しい定義を言ってるだけ
2018/08/25(土) 19:57:14.99ID:0Hfq0tYW
誰やねんw
2018/08/25(土) 20:04:48.84ID:0Hfq0tYW
広義ではバッチファイルをシェルスクリプトと呼べるかもしれないが、一般的にバッチファイルをシェルスクリプトとは呼ばないし、そう思っているのは少なく明らかに分けて考えて言う方が多い
「一般的に」というのは「広義では」という場合にも使われるのを知っておこう

ただ、それだけのことなんだけどねえw
2018/08/25(土) 20:09:01.30ID:kfh++Yrt
バッチは別スレあるし、棲み分けすればええんとちゃう?
まあアスペのためにもスレタイにUNIXでも付けとく?
詳しくは>>2に入れておいて

あとUNIX板から移動したって事で>>1にはUNIX板の最終スレは残しておくか
2018/08/25(土) 20:10:14.67ID:A3V5N+C6
これは言い方を逆転させただけ


一般的にバッチファイルをシェルスクリプトとは呼ばないし、そう思っているのは少なく明らかに分けて考えて言う方が多いが、
広義ではバッチファイルをシェルスクリプトと呼べる
2018/08/25(土) 20:10:31.78ID:9woB+JG6
UNIX、Windows、それぞれの文化の中での言い方なのに
何ムキになってるんだい?

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

このスレがプログラム板に来たからといって、シェルスクリプト自体がUNIX文化であることには疑いなく、
正しいか正しくないかということとはまた別の問題なんだよ。
2018/08/25(土) 20:11:13.69ID:A3V5N+C6
>>292
sh互換専用のスレ立てたのでどうぞ

【POSIX】 sh系互換 シェルスクリプトスレ
https://mevius.5ch.net/test/read.cgi/tech/1535195112/
2018/08/25(土) 20:13:03.56ID:kfh++Yrt
>>295
ワッチョイ入れておいた方が良くないか?
>>4の経緯があるし
2018/08/25(土) 20:13:19.96ID:0Hfq0tYW
拗らせすぎ。なぜそこまで...必死と言わざるを得ないw
2018/08/25(土) 20:15:34.15ID:9woB+JG6
別スレ立てるなんて、もう嫌がらせでしか無くない?
しかも2つも。
2018/08/25(土) 20:20:01.41ID:kfh++Yrt
>>298
ほんとそれ
ワッチョイ入れて粘着する奴はNGした方が良さそう
300デフォルトの名無しさん
垢版 |
2018/08/25(土) 20:22:56.85ID:0r5h6/lL
まったくもって酷いことするヤツラがいるもんだ。。。
オレにはこんなことできない。。。
301デフォルトの名無しさん
垢版 |
2018/08/25(土) 20:27:59.09ID:0r5h6/lL
シェルスクリプト総合 その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/

乱立しすぎてなにがなんだか
分からない
2018/08/25(土) 20:34:30.34ID:9woB+JG6
件の輩、ドザの工作員と考えないと説明がつかないw
ご本人に住み分けを含めて説明してもらわないと
2018/08/25(土) 20:48:45.32ID:2/0/KxdV
荒れてて草
2018/08/25(土) 20:50:34.20ID:tfF8aOe1
>>295
二度と来るな屑
2018/08/25(土) 23:23:09.52ID:zrQnMjpj
まぁこういうことがあるからワッチョイ導入しようってなったんだし
ここにきた選択は間違ってはいなかったな
2018/08/25(土) 23:44:11.66ID:9woB+JG6
ID:TgLfCzAb  抽出レス数:14
ID:9FNycoly  抽出レス数:1 → シェルスクリプト総合 その29
ID:A3V5N+C6 抽出レス数:3 → 【POSIX】 sh系互換 シェルスクリプトスレ

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

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

後は件のスレをスルーして沈めておくのが懸命かな。
2018/08/26(日) 00:23:54.30ID:+yQLo3Ss
>>980
次スレはワッチョイありで頼む
308デフォルトの名無しさん
垢版 |
2018/08/26(日) 11:24:38.43ID:ylpyaNXE
>>251
JCLなつかしー

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

パソコンなら簡単なのにメインフレームは一々領域確保やらにゃならんから面倒だなと常々感じてた
309デフォルトの名無しさん
垢版 |
2018/08/26(日) 15:08:48.37ID:r/93pdu8
つまりバッチ=シェルだけどシェルっていう人はすくないってことね
2018/08/26(日) 15:11:58.53ID:I24HoXLR
鬼才現る
2018/08/26(日) 15:24:35.78ID:rDVjwTPV
>>309
また荒らそうとしてるのね
312デフォルトの名無しさん
垢版 |
2018/08/26(日) 20:22:58.07ID:r/93pdu8
じゃあパワーシェルはシェルスクリプト?
それともWindowsはシェルとはいわないってこと?
2018/08/26(日) 20:32:19.44ID:2bPBOKp2
もうお腹いっぱいです
2018/08/26(日) 20:35:06.42ID:qkCCtxHG
いっぱいすぎてゲロ吐きそう
2018/08/26(日) 22:12:44.18ID:93jd27LU
>>312
当然シェルスクリプト
cshと同じあつかい
316デフォルトの名無しさん
垢版 |
2018/08/26(日) 23:10:38.66ID:ylpyaNXE
昔は仕事でバッチを沢山作ってきたけど
退職して、数十年、コマンドや、シェル一切忘れてしまった
再びシェルスクリプトやsed.awk,viリファレンス買い込んで復習中
昔はスクリプトといえば、Bshとawkしか知らなかったから、何やるにもawkスクリプトを何十行も書いてた
まあ、新規インストールの必要ないから客先の環境そのままでも動かせるから良かったんだけどね
大型のスーパーコンピュータで数十行のawkスクリプト動かすってのも何かシュールだったな
2018/08/26(日) 23:11:48.52ID:SztCjcZc
awkが入ってない環境とかある?
2018/08/26(日) 23:12:11.25ID:SztCjcZc
windows以外で
2018/08/26(日) 23:23:16.02ID:XxVIxjiS
http://pubs.opengroup.org/onlinepubs/009695399/utilities/tput.html
ここを見るとtput colsおよびtput linesは標準で使えないと読めるのですが
POSIXに準拠した形で端末の幅などを取得するにはどうすればいいんでしょうか
2018/08/27(月) 00:43:08.11ID:6cDpYi8T
POISXコマンドであるtput使ってればいいんじゃないの
tputの仕様上は、端末(というかTerminalアプリというか端末エミュレータ)までは知らんってことじゃないの
tputの仕様/機能を満たすために後は勝手にやってくれってことじゃないの。で、当然勝手にやってる、というか、それも標準的な方法でやってるだろう(だいたいはtermcap/terminfoとかベースで)
2018/08/27(月) 00:48:50.05ID:QAQ5xX6o
でもOpenWrtにはtputないしなー
2018/08/27(月) 01:06:14.94ID:KUEVzuS1
POSIX 準拠かどうか分からんけど、

$ stty size

じゃだめなん?
2018/08/27(月) 01:12:42.77ID:QAQ5xX6o
sttyもOpenWrtではないなー
2018/08/27(月) 01:13:44.58ID:x5JZtbKK
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
なさげ?
2018/08/27(月) 01:14:39.85ID:x5JZtbKK
ID:QAQ5xX6o ただの知識自慢?OpenWrtって
2018/08/27(月) 03:20:49.11ID:y2YT/eYl
>>320
いえ すいません言葉が悪かったです。
POSIX標準としてのtputコマンドはあるのです。
http://pubs.opengroup.org/onlinepubs/009695399/utilities/tput.html
しかし そのオプションとして“cols”や“lines”が記載されていないのです。
2018/08/27(月) 03:58:36.09ID:6cDpYi8T
直接、端末に問い合わせる
https://unix.stackexchange.com/questions/16578/resizable-serial-console-window
いちおう、POSIXコマンドオプション内ではあるな。まあ、端末種によって判断しのだけど、2つぐらいに集約されてんのかな?

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

http://austingroupbugs.net/view.php?id=1053
らしい。時代を先取りして(?)気にせず >>322 を使う
2018/08/27(月) 04:54:02.59ID:6cDpYi8T
というか、
COLUMNS LINES でええやん
http://pubs.opengroup.org/onlinepubs/009604599/basedefs/xbd_chap08.html
んなの設定してないっていうしょぼい環境だったら、しょぼいので設定してくださいって、ユーザに固定値でも設定させれば済むんじゃないの
2018/08/27(月) 05:14:12.97ID:y2YT/eYl
http://austingroupbugs.net/main_page.php
↑このサイト初めて知ったわ。
ここで次期のPOSIX標準がだいたい把握できるんだな。
ところでxargsに-0オプションが付くかどうかってどうやって調べればいいですかね
2018/08/27(月) 06:47:11.21ID:QAQ5xX6o
>>329
実行してみりゃいいだろ。
xargsなんて副作用なく機能判定できる
簡単なコマンドだ
2018/08/27(月) 07:11:24.04ID:i3Gxv5eF
>>317
組み込み向けでわざとない環境を作ったりすることはあるけど、
普通はあると仮定して問題ないよ。
総ディスク容量10MB以下のベル研UNIX の頃からあるコマンドだから。
2018/08/27(月) 07:46:41.74ID:y2YT/eYl
>>330
いやそうじゃなくてPOSIX標準に取り込まれるかどうかってことです
findの-print0オプションはこの間採用されたものの
対応するコマンドでナル文字区切りのデータを受け取れて,さらにそれを区切りとして解釈できるものが
awkくらいしかない状況なので
多くの拡張実装(BSDやGNU)で取り入れられているxargsコマンドの-0オプションが
POSIX標準にならないかな というのが知りたいのです。

そしてその情報をどう入手すればいいのか今迄分からなかったんですよ。
2018/08/27(月) 08:12:50.85ID:gOoey+yt
次期POSIXや将来のPOSIXで入れる入れない機能みたいな議論を知りたいってことでしょうか
2018/08/27(月) 09:26:49.88ID:y2YT/eYl
>>333
その通りです 言葉が足らずもうしわけない
2018/08/27(月) 13:54:28.91ID:i3Gxv5eF
>>334
ttp://austingroupbugs.net/view.php?id=244
を見ると追加する方向ではあるみたい。
でもレビュー中状態でもう7年近く止まってるから、いつになるやら。
2018/08/27(月) 13:58:31.29ID:6cDpYi8T
他にもあるけど、managerはあくまでも拒否って感じ。確か2015あたりのもあるけど、同じ応えばかりw
2018/08/27(月) 14:31:36.35ID:i3Gxv5eF
毎回 -exec {} + を書いてるよね。
でも close はされてないし、うーん この
2018/08/27(月) 14:48:30.12ID:6cDpYi8T
0000251がファイル名に改行を認めるべきか認めないべきかっていうのがありの
んなのとっとと認めないでcloseすれば話が先にすすむのになって感じかなあ。議論が長いのでよくは読んではいない
2018/08/27(月) 15:34:44.12ID:gOoey+yt
現代のスピード感じゃないよね(´・ω・`)
2018/08/27(月) 20:40:23.57ID:y2YT/eYl
まあ互換性の最後の砦だから 新しい機能を付け足すのに慎重になりすぎることはないのかも
2018/08/27(月) 22:17:16.58ID:6cDpYi8T
>>339
dwheelerさんが問題解決を拗らせてると見えなくもないw
ファイル名に改行を認めないで、改行をNULLの代わりにxargsが対応すれば済むような。readはマズいのかなと思うがNULLと改行が同時に必要ってあるのかな??
2018/08/27(月) 22:20:04.31ID:6cDpYi8T
>>341
NULL=ヌル文字'¥0'のことね。いちおう(なぞ)
2018/08/27(月) 22:31:27.06ID:r0TuCFDo
>>341
マルチバイト文字列の2バイト目以降に改行コードが入る可能性は?
2018/08/27(月) 22:36:28.15ID:6cDpYi8T
>>343
議論でEBICDICでとかあったが、そんなのももういらないUnicodeでいいやんここ(5ch)もいい加減Shift-JISを捨ててUnicodeにしやがれっ

あるの?知らん。あったら他でも問題あったりするんじゃないのかなあ。dwheelerさんもそんな感じで重箱の隅的なwなのになぜか-0や-print0はええやん的な
2018/08/27(月) 22:39:24.93ID:i3Gxv5eF
>>343
UNIXでサポートされてる既存のエンコーディングにそういうのはないし、
今後もサポートされないと思う。
346デフォルトの名無しさん
垢版 |
2018/08/27(月) 22:59:48.13ID:zX+eejgv
COLUMNS LINES でいいわけがない
xtermみたいなターミナルエミュレータでも普通にリサイズされるからな
しらん間にサイズが変更されるttyなんかいくらでもある

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

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

あとはioctrlでTIOCGWINSZをじかにとるぐらいしか思い付かない
2018/08/27(月) 23:13:57.46ID:6cDpYi8T
>>346
俺の環境では、COLUMNS LINES が自動で変わるけどな。サーバーにssh接続して、クライアントでウィンドウサイズ変えても、ちゃんとサーバー側shellでのCOLUMNS LINESは
ので、それが当たり前かと思ってたよw xtermでもやりゃできるんじゃないのってか、そんな古いのは対応しないのかな
2018/08/27(月) 23:16:22.70ID:6cDpYi8T
xtermでもちゃんとCOLUMNS LINESがリアルタイムに変わるやんけっ!
349デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:18:21.35ID:zX+eejgv
いやsshでの接続なら普通に対応してるからな
2018/08/27(月) 23:21:50.19ID:6cDpYi8T
なるほど!逆にローカルでは何もしないのか。なるほど。なんでやねんっ!xtermのせいか
351デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:23:01.18ID:zX+eejgv
xtermが対応してるとか
そういう問題じゃないからな
ttyはただのダム端末だからな

xtermみたいにサイズを変更できるターミナルがあって
それに対応できるかどうかという問題になる
2018/08/27(月) 23:25:15.75ID:6cDpYi8T
TTYの幅とかの概念あるの?行はまず無いでしょ。TTYの話じゃないよ
Terminalアプリでローカルでもちゃんとしているのはあるけど?
353デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:29:04.05ID:zX+eejgv
ただな幅の情報が取得できないと
cursorライブラリなんか使えない

ウィンドウサイズが端末の幅とか関係なく
好き放題サイズを設定できるとしても
使いようがない
354デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:31:24.22ID:zX+eejgv
ターミナルはエコーされた文字を
標準出力や標準エラー出力に出力するだけだからな
2018/08/27(月) 23:33:24.56ID:6cDpYi8T
いやいや...いやいや...
xterm前提とか、今何使ってるの??
356デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:34:19.94ID:zX+eejgv
オレはxtermを例にあげただけで
xtermだけじゃない
puttyでもTeratermでもなんでもいい
357デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:35:13.23ID:zX+eejgv
昔のwindowsに附属してた
telnetでもいい
2018/08/27(月) 23:36:58.83ID:6cDpYi8T
あー...
ちょっとLinuxのでも使ってみ。今時は違うから。まあ、そゆのも対象にしたら使えないかもね
2018/08/27(月) 23:38:30.97ID:6cDpYi8T
telnetって...
まあ、そんな古いのを対象にしたらそかもね。なにかPOSIXの貧弱さに通じるものがあるなw
360デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:39:06.12ID:zX+eejgv
むしろ物理コンソールで計算機さわることのほうが希だからな
まずサーバーだったらxなんか立ちあげることなんかありえないから
xを使うようターミナルエミュレータを使う機会なんかまずない
361デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:40:16.59ID:zX+eejgv
趣味や遊びで使う分にはいいかもしれないどな
仕事で使う場合そんな使い方はまずしない
2018/08/27(月) 23:40:52.92ID:6cDpYi8T
だったら、今時はssh接続一択じゃないんじゃないかなあ。それで万事解決のようなww
puttyでもTeratermでもssh接続ならちゃんとしているのでしょ?
2018/08/27(月) 23:42:31.94ID:6cDpYi8T
仕事ならなおさらssh接続一択のような。まあ、仕事では未だにtelnetでしかとかいうとこがあるかもしれないが、そうじゃないのは趣味や遊びと決めつけるあたり、ホントに仕事でやってんの?と疑問
364デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:43:41.66ID:zX+eejgv
わかったか
オマエがニートだと思ったから
それようの書き方してる

わかってしまうのが怖い
2018/08/27(月) 23:44:35.56ID:6cDpYi8T
意味わからん。自信たっぷりだね。それだけはわかるw
366デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:48:48.71ID:zX+eejgv
telnet(オレはターミナルの例としてあげただけだ)はないにしても
xサーバーたちあげることはまずない

そんなもん使ってみればいいとか勧めてるいってる時点でな
残念なことに大体察しはつく
2018/08/27(月) 23:50:47.78ID:6cDpYi8T
Xサーバー??何を言っているのか。Windows前提絶対でモノ言っているでしょ?Windowsつかわなきゃ仕事じゃないと言っているわけ??
Windowsでウィンドウシステムが起動してそれを使ってるのと同じだよ。Windows以外でも
2018/08/27(月) 23:54:58.42ID:6cDpYi8T
てか、なんでこのスレでWindows前提絶対やねんっ。別にいいけど、他の作業環境を知らない認めないのはナイな
369デフォルトの名無しさん
垢版 |
2018/08/27(月) 23:59:33.83ID:zX+eejgv
なにをいってるのか って?
オマエがいってることが意味がわからんわ

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

なにも分かってない頭悪いのが使ったつもりになってるのが分かったわ
コレはもう確定
2018/08/28(火) 00:04:36.83ID:Hq0PMDIz
Linuxデスクトップでは普通に起動するでしょ?別に起動するって意識しなくて。Windowsでウィンドウシステムが起動しているのと同じだよ
このスレなんだから、Linuxメインで使っているのいてもおかしくもなんもないだろうにってことだけど?
Linuxを勧めるから仕事じゃないってw 俺のはLinuxでもWindowsでもないけど仕事でもよく/それなりに使われているんだけどなあ
371デフォルトの名無しさん
垢版 |
2018/08/28(火) 00:09:02.63ID:hby/BPp+
Linuxデスクトップとな。。。
ちなみにX端末ってなにかわかる?
2018/08/28(火) 00:10:09.47ID:Hq0PMDIz
どういう意味での?X端末は何もしないでXサーバが処理をするとかいう??
2018/08/28(火) 00:12:57.46ID:Hq0PMDIz
なんか老害?自分の古い知識でそれ前提絶対的なwもっと視野を広げた方がいいような。コンピュータ好きなら
374デフォルトの名無しさん
垢版 |
2018/08/28(火) 00:13:46.49ID:hby/BPp+
まあた始まった
クソニートなの
もうバレてんのに
2018/08/28(火) 00:15:11.79ID:Hq0PMDIz
いや、いうか躊躇はしてたけど、あんたがそういうのを言い出しているんだけど
さすがに>>371>>372のことを言っているようで、堪えられなかったw
2018/08/28(火) 00:24:53.71ID:SLlsMMxP
さて、便秘薬でも飲むとするか
2018/08/28(火) 00:31:12.44ID:ZccLN8yq
え? テレタイプ(TeleTYpe)がどうしたって?
2018/08/28(火) 06:15:37.18ID:xeMH1v/N
半角くん、こっちにいたのか。
よかったら「cursorライブラリ」のことを教えてくれないか?
curses なら知ってるんだが、俺は無知なんだ。
2018/08/28(火) 06:39:27.97ID:gikJ8/5D
>>378
やめてさしあげろw
2018/08/28(火) 09:10:20.79ID:yK6EJuSE
ウィンドウサイズ変えてもCOLUMNS LINESに正しい値が入ってるのは
親プロセスである対話的シェルがSIGWINCHハンドラで設定してくれてるからでしょ。
太古の昔の商用UNIXの/bin/shは設定してくれなかった気がする。
現代でも親プロセスがシェルじゃない場合には、
正しく設定されてない可能性がある。

まあシェルスクリプトならCOLUMNS LINES がもし設定されていれば
それを使えばいいとは思うけどね。
2018/08/28(火) 10:39:39.47ID:gikJ8/5D
ていうかCOLUMNS環境変数とかは設定されるべきとの勧告があるのか。
382デフォルトの名無しさん
垢版 |
2018/08/28(火) 18:07:03.95ID:+71nChns
シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
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のオプションみたいにする方法がよくわかりません

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

なお他言語を使うとか言うのは禁止です。
2018/08/28(火) 18:11:08.70ID:+71nChns
忘れてましたが、 ls ーal でも ls ーla みたいな書き方にも対応したいし、
git --exec-path=path でも git --exec-path path でも良かったりとか
git --exec-path でもOKとか、みんなどうやって引数解析してるんでしょうか?
384デフォルトの名無しさん
垢版 |
2018/08/28(火) 19:06:24.55ID:C1AWmFJx
みんなは頑張ってやっている。
頑張らないでやる方法は他の言語とライブラリを使う。
2018/08/28(火) 21:17:43.19ID:gikJ8/5D
あなたとしてはgetopt(1)はシェルスクリプトとは別の言語ではないのかな?
思いきり外部コマンドなんだけど……。
2018/08/28(火) 21:23:37.21ID:+71nChns
POSIXできまっていて、どの環境にも入ってるものならOKです。
2018/08/28(火) 21:30:00.13ID:Hq0PMDIz
Cで書かれたものを例に出している時点で変だけどな。それで他言語を使うとか言うのは禁止とか
まあ、シェルスクリプトでも頑張ってる人はググればすぐ出てくるな
2018/08/28(火) 21:41:08.24ID:gikJ8/5D
>>386
getopt(3)
http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html

はい終了
2018/08/28(火) 21:42:55.17ID:gikJ8/5D
オプション解析とはまったく関係ないんだが

確かこのスレかその前あたりでaliasの可能性について論じてた人がいたよね
あれどうなったのかな。個人的にすごく興味がある。
2018/08/28(火) 21:44:16.50ID:tpGA+DOm
>なお他言語を使うとか言うのは禁止です。
ずいぶん偉そうだね
2018/08/28(火) 21:45:59.04ID:ZccLN8yq
原理主義者クサイ
2018/08/28(火) 21:54:24.12ID:Hq0PMDIz
ロングオプションはgetopt_longでかなり幸せになっているよう。POSIXには(まだ)入っていない
gitは、まあ、大変。読む気は無くなるw
https://github.com/git/git/blob/master/git.c
CではCでも
2018/08/28(火) 22:09:30.12ID:+71nChns
>>388
何が終了なのかよくわかりませんが、
getoptを使えなんて言ってないですよ?
少し考えてください。
2018/08/28(火) 22:13:41.39ID:Hq0PMDIz
どういうネタやねんwまあ、頑張りや
2018/08/28(火) 22:19:33.48ID:gikJ8/5D
>>393
もうちょっと勉強したら?
俺 学部生だぜ? ガキに知識で負けてくやしいよね?

OpenGroupっていうのはさ POSIXを制定している企業なんだわ。
つまりそこがPOSIX標準を定めてるってこと。
だからgetopt(3)はPOSIXに準拠したオプション解析器ってことだ。
どう? 理解した? これでも分からなきゃ相当 馬鹿 だなお前は。
2018/08/28(火) 22:21:11.28ID:Hq0PMDIz
そうムキにならんくていいだろう。>>393なんて人はいない、ネタネタ
2018/08/28(火) 22:36:33.43ID:+71nChns
>>395
いや、知ってるけど、何にレスしてるのかわからん。

あー、>>382

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

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

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

あのね、getoptだけを使っても、gitのような複雑な
オプションを解析するのは大変なんだよ
2018/08/28(火) 22:41:19.86ID:+71nChns
>>387
> Cで書かれたものを例に出している時点で変だけどな。

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

なんか根本的なところで勘違いしてる気がする。
まあ所詮学生だしな
2018/08/28(火) 22:47:19.25ID:Hq0PMDIz
>>398
ww ズレすぎ。あんたのようなヤツなんていない。いたら怖いわっw
いちおう、念のために言っておくと、その引用されたのはあんたに対してだよ
2018/08/28(火) 22:49:42.88ID:+71nChns
>>399
え?なに?つーことはお前もずれてるじゃん

gitのようなオプション(つまりgitは例)を
シェルスクリプトで解析するって話なのに
なんでgitはC言語でかかれていますーなんて話になるの?
意味がわからんが、説明できる?
(学生さんは図星だったようでだまっちゃったみたいだけどさw)
2018/08/28(火) 22:53:12.08ID:Hq0PMDIz
Cで書かれてるのを例に出してるんだから、Cでまずはだろう。そこすっとばして、どうやってんのシェルでって意味通じないよ

てか、ちょっと素が出てきてるねえって感じ。ご苦労さん。なにしたいねん
2018/08/28(火) 22:54:52.38ID:+71nChns
>>401

>>382で真っ先に

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

って書いてあるんだが、どこからC言語の話が出てきたの?
2018/08/28(火) 22:57:40.65ID:+71nChns
もしかして、オプションの例として、gitのこういうオプションを
シェルスクリプト取り扱いたいですって言ったから、
C言語の話をしてると思ったの?
2018/08/28(火) 23:00:52.68ID:Hq0PMDIz
マジなのか?うそだろーw
>gitみたいにサブコマンドが使えて、
>git --no-pager log --stat のように--no-pagerはgitのオプション、
>--statはlogのオプションみたいにする方法がよくわかりません

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

あえてあんたよりにすると、「シェルで実現するにはどうしたらいいですか、または、可能ですか?」だな
2018/08/28(火) 23:02:58.05ID:+71nChns
> gitのをしたいんでしょ?する方法がよくわかりませんって、Cでやってるとこを言っているんでしょ?

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

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

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

はぁ、レベルの低いやつに目をつけあられたな
日本語もろくに理解できてない
2018/08/28(火) 23:03:17.46ID:Hq0PMDIz
ああ、応えは応えてるからね
>>387 のググればすぐ出る
>>392 Cでやってることを頑張ってシェルだ書けば
2018/08/28(火) 23:04:02.06ID:Hq0PMDIz
会話にならない。俺が悪いのか??w
2018/08/28(火) 23:06:22.48ID:+71nChns
> 頑張ればできると思いますが、複雑になりそうです。
と書いてるのに、

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

Cのコードがシンプルならまだしも、複雑なものを見せて
シェルスクリプトでもCのまねして書け。複雑に書け
とか、全然答えになってないですわ
2018/08/28(火) 23:06:39.91ID:Hq0PMDIz
>>405
> ・シェルスクリプトのことをシェルってゆうな
ああ、すまん
2018/08/28(火) 23:06:43.85ID:+71nChns
>>407
はい
2018/08/28(火) 23:07:59.71ID:Hq0PMDIz
>>408
ww やっぱり、ネタだな。いないだろう、そんなレス書ける思考のヤツはw
なにしたいねんっ
2018/08/28(火) 23:10:58.04ID:+71nChns
ん?まさかと思うが、git "みたいな" オプションを使いたいって話を
例だとわからずに、本当にgitのオプションをそのまま扱うとか
勘違いしてないか?

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

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

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

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


うわー、そう理解してしまうのは本気でやばい。ダメな方に意味でやばい
2018/08/28(火) 23:12:22.86ID:Hq0PMDIz
モノホンだったら怖過ぎですよ
2018/08/28(火) 23:14:57.35ID:+71nChns
仕切り直すわ。なんでこの文章で理解できないのかわからないが、
ちゃんと補足する。


シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
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言語のソースのような複雑なコードは書きたくないです)
なにかいい方法はないでしょうか?

なお他言語を使うとか言うのは禁止です。
2018/08/28(火) 23:17:00.32ID:gikJ8/5D
>>397
「知っています」(ただし使えるとは言っていない)
だろ? どうせ。

gitのオプション解析のソース覗いてみろ。そして俺にあやまるがいい
2018/08/28(火) 23:17:57.87ID:+71nChns
>>415
gitは忘れてください
2018/08/28(火) 23:18:19.53ID:+71nChns
gitの話はしていません。オプションの話をしています。
2018/08/28(火) 23:19:04.23ID:gikJ8/5D
だいたいgitがどうやってオプション解析してるかも知らずに
よくもまあぬけぬけと「getoptは使わない方針で」と言えたもんだな
いままでそんなゴミみたいな思考回路で生きてきて恥かしくないのかね
2018/08/28(火) 23:19:26.80ID:Hq0PMDIz
>>415
>そして俺にあやまるがいい
なんかウケたww

>gitのオプション解析のソース
見たらしいよ。ものすごい文句言われたw
2018/08/28(火) 23:20:08.62ID:gikJ8/5D
>>416
おまえがgitの例を執拗に提示したから悪いんだろ
シェルスクリプトでオプション解析する方法はあるが教えてほしければまず
自分の不手際を謝罪してからにしろ
2018/08/28(火) 23:20:31.97ID:Hq0PMDIz
>>418
直球だなああ。若いなww(しつれい)
2018/08/28(火) 23:20:43.63ID:+71nChns
>>418

>>414には「getoptを使わないで」
などと書いてないんですが、本当に日本語がおそまつ・・・
2018/08/28(火) 23:21:17.44ID:+71nChns
不手際ってなんだろう?

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

もったいない
お前のような人間はこれからずっと人生負け組だよww
2018/08/28(火) 23:22:44.60ID:gikJ8/5D
>>423
お前に足りないのは脳味噌と他人に対する配慮だよボケ
2018/08/28(火) 23:23:09.32ID:+71nChns
>>424
お前何がしたいの?
2018/08/28(火) 23:23:35.87ID:+71nChns
>>425
ふむ?なぜかバカにされたと思って、
それでムキになってるのか?
2018/08/29(水) 05:00:00.96ID:byfOgvI+
他板でもそうですが回答側がアレですねw
夏休みで低年齢層が増えていたからでしょうか。
2018/08/29(水) 08:40:49.02ID:JKfxUNfw
IDやワッチョイのつけられる板に越してきた理由が、
こういう感じの無意味な応酬が目に余ったからだしな。
知性はあっても子供だよね。
IDがあってホント良かったよ。
2018/08/29(水) 08:56:49.98ID:ND6xKvzt
>>414 お願いします。
2018/08/29(水) 10:36:23.57ID:jDyQ3/+0
>>430
ない
432デフォルトの名無しさん
垢版 |
2018/08/29(水) 14:43:49.86ID:dthpACHL
>>414
頑張って下さい。

ま、しかし、bashだと素のshよりはちょっと楽かな?
2018/08/29(水) 14:46:35.77ID:jUkhBS20
誰か414を3行にまとめてくれ
2018/08/29(水) 14:51:01.95ID:ND6xKvzt
シェルスクリプトで引数を取り扱ういい方法はないでしょうか?
getoptとかgetoptsがあるのは知っています。
頑張ればできると思いますが、複雑になりそうです。
2018/08/29(水) 15:14:53.45ID:AXEWk4o3
getoptとかgetoptsで頑張るのがいいと思います
2018/08/29(水) 15:29:00.41ID:jUkhBS20
getoptとかgetoptsで頑張るのがいいと思います
2018/08/29(水) 16:01:13.07ID:Nn5B1KsW
getoptとかgetoptsで頑張るのがいいと思います
2018/08/29(水) 16:14:32.69ID:U+j3n810
getoptとかgetoptsで頑張るのがいいと思います
2018/08/29(水) 17:01:53.59ID:rEBrQhP5
人生、時には諦める事も必要
2018/08/29(水) 17:22:27.53ID:zGukP1bd
良いプログラマーとは、楽をする為に労力を惜しまないそうです
今回はその労力をここでの問答に費やす訳ですから
粘り強く頑張って頂ければ良いのかなと思いました
441デフォルトの名無しさん
垢版 |
2018/08/29(水) 20:56:07.12ID:zRPnCBM0
なにもしないのが一番楽
やっぱりアホしかいないわ
2018/08/29(水) 21:02:14.84ID:zfnELSlX
と、アホが申してます
2018/08/29(水) 21:41:17.05ID:ySrrhl3u
ム版に引っ越してきたばかりにム版の厄介者にいつかれちまったな
2018/08/29(水) 21:45:29.75ID:PHlZ4Qkz
ゆうめいじんなのか。なるほど
2018/08/29(水) 21:46:04.98ID:jUkhBS20
まぁIDすらなかった頃に比べれば顔真っ赤が判別できるのは助かるわ
2018/08/29(水) 23:58:23.02ID:U+j3n810
要求の多いお兄ちゃんは、結局何もしないの?
447デフォルトの名無しさん
垢版 |
2018/08/30(木) 09:43:05.13ID:Le3eFjin
しかし引数解析ってそんなに頑張らなくても自作できるよなあ。面倒なだけで。
2018/08/30(木) 09:45:01.72ID:rxoSSaq5
だから面倒なのがいやなんだろ?それぐらいわかれよ
2018/08/30(木) 09:49:03.76ID:5UlR9u+e
引数解析そのものを諦めて別の手段にするとか
2018/08/30(木) 10:11:57.74ID:lJFNKW+A
引数解析って
prog -abcde
とかもできるの?
prog -a -b -c -d
とかしかできないの?
2018/08/30(木) 10:26:46.95ID:DLN02TyK
好きに作ればよくね
2018/08/30(木) 10:57:16.78ID:8BsM3ej5
>>450
普通にできるてかしてくれる。てかそれぐらいちょっと調べればわかること
2018/08/30(木) 11:05:59.54ID:rxoSSaq5
ちょっと調べたけど
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb

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

「普通にできる」とはどういうこと?
2018/08/30(木) 11:12:04.78ID:rxoSSaq5
> --longと書いたら-oと誤爆するgetopsしか
--は先に除外すればできるか。リンク先のコードではダメだけど
あとgetopt。これはbashだから、caseの二段構成にするしかないんかな
これを「普通にできる」とは思わんけど
2018/08/30(木) 11:13:00.09ID:8BsM3ej5
getoptはGNUとBSDでは別物。GNUのはロングオプションに対応してる。誤爆って?
getoptsはKorn/POSIX シェル組み込みコマンド(らしい)。ロングオプションは使えないが>>450を「普通」にやってくれる

ロングオプションと羅列を混同してるのか??
2018/08/30(木) 11:17:10.20ID:rxoSSaq5
やっぱりデメリットあるのか。
ロングオプションが使えないのはだめだね
できるけど、べつのことができない
2018/08/30(木) 11:17:50.50ID:8BsM3ej5
なにを言いたいのだか
2018/08/30(木) 11:22:47.19ID:KGeBif2I
やはりそういうことか
2018/08/30(木) 11:24:37.49ID:rxoSSaq5
例えて言うなら、ケーキ食べられる?って聞いて
普通に食べられる(だけどパンは食べられないけどね)
みたいだなーってことだよ

確かにケーキ食べられる?が質問だし、食べられるのだろけど
それ以前のできて当然のものができないっていうのは
がっかりするしか無いなぁってこと
2018/08/30(木) 11:25:04.80ID:KGeBif2I
うん

うん?
2018/08/30(木) 11:26:42.89ID:8BsM3ej5
トンチキが横入りして勝手に俺の思ってたのと違うっていうのか。知らんがな
2018/08/30(木) 11:28:00.65ID:rxoSSaq5
こういうふうに、話の流れから当然だろ?と思うことも
いちいち全部言わないと、話ができないってのは
アスペなんだろうなって思う
2018/08/30(木) 11:30:29.24ID:8BsM3ej5
それはあんたの勝手な話の流れの解釈だな
俺は、>>450は今までとは違う初心者のぶっ込みでしかないと思うけど。ある意味新たな
てか、本題はもう終わってるだろう?あんたの勘違いでwそれを認めたくなくダラダラなだけだな
2018/08/30(木) 11:38:24.71ID:rxoSSaq5
>>463
なんか自分が初心者の質問を解決してあげたみたいに思ってるかもしれないけど、
getoptでそれができるよ(ただしロングオプションは使えないよ)って
教えてあげたのは俺だからね

あんたは普通にできるといっただけで、どうやってできるとは言ってない。
getoptという名前を出すと、すぐにロングオプションが使えないことも
わかってしまうからね。制限付きであることを隠したいから、名前を出さずに
普通にできるという言葉でごまかしたんでしょう?
2018/08/30(木) 11:52:42.25ID:TV9jsMCb
>>464
なんでそんなイライラしてるの?
2018/08/30(木) 12:05:15.24ID:rxoSSaq5
>>463がイライラしてるのが移ったんだろうさw
2018/08/30(木) 12:05:25.60ID:8BsM3ej5
>>464
解決してあげたww。次の文とかからもそこが大事なのねwなるほど
俺は別にお前のように俺が俺がというのはないなあ。単なる雑談の一種でしかないな
なので、お前のその言っていること全体がイミフメイ。妄想するのは勝手だが、妄想をダダ漏れさせてぶつけられても困ります。あとは勝手にやっとくれ
2018/08/30(木) 12:07:53.14ID:rxoSSaq5
ほらね。イライラしてるw
2018/08/30(木) 12:10:55.47ID:rxoSSaq5
雑談したいなら雑談スレに行けばいいのにね
2018/08/30(木) 12:37:21.81ID:KGeBif2I
まぁ暇なんだろ
ここでやるなには同意だが
2018/08/30(木) 12:55:18.44ID:8BsM3ej5
暇なのは否定しないが、雑談の「一種」と言っているのだけどな
すんなっていってるそれも雑談じゃないの?
2018/08/30(木) 18:15:49.30ID:43MmhEYe
>>453 >>464
都合のいい先走った解釈はされないほうが。
>>450 ではロングオプションのことはきいていないですよ。
2018/08/30(木) 19:45:19.96ID:rxoSSaq5
>>472
そんなんだからアスペって言われるんだよ
2018/08/31(金) 04:38:19.15ID:6Alav1/S
ひらめいた!

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

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

prog --foo -a -b -c -d -e --bar param
と実行したように見せかけるにはどうしたら良いか?
2018/08/31(金) 05:07:23.65ID:QWemr4wG
>>474
getopt(1)を一度でも使えばそんなお題を出さずにすむのに
2018/08/31(金) 05:17:02.08ID:91l/t0hy
上のちょっと変わった人だろう
2018/08/31(金) 07:41:02.63ID:6Alav1/S
getoptはロングオプション使えないじゃん
478デフォルトの名無しさん
垢版 |
2018/08/31(金) 07:58:25.86ID:ii43Mx6H
バッチはシェルではないけどMSDOSはシェルなん?
2018/08/31(金) 08:33:46.47ID:NkcoCIHS
おまえら車輪の再発明が好きだな(´・∀・`)
2018/08/31(金) 08:44:41.63ID:csqJsH/K
>>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.98ID:4WvfdMT+
めっちゃ早口で言ってそう
482デフォルトの名無しさん
垢版 |
2018/08/31(金) 12:54:57.94ID:hD6bHOXY
録音してゆっくり再生してようやっと何言ってるかわかる、ぐらいかな
2018/08/31(金) 13:05:55.30ID:DXKxWv2O
>>481-482
本当に自覚してないようだから教えてあげるけど
そういうくだらない雑談をよそでやんなさいって言ってんの。

それともそのレスになにか価値があるというのなら
どうぞいってください。話を聞くよ?
2018/08/31(金) 13:17:47.02ID:ANKbwE4L
子供だなあ
485デフォルトの名無しさん
垢版 |
2018/08/31(金) 13:42:20.88ID:hD6bHOXY
このスレは君が価値を感じる書き込みをしなければならないスレではない。
486デフォルトの名無しさん
垢版 |
2018/08/31(金) 13:43:18.09ID:hD6bHOXY
キリッ
2018/08/31(金) 13:44:06.35ID:sUUndK8T
ここって5chだよな?
2018/08/31(金) 13:44:30.70ID:H6r51FSy
うん
2018/08/31(金) 14:03:56.61ID:DXKxWv2O
せっかくプログラム板に移動したのに、荒らしは消えないのねw
2018/08/31(金) 14:48:59.64ID:LaBPL+3F
どういうぎゃぐなのかと思わせられるほどの無自覚ぶり。他人に自覚とか言ってるのに
2018/08/31(金) 15:00:22.51ID:/mKi/Wls
             )ソ)
          ッλ ノ(.,ノ)
         (゙- ..::.::. . (
        (ソ.  .彡⌒ミ. )ソ)
        ).::'; (´・ω・`) ス (
       ソ .::;';'(つ ⊂)::;';'`〜、.
       (  :;';' |__∧_| ::;';'  ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
 さ あ 禿 げ 上 が っ て ま い り ま し た
2018/08/31(金) 15:07:49.61ID:H6r51FSy
頭に刺さってる髪の数だけ書き込みを許してやる
2018/08/31(金) 15:20:54.53ID:vplIlyda
ファイルの更新について教えてください

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

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

またviなどのエディタで更新した場合はどうなのでしょうか?
やはり100MB分の更新になりますか?
494デフォルトの名無しさん
垢版 |
2018/08/31(金) 16:11:16.42ID:j8UTgVSe
>>493
OSやドライバに依存する。

でもだいたいはライトキャッシュがあって実際の書き込みは中々されないと思うよ。
ましてや書き込み回数が多くなると劣化するメデイアと初めからわかっているものに対してバンバン書くようなことは普通のドライバならしないと思う。
2018/08/31(金) 19:32:51.61ID:OUCwI4mz
この動きって仕様ですか?
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
2018/08/31(金) 19:46:53.74ID:QWemr4wG
>>495
仕様だと思う。
$@の時点ではシェルが解釈した引数ごとに分かれているのに対して
"$@"←のようにしてしまうとそれがひとまとまりに見做されてしまい
結局args="a 1 b 2"と代入していることになる。
2018/08/31(金) 19:51:37.92ID:QWemr4wG
解決方法はevalやらを使って
#! /bin/sh

n=1
for i in "$@"; do
eval "arg$n=\"$i\""
n=$((n + 1))
done
こうやるといいんでは。
arg3とかで「3番目の引数」を参照できるようになってる筈
2018/08/31(金) 19:53:52.69ID:QWemr4wG
ていうか質問の内容から察するに二種類の別の引数を処理したいんだよね?
すなおにPythonとか使ったほうがいいとは思うが……
俺が示したやり方だと引数の位置が絶対参照だし 引数を処理する度に変数が衝突するし

もちろん俺の方法が下手というのもあるが まあシェルスクリプトで引数処理は鬼門であることは間違いない
2018/08/31(金) 19:59:38.59ID:OUCwI4mz
どう解釈すれば、この挙動を理解できますかね?

./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
2018/08/31(金) 20:04:13.23ID:4o8e5lPA
>>493
シェルの追記はかからない。
vi/vim はかかる。

>> 495
仕様。配列にぶっこむ。
HOGE=("$@")
for ent in "${HOGE[@]}"; do
echo $ent
done
2018/08/31(金) 20:20:45.59ID:4o8e5lPA
>>499
"A $@ Z" → A\_a\_1_b\_2\_Z
"A Z" → A\_Z
アンダースコアはスペースと思ってくれ。
ダブルクォートはスペースをエスケープしてる。
man に載ってたと思って読んでたが見つからんかった。
2018/08/31(金) 20:47:48.56ID:6cxiNGZa
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
2018/08/31(金) 20:52:30.52ID:OUCwI4mz
よくわからんね。 $@がダブルクォートの中に入ってたら
"$1" "$2" ・・・ "$n" に展開されるってことかな?

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

"A $@ Z" は
"A $1" "$2" "$3" ・・・ "$n Z" に
展開されているとしか思えない
2018/08/31(金) 21:53:31.46ID:KmkRvZ7D
>>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

となりました
2018/08/31(金) 23:13:07.36ID:QWemr4wG
>>504
>>497じゃだめなん?
2018/08/31(金) 23:15:52.07ID:QWemr4wG
>>503
あ すまんこっちか。
>>497じゃだめなの?
2018/08/31(金) 23:29:17.32ID:OUCwI4mz
イイかダメかで言えば、arg1、arg2、arg3、・・・では
ループできないのでこれだけではだめですね。
シェルスクリプトにもライブラリが欲しい所ですね
508デフォルトの名無しさん
垢版 |
2018/08/31(金) 23:44:36.90ID:4ZfpOo1s
そんなもんいらない
そんなん使うぐらいなら別のスクリプトを
シェルから使う

ホントな頭悪いことばっかりいってるわ
2018/09/01(土) 00:01:57.02ID:Z9gelboG
>>507
もう何度も言ってるが別の言語を使え
お前は家で生ハムを作ろうとしているようだぞ
素直に店で買ったほうが旨いし危険性も少ないぞ
2018/09/01(土) 04:09:47.42ID:IN1XIdeB
最初は使い捨てだからとシェルスクリプトを書くが
なんだかんだ使い続けて、利便性向上の為にアップデートを続け
最後には複数ファイルに及ぶ意外に大規模な代物に
今更マトモな言語で作り直すのも面倒臭い
やるなら最初からマトモな言語で作っておけば良かったと
511デフォルトの名無しさん
垢版 |
2018/09/01(土) 05:19:02.92ID:Z9gelboG
>>510
その通り
一部のよほど頭の良い人(USP研究所とかそのあたり)じゃないと
まともに扱えない単純だけど難しい言語

ほとんどの人間はPythonやらを使ったほうがいい
Pythonはエラー処理やセキュリティ関連も既定で充実してるから
バカでもプログラムが書けるようになってる
512デフォルトの名無しさん
垢版 |
2018/09/01(土) 06:18:36.99ID:j0QmLW2E
シェルスクリプトを他のスクリプトへコンバートするツールとか無いのかな?
2018/09/01(土) 07:21:55.56ID:mPcVbgud
>>510
シェルスクリプト使うのは、
シェルスクリプトでやるのが適している場合で
規模で決めるもんじゃないだろ?
2018/09/01(土) 07:58:52.51ID:dtHP3qHu
>>513
規模で決めても変わらんだろ
シェルスクリプトに向いてなければどーせ規模が増える
2018/09/01(土) 08:09:40.25ID:mPcVbgud
例えば、rbenvとか、それなりの規模だけど
シェルスクリプトで作るのが適している
2018/09/01(土) 08:10:56.58ID:kUpkBQ3x
>>493-494
>追記分のブロック数分が更新されると考えていいのでしょうか
たぶん、追記分だけ

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

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

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

まあ、ファイルシステムの説明を読まないと、わからない
2018/09/01(土) 08:19:23.69ID:kUpkBQ3x
vagrant, chef は、Ruby で書かれているだろ

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

手順書がいつシェルに適していると?
rbenvは手順書じゃないよ
2018/09/01(土) 08:45:05.20ID:mPcVbgud
>>518
それ理屈にあってないだろ

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

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

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

それにテストもドキュメントもバージョン管理もあるね。
(って今気づいたがバージョン管理ってなんだ?)
2018/09/01(土) 08:48:34.52ID:mPcVbgud
なんか、JavaScriptと同じ空気を感じるな。
いろんな仕組みがないから、簡易的な用途にしか使えないと
最初は思われていたが、それらの仕組みが揃った今では
サイト全体をJavaScriptで作るのもありえないことではなくなった。
2018/09/01(土) 08:50:14.95ID:dtHP3qHu
>>515
前提条件なしのインストーラーみたいな選択肢が他に挙がらないパターンは違うだろ

適してるかどうかで考えるってのは誰も否定せんわ
篩や目安として考えるのが規模だって話だろ
2018/09/01(土) 08:53:58.50ID:mPcVbgud
>>522
だから規模で判断するのは間違いという結論になると言ってるんだが?
2018/09/01(土) 08:56:54.80ID:J8s4Euww
>>513
具体的にはどういう場合?
2018/09/01(土) 09:00:31.35ID:mPcVbgud
>>524
だからrbenvっていってるじゃん。
2018/09/01(土) 09:01:03.88ID:J8s4Euww
>>525
具体的に
2018/09/01(土) 09:03:56.67ID:dtHP3qHu
>>523>>525
それは例外であって反例ではない
2018/09/01(土) 09:07:50.87ID:kUpkBQ3x
仮想化は、典型的な手順書だろ。
パッケージをダウンロードして、インストールして、環境変数PATH を通して

シェルスクリプトで作るのは面倒。
Ruby でOK
2018/09/01(土) 09:16:02.22ID:Z9gelboG
まあRubyじゃなくてもRubyのように
ドキュメント生成やパッケージ管理ができればいいんだよね
PythonがいいよPythonが。
2018/09/01(土) 09:23:11.21ID:mPcVbgud
>>527
え?今求められてる「例」は
「シェルスクリプトが適している物」でしょ?

いつの間に質問が「シェルスクリプトが適さない物」にすり替わって、
rbenvを「例外」としてだしたと思ったの?
2018/09/01(土) 09:24:47.95ID:HRxiLrgz
pwshが便利すぎてな
2018/09/01(土) 09:25:44.74ID:mPcVbgud
>>528
> 仮想化は、典型的な手順書だろ。

たまたま手順書がシェルスクリプトで書かれていたからって、
手順書だからというのはシェルスクリプトで書く理由にはならないんだよ。

あんたはrubyが入ってない、入れたくないという環境でも
動かしたいという理由とごっちゃにしてるだけ
2018/09/01(土) 09:37:39.89ID:dtHP3qHu
>>530
分かった、好きにしてくれ
2018/09/01(土) 09:45:09.27ID:mPcVbgud
理解したならいい。
好きにするのは普通にしている。
ここでやってるのは、お前に理解させることだからな。
反論がなくなればそこで終了だ
2018/09/01(土) 10:52:03.88ID:f+i9u0Am
>>531
Unix に新しいシェルが!? と思ったら PowerShell だったのね
2018/09/01(土) 11:17:42.65ID:qlVPfHnQ
結局どういう場合にシェルが適しているのか一言も言ってない件
2018/09/01(土) 11:35:25.52ID:mPcVbgud
>>526
1. シェル環境そのものをカスタマイズするためのもの(例 rbenv)
通常のプロセスはサブプロセスとして起動するので、カレントシェルのカスタマイズはできない

2. 特定の言語のライブラリやランタイムに依存したくないもの(例 Docker)
あらかじめ入っているものだけで起動できるので、環境を整える必要がなくなる
コンテナやIoTといった小さな制限されたイメージでも使える


逆にさ、他の言語の方こそ「適している理由」が少ないと思うな。
例えばRubyで作ったものはPythonで作ることだってできるだろ?
2018/09/01(土) 11:42:20.50ID:mPcVbgud
3. CLIコマンドとCLIコマンドのグルー言語
リダイレクトやパイプを使った処理はシェルスクリプトが得意
他の言語でもネイティブに記述するのが面倒だからか
内部的にシェルを経由してたりするしな
2018/09/01(土) 11:48:25.44ID:qlVPfHnQ
>>537
1はそもそも対象となるものが少ない
2は例えばC#ですら可能
2018/09/01(土) 11:55:22.51ID:mPcVbgud
>>539
はぁ、だから

> 逆にさ、他の言語の方こそ「適している理由」が少ないと思うな。
> 例えばRubyで作ったものはPythonで作ることだってできるだろ?

こう書いたのに。

たとえ対象となるものが少なくとも、
適している理由があるだろ?
他の言語は、その適してる理由すらないのにって話だよ

2がC#ですら可能? じゃあ俺が使ってるルータ(OpenWrt)で動かしてみなよ
2018/09/01(土) 11:57:50.49ID:mPcVbgud
参考までに言っておくと、俺が扱ってるルータは
比較的スペックが高いものだが、Flashのサイズは16MBしかなく
ファームウェアを除いたら空き容量は10MB程度だからな
2018/09/01(土) 12:11:14.41ID:HRxiLrgz
自分が今使ってる環境を前提にして
同じように考えろと周りにも要求する人ってたまにいるけどその議論に意味あるのか?
2018/09/01(土) 12:23:32.27ID:mPcVbgud
>>542
意味ないだろうね。

だから sh しか入ってない、入れられない
環境っていうのも考慮しろ。

贅沢な環境を前提とするのは
大間違いだって言ってる。
2018/09/01(土) 12:35:03.95ID:HRxiLrgz
>>543
だからって極貧環境を前提にするのも間違い

極貧環境でリッチなスクリプトが動かないのはわかった
その環境ではshは素晴らしいものだ
スクリプト言語の完全敗北だよ
そりゃ動かせないのに勝負になるわけない
この結論に議論の余地はないだろう

じゃあ議論が終わったので次に行こう
業務規約でツールインストール禁止のWindows 7環境でshのメリットはあるか?
2018/09/01(土) 12:36:44.49ID:mPcVbgud
>>544
はぁ。前提としてねーだろ
そういう環境もあると言ってるだけなのに、

「無視するのが前提」で話をしてるのは
お前なんだよ

これからは「考慮するという前提」でいくからなw
2018/09/01(土) 12:38:38.54ID:dtHP3qHu
>>542
意味ないね

そもそも根本的に考えてることは同じハズなんだが、イメージ対象が違ったりアスペみたく妙なとこ拘り始めると話が拗れる
2018/09/01(土) 12:43:20.26ID:mPcVbgud
>>544
> 業務規約でツールインストール禁止のWindows 7環境でshのメリットはあるか?

WindowsとLinuxの両方で使うなら、
両方のOSでそのまま動くツールがほしいね

まずツールインストール禁止なんだから
任意のバイナリ、RubyやPythonをインストールすることは禁止だ。
(バイナリOKならbusyboxでもダウンロードすればいいということになる)

だからバッチファイル or PowerShell or JavaScript(JScript) と
シェルスクリプト の二段構えにするしか無いだろう。

二重にコードを開発するのが嫌なら、簡易インタプリタ言語でも作って、
WindowsではJavaScrptで、Linuxならシェルスクリプトで
パースしてコマンドに変換して実行とかかな

ってことで、シェルスクリプトでもそういう用途のために
ライブラリとか充実してるといいよねという話に戻すw
2018/09/01(土) 12:46:29.79ID:mPcVbgud
皮肉が伝わっていなそうだから言っておくが、>545は
「どちらもなにかを前提としてる」だろってこと

そして2つの違いはその前提が
「多くの環境に対応する」前提 なのか
「特定の環境を切り捨てる」前提なのかってこと
2018/09/01(土) 13:52:25.73ID:Z9gelboG
結局シェルスクリプトは大規模開発に向いてるの?
2018/09/01(土) 13:52:43.19ID:7zKoqoPj
最近知ったけど&&や||使えばifによる判定不要なんだね

ls aaa && echo exists
ls aaa || echo not exists

でもプログラムやってきてた自分としては
if使っちゃうかなあ・・・
2018/09/01(土) 14:21:11.49ID:mPcVbgud
> でもプログラムやってきてた自分としては
???

俺もプログラムやってきたが、こういう書き方を知った(意識した)のは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は短絡評価じゃないから、先に|| や && の右側が評価されてしまったはず


えーと、いつから自分がプログラムやってきたと錯覚していた?
2018/09/01(土) 14:44:03.83ID:2NCbxz5b
独り舞台の全レス
2018/09/01(土) 14:46:14.88ID:mPcVbgud
あ、はい
(下らないレスは無視してるけどなw)
2018/09/01(土) 15:07:44.71ID:7KL6nh8i
一日中張り付いてるやべー奴
2018/09/01(土) 16:10:37.86ID:W/mc6eBq
>>516
> 1, 2, (3, 6,) 4, 5 のようなページの並びになるのかな?
重複排除以外ならない。
アプリからそれを書き込もうとすると
write(fd, buf/*3, 6, 4, 5*/, size)
を実行するしかない。

>>549
向いていない。
2018/09/01(土) 17:14:12.00ID:mPcVbgud
>>555
> 向いていない。
理由もお願いします。
解決可能な理由だと意味ないですから
2018/09/01(土) 17:30:46.73ID:qlVPfHnQ
>>540
https://github.com/dotnet/core/issues/1165
2018/09/01(土) 17:43:01.15ID:vZp6TokW
何行以上なら大規模なのか、1人で開発したら大規模と言えるのか。
シェルスクリプト環境自体がシェルスクリプトを用いた大規模分散開発の成果と言えるのかもしれない。


という夢を見た
2018/09/01(土) 17:46:41.85ID:mPcVbgud
>>557
ありがとう。やっぱりうちのOpenWrtでは動きそうもないね。
2018/09/01(土) 17:47:16.28ID:qlVPfHnQ
>>559
なぜ?
2018/09/01(土) 17:59:21.16ID:mPcVbgud
>>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"も"搭載されているが、どれくらいメモリ食うんだろうね
2018/09/01(土) 18:00:20.51ID:mPcVbgud
訂正
× おまけでARMのコアバイナリサイズ。圧縮状態で30MB近くある
○ おまけでARM版の.NET Coreランタイムのバイナリサイズ。圧縮状態で30MB近くある
2018/09/01(土) 18:02:43.20ID:7GOU6dDm
ちょっと理解に苦しむんだが、ルーターで大規模開発するわけ?
564デフォルトの名無しさん
垢版 |
2018/09/01(土) 18:02:59.63ID:/wwW4VSs
ちっちゃいコマンドを一杯つくって
そのコマンドを一杯組み合わせてどんどんコマンド作るのには最適
標準入出力でひたすら組み合わせて使えるのがベストだ

一つのシェルスクリプトでたくさんの機能の処理を書こうというのが
そもそもの間違い

単体のシェルスクリプトで完結して使える簡単な機能を作る

わかりましたか
2018/09/01(土) 18:08:41.62ID:mPcVbgud
>>563
俺も理解に苦しむな。

だれがルータで大規模開発するなんて言ったんだ?
2018/09/01(土) 18:10:57.55ID:7GOU6dDm
>>561
じゃあmonoで良いやん
2018/09/01(土) 18:14:25.88ID:eduRMzlf
シェルしか書けないジジイが必死だな
2018/09/01(土) 18:19:40.37ID:mPcVbgud
>>564
いやわからんw

「簡単な機能」とはどういう機能なのか
理論的には、たくさんのコマンドを組み合わせるだけという
シェルスクリプトに適した単純な機能であっても、その量が多くなれば大規模になるだろう?
「機能の種類や複雑さ」と「機能の量」は別々の概念だ

俺にとっては大規模といったら10万行超えるぐらいのものなんだが、
その前提でいいのであれば1000行程度は小規模だろう。だがその
1000行でもライブラリあったほうが楽になるだろうと用意に予測できる

例えばgit subtreeが865行だな
https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh
2018/09/01(土) 18:23:56.55ID:+0pKcVMh
理論とか言い出しちゃった
2018/09/01(土) 18:38:06.88ID:+0pKcVMh
誰が提唱した理論だろう?
謎理論?
2018/09/01(土) 18:42:01.49ID:mPcVbgud
シェルスクリプトが大規模に向いてないという理由を
誰も答えてくれないので俺が書いてやる

まず前提としてどんな言語であっても、言語だけでは大規模開発を
するのは無理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
(適してないとは思うが)足りない部分を補えば大規模開発だってできることは証明済みだよ

まとめると、現在のシェルスクリプトが大規模開発に向いてないのは
フレームワークやライブラリが不足しているから。
俺がシェルスクリプトで大規模開発をやらないのは、
シェルスクリプトが適した内容で大規模なものを思いつかないから。
それはそれとして中規模を小規模にするためのフレームワークやライブラリは欲しい。
2018/09/01(土) 18:46:31.18ID:IN1XIdeB
休日は議論が捗りますね
573デフォルトの名無しさん
垢版 |
2018/09/01(土) 18:46:41.92ID:/wwW4VSs
コマンドラインインタープリタを自動化したもんを
シェルスクリプトとというの

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

頭悪いバカは用途がわかってない、、、
574デフォルトの名無しさん
垢版 |
2018/09/01(土) 18:49:33.52ID:/wwW4VSs
たとえばなこのスレにいるような
コマンド叩ける程度の知能しかないオペレーターみたいなヤツが
シェルスクリプトだったらいっぱい自動でコマンド叩けると
必死に主張してるワケ
2018/09/01(土) 18:55:47.33ID:mPcVbgud
お、今気づいたが、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/ の方が優れてるな
2018/09/01(土) 18:59:35.38ID:mPcVbgud
>>574
「コマンドをいっぱい叩ける」というのは量の話。
「適した用途」というのは量(大規模か否か)ではなくて
>>537-538に書いたような、処理の内容の話

いい加減、量にこだわるの止めません?w
577デフォルトの名無しさん
垢版 |
2018/09/01(土) 19:05:44.41ID:/wwW4VSs
シェルスクリプトでじかに文字列の処理なんかしないからな
sedやawkを使っても
頭が致命的に悪いとコレもシェルスクリプトで書いてやりたいとなるわけか

なるほどな
2018/09/01(土) 19:08:19.43ID:jmAsDv6y
なんの話してたんだっけ?
2018/09/01(土) 19:09:38.27ID:mPcVbgud
サマータイムスレにもいた半角使いのキチガイ野郎かな?
みんな、こいつの味方するの?w
2018/09/01(土) 19:10:41.10ID:mPcVbgud
>>578
オプション(引数)解析の話を
ずーっと続けてますよw
2018/09/01(土) 19:17:26.68ID:HKyHRnHf
>>568
その理論について詳しく教えてくれw
2018/09/01(土) 19:20:00.37ID:mPcVbgud
>>581
>>553
2018/09/01(土) 19:22:31.10ID:4jvmXnIZ
ム版来たせいで、ム版名物の半角君も長文君も呼び寄せちゃったか…
2018/09/01(土) 19:25:33.74ID:HKyHRnHf
>>568
理論って何?www
理論って言葉使いたくなっちゃったのかな?www
2018/09/01(土) 19:27:13.01ID:mPcVbgud
>>583
その「長文君」がム板に来る流れを作った張本人という可能性は考えないのかい?w
2018/09/01(土) 19:54:56.43ID:HKyHRnHf
>>568
理論ってどんな理論なんだろう?www
プークスクスwww
2018/09/01(土) 19:55:19.76ID:4jvmXnIZ
嫌われ者の長文君ち〜ッス
2018/09/01(土) 21:04:14.49ID:2NCbxz5b
>>583,587
その二人ともなぜか 俺だけ 優秀と思っている不思議さwだから嫌われ者同士でも互いに嫌ってるのかww
589デフォルトの名無しさん
垢版 |
2018/09/01(土) 22:34:21.93ID:/wwW4VSs
オレが優秀なワケじゃない
オマエが健常者じゃないだけだからな

まずそこを自覚しないといけない

そこを勘違いしたらダメなワケ
オツムに軽度の障害があるとみなせるぐらい知能に問題がある
2018/09/01(土) 22:59:24.12ID:2NCbxz5b
別にそういう個別特定なのはいいのねん
お前には俺(のレス)がそう見えるというのはお前の価値観からそう見えるのはしょうがない
だがしかし、お前の場合はレス個別に対してじゃないのもあるからな。不特定多数のも。自称健常者は敵が多いからなのか??w
2018/09/01(土) 23:12:57.65ID:2NCbxz5b
wwww いや、笑った。すげえなww
低学歴 知恵遅れ 健常者じゃない と、どこのスレでもどのレスでもそういう言葉があるな。すごいなww
ちょっと頭のおかしな人が道中をぶつくさ他人に悪態ついてるのと似てると思うけどなあ。「健常者」なんて普通使わないと思うけど、もしかしたらマジ病気のひと?ww
普通に会話、普通のレスできないの?あったとしたらすまん、あまりにもあういうのばかりで見逃したかもw
592デフォルトの名無しさん
垢版 |
2018/09/01(土) 23:17:02.98ID:/wwW4VSs
オレと会話したいの?

残念なことにな、知恵遅れとまともな人間のあいだでは
会話が成立しない

プロトコルが違う

オレと会話したいなら
まず相応のプロトコルを身につけてからだ
2018/09/01(土) 23:17:24.80ID:mPcVbgud
他スレで長文書いてたw まあ話は進んでないみたいだが
https://medaka.5ch.net/test/read.cgi/php/1474523013/854
https://mevius.5ch.net/test/read.cgi/hp/1533007852/229

今更だがsedって意外と便利に使えるのな。正規表現による範囲指定とか
s///使った単なる置換ぐらいにしか使ってなかった。
書いていたコードが短くなりそうで嬉しいw
2018/09/01(土) 23:18:54.31ID:J8s4Euww
長文はキチガイ
2018/09/01(土) 23:41:04.17ID:Z9gelboG
yesコマンドってPOSIXユーティリティじゃないのか……。
2018/09/01(土) 23:46:09.11ID:2NCbxz5b
>>592
会話のためじゃなかった、なんの為に数々のレスしているの?君は
まあ、自己顕示欲承認欲求からだけだろうなというのは、数々のレスからは垣間見えるけど、そういうことなのね、そういうことでいいのねw
597デフォルトの名無しさん
垢版 |
2018/09/02(日) 00:04:43.96ID:Tb3tt8fk
この板をまともな板にするために
この板でレスしてる

オマエみたいな頭悪い低学歴知恵遅れが幅きかせて
いま、この板は正常に機能してない

低学歴知恵遅れは低学歴知恵遅れの自覚がない
しかも自己評価だけは高い
その分タチがワルイ
まともな人間が近寄らない

そしてその自覚すらない
その自覚がないから更生もしない
つまり更生することもないから排除しかない

つまりオレは
素晴らしく情報価値が高いレスを提供すると同時に
この板から低学歴知恵遅れのクソニート、底辺ITドカタを排除する作業を実施している

わかった?

まともな板にするためにな
ひたすらオレはレスをしている

わかった?
2018/09/02(日) 00:12:57.53ID:elP7igYW
やっぱり移動先はLinux板にしといたほうが
良かったんじゃねーの?w
2018/09/02(日) 00:14:17.23ID:fQwovzZh
>>597
>この板をまともな板にするために
wwwww マジでっ!?
その言っているのは、いろいろ自分にも当てはまるだろうと思うんだけどな

自己顕示欲承認欲求と見なされるのは嫌らしいというのだけはわかったよw
600デフォルトの名無しさん
垢版 |
2018/09/02(日) 00:15:05.38ID:Tb3tt8fk
当然、オマエも排除の対象だ
2018/09/02(日) 00:16:13.74ID:fQwovzZh
「排除」www すげええええっwwww
いや、怖い...w
2018/09/02(日) 00:16:18.96ID:CFWyulsd
>>595
これは yes って返せばいいのか!?
603デフォルトの名無しさん
垢版 |
2018/09/02(日) 00:17:25.68ID:Oiltae2A
俺の目の黒いうちはまともにはさせんから安心しろ
2018/09/02(日) 00:17:46.37ID:8TU9g+nX
お前も駆逐してやる
2018/09/02(日) 00:24:56.83ID:elP7igYW
>>602
yじゃね?
2018/09/02(日) 00:27:05.66ID:elP7igYW
どうでもいいけど、
yesコマンドって

1. なんに使うんだ?
2. なるほど(使いみちを聞いて)
3. いつ使うんだ?(使ったことがない) ← みんなこの状態だよな?w
2018/09/02(日) 00:28:33.57ID:fQwovzZh
>>606
まったくもって、まんまだなw
2018/09/02(日) 00:40:01.27ID:elP7igYW
だいたい、-yオプションとか、-fオプションとか、-qオプションがあるからねぇ

おっとまたオプションの話だw

オプションついでにいうとtarとかpsってなんでハイフンなしで
tar czvf とか ps aux とか書くんだろう?
ちょっと調べたら昔の仕様?らしいけど

今はtar -czvf とか ps -aux とかできるみたいだけどさ。
まあ今はハイフンなしオプションのことを考慮する必要は無いだろうけど
それに対応したライブラリ(getoptsみたいなの)ってあるんだろうか?
609デフォルトの名無しさん
垢版 |
2018/09/02(日) 02:09:13.86ID:4Jf6YH6e
>>608
ないのでは? tar の場合はハイフンなしの Old style のオプション指定されていたら
まずはハイフン付きに置き換えてから解釈しているらしい。
https://qiita.com/junjis0203/items/6bb48184b508045e69da
610デフォルトの名無しさん
垢版 |
2018/09/02(日) 06:17:08.93ID:667Fbrpy
>>609
すごいな。一発で持ってくるとは
でもID:elP7igYWみたいな馬鹿を相手にするなんてもったいない……。
2018/09/02(日) 09:16:59.93ID:elP7igYW
>>609
なるほど。

初期(いつ?)の頃ってコマンドの開発どうだったんだろうね
ハイフンなしのオプションはしばしば用いられていたのか?

どんなコマンドも最初の実装ってのは存在するわけで、
それが今とどう同じなのか違うのか少し気になってきた
2018/09/03(月) 09:07:41.26ID:Phd/3F0T
俺、数百行クラスになったら静的言語にするから、
シェルスクリプトどころかrubyもpythonも使わない。
数百行にもなると書き捨てって規模じゃないし、
静的型検査なしで書くのは面倒くさい。

あとJavaScriptには現代的言語の持つ抽象化機能があらかたあるから、
連想配列も構造体相当品もないシェルスクリプトと同列に並べるのはJavaScriptに失礼。
2018/09/03(月) 09:13:23.99ID:Wp4QdYvu
シェルスクリプトでcのソースを書くのはちょっと面白い。
2018/09/03(月) 09:52:05.06ID:WkDP4f9E
>>613
どういう意味?
メタプログラミングみたいな?
2018/09/03(月) 10:26:05.35ID:cQ/Qcp18
>>612
大変やね。たまには数十クラス程度のものを作っても良いんやで
2018/09/03(月) 11:13:52.71ID:Phd/3F0T
>>615
そういう小規模なプログラムばかり書いてたらもっと動的言語を
使ってたかもしれないなあ。
就職して最初のプロジェクトがいきなり100万行オーバーのCプログラムの
大規模改造とかで、それ以後も数十万行クラスのプログラムばかり
触ってきて、ちょっと規模が大きくなると処理系の検査に頼る
習慣がついてしまった。
2018/09/03(月) 11:21:30.86ID:IWP2OX+N
>>616
うん、仕事でしかプログラミングしてないんだろうな
ってのはすぐにわかったよ。

1から作ったことがあれば、いきなり数百クラスに
なることなんて無いからね

保守的な開発しかしたこと無くて、
小さなシステムの組み合わせで大きなものを作るという発想がない
古臭いものメンテナンスしかしたことないんだろうなと
2018/09/03(月) 13:56:12.52ID:Phd/3F0T
>>617
あれだけの情報で趣味プログラム書いてないってわかるなんてスゴイ⤴⤴
その推理フツーに間違ってるがw

そもそも小さなプログラムだって普通に書いてるし、だからこそシェルスクリプトスレに来てるわけで、
大きなプログラムしか書いてないとするとその時点で矛盾するじゃん。

自己矛盾した推理を前提に話を進めるとか、同僚にいたら困りそうなタイプだなあ。
2018/09/03(月) 14:47:29.83ID:IWP2OX+N
>>618
いや、そもそもお前の発言が矛盾してるんだって。

↓これお前の発言な
> 俺、数百行クラスになったら静的言語にするから、
> シェルスクリプトどころかrubyもpythonも使わない。

数百行クラスになったら静的言語ってことは
数百行クラスになる前はどうしてるんだって話だよ
2018/09/03(月) 19:06:52.08ID:HxI+JP9z
>>619
> 数百行クラスになったら静的言語ってことは
> 数百行クラスになる前はどうしてるんだって話だよ

え、そこに矛盾はまったくないんだけど、マジでホントに分からないの?
明日の19時くらいまで待ってあげるから自分で考えてみた方がいいぜ。

降参すればもっと早く答を教えてあげるけど、こんな当たり前の話、ホントに分からないとするとそれはそれでまずい気がする。
2018/09/03(月) 19:27:06.50ID:HpF+lD7Q
おまいら、自分の書き込みが変に解釈された事の方を問題視しろよ。
相手が客だった場合、どんなに釈明しようが上司はお前が悪いとしか言わんぞ。
2018/09/03(月) 19:33:15.32ID:HxI+JP9z
>>621
え、もしかして君も分からんの?
客ならともかく、プログラマーならこんなの分かって当然だと思ってたけど、そうでもないんかな。

まあ明日の19時過ぎたら答は書くよ。
2018/09/03(月) 20:06:42.29ID:IWP2OX+N
上の方でもプログラマを自称しながら、アマチュアっぽいやつがいたからなぁw
まあ、明日なにか言おうとしてるみたいだから、何も言えなくなるように
大規模アプリを作るときの鉄則を言っておくよ。

まず大規模アプリを作るときに重要なのは細かくモジュールに分けましょうということ
モジュールという言葉の意味は文脈で微妙に異なるけど、きっちり定義したいわけじゃなく
小さなプログラム、小さなファイル、小さなクラス、小さな関数等に分けましょうという話

これをやっておかないと、例えばC言語のHello Worldであっても、
printfの複雑な実装を、一つのファイルに全部書かないといけなくなくなって
数百行なんてあっという間に超えてしまう

>>612は数百行程度で静的言語にするとか言ってるが、
俺に言わせれば、大規模アプリであっても"1モジュール(最小単位の関数)"で
数百行なんてめったになることなんてないだろうと。

まあ、どうせ >>612はプロジェクト全体で数百行と言ったつもりなんだろうが、
お前は単体テストできるようにしてないのかと。それぞれ独立して考えられるように設計しろよ。

小さなモジュールを組み合わせて作るんだから、プロジェクト全体の行数で考えるのは意味ないんだよ。
Hello Worldでもプロジェクト全体という話ならprintfの実装も含めなきゃいけない。
でもブラックボックスとして扱ってるんだろ? それと同じで自分で作る場合もブラックボックス化させればいいんだよ
つまり小さなモジュールに分けて作れば、静的言語でなくとも大規模アプリは十分作れるわけだ。
もちろんシェルスクリプトであってもね

もし「シェルスクリプトは上から下へ流れるように作るのが普通なんだ。
関数なんて作ってはいけない、複数のファイルに分けたりしてはいけない、複数のスクリプトに分けるのも禁止
だから大きなものは作れないんだ!それが世界の常識なんだ!!」という理屈であれば、
それは頭が固いお前の思い込みが、大きな物を作れない根本原因だろ。ってこと

結局プログラマを自称しているようだが、小さく分けるという設計ができない
アマチュアレベルの人間なんだろうって話だ
624デフォルトの名無しさん
垢版 |
2018/09/03(月) 20:11:02.86ID:lS5Tq6xt
渾身の長文わろたw
2018/09/03(月) 20:13:45.46ID:IWP2OX+N
まあいつものことだなw
626612
垢版 |
2018/09/03(月) 20:30:39.38ID:HxI+JP9z
やっぱり例の人だったかw
しかも長文の割に
(a) >>612が別に矛盾したこと言ってないと分かった
のか、それとも
(b) 相変わらず>>612が矛盾してると思ってる
のかを書いてないように俺には思えるというwww

>>623 よ、お馬鹿な俺に、君の意見が(a)なのか(b)なのか教えてくれ。
2018/09/03(月) 20:40:49.84ID:IWP2OX+N
>>626
いや、別にお前にレスしてないしw
大規模アプリを作るときの鉄則を言っただけだし

明日の19時過ぎたら、なんか答え書くんだろ?
それを書いてくれればいいよ。
俺の文章読んで恥ずかしくないならね


まあ一つ言うとしたら、技術力の差ってやっぱりあるよな
他の人が動的言語できているという事実があるというのに
俺はできないんだ!ってよく恥ずかしげもなく言えるよなーと
628デフォルトの名無しさん
垢版 |
2018/09/03(月) 20:43:08.65ID:lS5Tq6xt
大規模アプリを作るときの鉄則www
なんやろ?www
2018/09/03(月) 20:43:49.57ID:IWP2OX+N
そうだ、ヒントをやろうw

俺、(1関数で)数百行クラスになったら設計が悪い思って作り直すから、
数百行クラスになることはない
2018/09/03(月) 20:45:19.54ID:RephN+2M
なんか一つ一つが長文でここ最近ずっとだらっと最下部までスクロールして閉じるを繰り返してるわ
631612
垢版 |
2018/09/03(月) 21:00:52.21ID:HxI+JP9z
これはアレですね。
(a)と答えると自分の間違いを認めることになって耐えられないし、
(b)と答えると明日の19時以降に赤っ恥を書くことになるしで、
(a)とも(b)とも答えられないってヤツですねw

分かりやすい。
自分の間違いを認めると死んぢゃう病に罹患中って奴だw
632デフォルトの名無しさん
垢版 |
2018/09/03(月) 21:09:15.31ID:E2St7m4+
個々の簡単な完結した機能の簡単なシェルにしといたほうが
単体試験仕様書の設計も簡単
結合試験仕様書の設計も簡単
総合試験仕様書の設計も簡単

知恵遅れが作ると試験による検証すらできないシステムができあがる
2018/09/03(月) 21:12:48.08ID:IWP2OX+N
>>631
ん? 俺は間違ってないんだから、必然的に(b)ということになるな。
はい、明日の19時待ってますよw
2018/09/03(月) 21:13:14.86ID:IWP2OX+N
>>632

>>2を読め
>・シェルスクリプトのことをシェルってゆうな
2018/09/03(月) 21:14:05.20ID:ttVcJTrG
TypeScript・Haxe の違い

大規模開発なら圧倒的に、Haxe
636デフォルトの名無しさん
垢版 |
2018/09/03(月) 21:17:55.11ID:lS5Tq6xt
>>634
おまえ大規模アプリを作っとるんやろ?そうゆう初心者くさい事ゆうなよwwww
ちょっとだけ失望したわw
2018/09/03(月) 21:27:46.12ID:zLYH5Np3
すげーなこのスレ。
とうとうrubyガイジも呼び寄せたぞ。
オールスターじゃん
2018/09/03(月) 21:28:01.12ID:IWP2OX+N
作業していて気づいたんだが >>537-538
どういう場合にシェルスクリプトが適しているかの話

少し毛色が違うが、コールバックの仕組みを取り入れるなら
必然的にシェルスクリプトで書かなければいけなくなるな

つまり
1. 簡単なことをやるためにシェルスクリプトを使う
2. だけど中身で一部複雑な処理があるので、そこだけ別コマンドを使う
3. その別コマンドから、シェルスクリプトに定義したコールバック関数を呼び出す

というようなことをやろうと思ったが、2の「別コマンド」がシェルスクリプト以外(正確には別プロセス)だと
シェルスクリプトに定義したコールバック関数を呼び出せない

つまりPerlで書くならば以下のような感じで、正規表現置換をsedコマンドで
実行してしまったら、(スクリプトの内部関数である)foo関数を呼び出すことができない

sub foo { uc($_[0]) }
$text = 'abcdefg';
$text =~ s/([a-c])/foo($1)/eg;
print $text;
2018/09/03(月) 21:28:41.85ID:RephN+2M
さすがの総合スレ
2018/09/03(月) 21:33:19.27ID:IWP2OX+N
どうでもいいが(俺にとってはどうでも良くないが)
sedとawkとgrepとexprで使える正規表現のパターンが違うのって地味に嫌だなw
もし1から仕様を決められるなら、全部統一されるんだろうな。
HTML5みたいに一度足並み揃えた仕様にリセットされてほしい
2018/09/03(月) 21:51:24.51ID:IWP2OX+N
sedの非互換性も辛い・・・というかGNUが便利すぎなんだろうな
2018/09/03(月) 22:05:03.93ID:5Vmu1cpr
>>641
最近知ったのだが、GNU awk に ARGIND という組み込み変数が
あってエラい助かった
643デフォルトの名無しさん
垢版 |
2018/09/03(月) 23:01:37.14ID:E2St7m4+
もうコタエは書いたからな
次の患者さんどうぞ
2018/09/03(月) 23:24:25.75ID:O250GQ8L
誰がどう見ても患者はお前だろ。精神の
2018/09/03(月) 23:39:11.39ID:YrDXnGw5
>>643も精神のという意味だろう。この読めなさはw
646デフォルトの名無しさん
垢版 |
2018/09/03(月) 23:57:12.64ID:E2St7m4+
キミラは重篤な患者さんだからな
しょうがない
2018/09/03(月) 23:59:36.46ID:IWP2OX+N
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.37ID:gZnu4stV
ココは隔離病棟の集中治療室
2018/09/04(火) 01:03:24.22ID:zS1fHlcp
自覚はあるんだな
2018/09/04(火) 06:08:51.64ID:fH4o5qCk
ホールドスペースをバリバリ使ってた。使いこなしてたかはともかく…
20 年以上も前のことだから、もうできない。
2018/09/04(火) 08:53:12.61ID:jvRjWg/I
ホールドスペースやブランチを使いたくなったらsedやめて他の言語使えって、Macで女子高生が話してた。
2018/09/04(火) 08:53:37.92ID:ROt4XEkp
sedがなんで分かりづらいかの理由がわかった
b(とt)の解説が悪いんだよ。

たいてい、b・・・無条件ジャンプのように書いてあるから
これだけでどうやってフロー制御すりゃいいんだよ?ってなる

正確にはこれ、条件分岐なんだな。ニュアンス的にはこんな感じ
/条件/b :label

bの前はアドレスってことだが、正規表現でもアドレス指定できるから
これを条件とすれば、条件分岐となる。

だけどアドレス(条件)はすべてのコマンドで使えるものだからなのか
そのコマンドの説明のところで省いてしまうから、解説だけを読んでも
ジャンプはあるが条件付きジャンプがねーじゃねーかってなるわけだ

条件文があるならあとは簡単だ。普通の手続き型のコードだわ
2018/09/04(火) 09:49:28.21ID:+CEwKGA5
"Commands which accept address ranges" って書いてあるやん…
2018/09/04(火) 10:20:13.70ID:ROt4XEkp
>>653
アドレスの範囲を受け付けますって遠く離れた所に書いても
それが条件として使えるとは気づきにくいって話
2018/09/04(火) 11:30:26.75ID:+CEwKGA5
>>654
数行上に書いてあるで
2018/09/04(火) 12:17:38.09ID:ROt4XEkp
>>655
何度も同じことを言わせないでくれ
2018/09/04(火) 13:15:59.22ID:+CEwKGA5
実際には3行上だった
2018/09/04(火) 18:17:39.81ID:i2l0SoWn
>>652
そこは、素人お断りですw よく読みましょう。
This is just a brief synopsis of sed commands to serve as a reminder to those who already know sed
659612
垢版 |
2018/09/04(火) 19:19:21.04ID:GKTPwsNb
19時過ぎたから答を書く。

言っておくがチョー当たり前のつまらん話だよ。

・短いプログラムは、シェルスクリプトやruby/pythonなど動的型付き言語で書くことが多い
・拡張していくうちに、これ以上長くなったら静的型付き言語で書いた方が楽そうだと思ったら、まるまる静的型付き言語で書き直す。あまり長くなると書き直しも面倒になるから、早めに手を打つ。
・長くなりそうだと初めから分かっている場合は、もちろん最初から静的型付き言語で書く

ってだけだよ。

静的型付き言語使いにはわりとよくある開発形態のはずだが、なんで>>612が矛盾してるなんて結論に至るのか。
2018/09/04(火) 19:33:33.93ID:FEVdkErP
とりあえずここまでレス飛ばしてきたんでまとめを頼む
661612
垢版 |
2018/09/04(火) 19:43:12.33ID:GKTPwsNb
>>660
俺が>>612
「数百行くらいのプログラムになると、俺の場合は静的型検査がないと面倒くさいので、静的型付き言語で書く」
と書いたら、いつもの人が例のごとく謎の難癖をつけてきたってだけの話。

別に「全員がそうすべき」って書いたわけじゃなくて
あくまで「俺にとっては面倒くさい」って書いただけなのに、どうも許せないみたいだな。
難癖は全然反論になってないので読む必要はない。
2018/09/04(火) 19:43:56.78ID:FEVdkErP
把握
663612
垢版 |
2018/09/04(火) 19:53:45.96ID:GKTPwsNb
あ、>>612の「数百行クラス」ってのを
「(オブジェクト指向言語の)1つのクラスのコードサイズが数百行」と誤解されたようではあるな。
これは俺の表現も誤解を招くものではあった。
単に「1プログラムのコードサイズが数百行くらい」って意味で書いてたんだけどね。

まさかシェルスクリプトスレでオブジェクト指向のクラスのことだと解釈されるとは思わなかった。
2018/09/04(火) 21:01:45.22ID:wTvbP50/
>>612
興味本位で聞くんだが、数百行って具体的にはどの範囲をイメージしてる?〜500程度?
あと静的型付けって何使ってる?
665612
垢版 |
2018/09/04(火) 21:24:00.90ID:GKTPwsNb
>>664
500行を越えるぐらいからかな。
常にその原則を守ってるわけでもなくて、不特定ユーザーに配布するスクリプトではBourne shellで3000行ぐらいのをメンテしてたりもする。
これは規模的に結構辛い。orz

言語は最近はCrystalを試してる。
まだ書き慣れたって段階には達してないけど。
2018/09/04(火) 21:57:53.47ID:wTvbP50/
>>665
俺は数百行って聞くと2、300をイメージするから、どのぐらいか気になった
crystalとは・・・俺は1.0も出てないものは使えんなあ

うちは処理結果が揮発で良いなら基本bash/pythonを使ってる
2018/09/04(火) 22:13:29.28ID:ROt4XEkp
>>659
やっぱり矛盾してるじゃんw

1. 俺、数百行クラスになったら静的言語にするから、シェルスクリプトどころかrubyもpythonも使わない。
2. 短いプログラムは、シェルスクリプトやruby/pythonなど動的型付き言語で書くことが多い
3. 拡張していくうちに、これ以上長くなったら静的型付き言語で書いた方が楽そうだと思ったら、まるまる静的型付き言語で書き直す。

では、長くならない場合は?
シェルスクリプトやrubyもpythonを使うんだろw
2018/09/04(火) 22:15:09.44ID:ROt4XEkp
>>665
> 常にその原則を守ってるわけでもなくて、不特定ユーザーに配布するスクリプトではBourne shellで3000行ぐらいのをメンテしてたりもする。

小さく分けようぜw
ファイルを分けたり、関数にすりゃ、
たった3000行なんて十分メンテ可能だろ
2018/09/04(火) 22:15:31.25ID:dB7ca3M3
やはりワッチョイいるな
2018/09/04(火) 22:18:59.76ID:ROt4XEkp
>>663
> まさかシェルスクリプトスレでオブジェクト指向のクラスのことだと解釈されるとは思わなかった。

自分でrubyやpythonも使わないって言ったんだろw
自分でオブジェクト指向の言語だしといて何いってんだよ

結局最初に予測したとおり、大きな(それほど大きくもないがw)
プログラムを作るときの、小さなモジュールで作るってことを知らないだけじゃん
671612
垢版 |
2018/09/04(火) 22:45:12.74ID:GKTPwsNb
>>667
> では、長くならない場合は?
> シェルスクリプトやrubyもpythonを使うんだろw

勿論そうだよ。

> やっぱり矛盾してるじゃんw

> 1. 俺、静的言語にするから、シェルスクリプトどころかrubyもpythonも使わない。

「シェルスクリプトどころかrubyもpythonも使わない」ってのが「数百行クラスになったら」に限定された記述だってことに気づかないあたりが君の鈍いところ。
初見で気づかないのはまあ元の文が多義的に解釈できるから仕方ないとしても、
この期に及んで気づいてないのは致命的かな。
672612
垢版 |
2018/09/04(火) 22:52:14.96ID:GKTPwsNb
>>668
> 小さく分けようぜw
> ファイルを分けたり、関数にすりゃ、
たった3000行なんて十分メンテ可能だろ

勿論分けてるよ。
シェル関数も使ってるし、1ファイル500行を越えるモジュールはない。
まったく同じようにモジュール化しても、静的型付き言語に比べて
動的型付き言語は人間にかかる負担が大きいってのが
>>612の趣旨なわけだが、君は相変わらずそのことに気づいてないんだな。

それなりのプログラマーであれば、動的、静的と言った瞬間にこの趣旨に気づくはずなんだが...
2018/09/04(火) 23:01:52.48ID:ROt4XEkp
>>672
(全てのプログラムは)長くなるからシェルスクリプトどころかrubyもpythonも使わない
って言っただろ?

長くならないプログラムがあって
「その場合はシェルスクリプトやrubyもpythonを使ってる」というのなら、
明らかな矛盾。使わないと言っておきながら使ってると言ってる。


>>671
負担が大きいから何だって言うんだ?
負担の大小ではなく、管理可能かどうかだろ

現実見てみろ。動的言語でも全体で何万行もあるシステムは作れている
お前が作れないのは単にお前の能力不足でしかない

その事に気づいたようで、動的言語では作れないんだというニュアンスから
負担が大きいに言い換えたようだが、バレバレだw


最初(>>623)に言っておいたとおり、プロジェクト全体の行数を考えるのは意味がない
> 小さなモジュールを組み合わせて作るんだから、プロジェクト全体の行数で考えるのは意味ないんだよ。

小さいモジュールのあつまりで作ればいいだけの話
小さいモジュールの集まりで作るから、
> 小さなプログラム、小さなファイル、小さなクラス、小さな関数等
は長くならない
2018/09/04(火) 23:05:52.86ID:ROt4XEkp
シェルスクリプトの話に戻すならば、
頭が固い人のたわごとは無視して、
複数のファイルで作れば良いってことなんだよ

もちろん、100行のコードと、
100行の10個のファイルだと後者のほうが
複雑だが(そりゃコード量が増えてるからな)

100行の10個のファイルの動的言語と
100行の10個のファイルの静的言語の
複雑度は変わらない
2018/09/04(火) 23:06:43.34ID:ROt4XEkp
行とかいたら、コメント含めたりするかw
一応実行行(ステップ数)と言い換えておく
676デフォルトの名無しさん
垢版 |
2018/09/04(火) 23:14:44.94ID:RaX7EawA
この話オチあるんか?
2018/09/04(火) 23:17:47.09ID:ROt4XEkp
>>676
さあなー。能力が低いのを言語のせいにしてるだけだしね。

そういや、連想配列がなかったらプログラム作れないと
言ってる人がいるがC言語には連想配列はない
2018/09/04(火) 23:20:18.74ID:ROt4XEkp
C言語に連想配列はなくても、誰かが作ったライブラリはある
そう考えると>>571の結論に戻る

> まとめると、現在のシェルスクリプトが大規模開発に向いてないのは
> フレームワークやライブラリが不足しているから。
> 俺がシェルスクリプトで大規模開発をやらないのは、
> シェルスクリプトが適した内容で大規模なものを思いつかないから。
> それはそれとして中規模を小規模にするためのフレームワークやライブラリは欲しい。
2018/09/04(火) 23:25:36.88ID:lJV/Mb/R
>>678
>誰かが作ったライブラリはある
それは具体的にどこにあるのですか?
それを見つけたとして、それを自分のプログラムに適用できるかどうか判断できるのですか?

単に(論理的に)存在すること、だけを言及しても意味がないと思いますけれども
2018/09/04(火) 23:26:38.84ID:ROt4XEkp
C言語用連想配列の話?
2018/09/04(火) 23:27:47.89ID:ROt4XEkp
http://d.hatena.ne.jp/fd0/20080419/p1

glibc
言わずと知れた GNU の標準 C ライブラリ。search.h というヘッダがあり、
その中にハッシュテーブルを管理できる API が提供されている。


glibcなら誰でも知ってるだろう
682612
垢版 |
2018/09/04(火) 23:29:35.30ID:GKTPwsNb
>>673
どうも君は健忘症みたいだから>>612から引用してあげるね。

> 俺、数百行クラスになったら静的言語にするから、シェルスクリプトどころかrubyもpythonも使わない。

「数百行クラスになったら」って書いてますね...
相手の発言を確認せずに「全てのプログラムは」とか言っちゃうの、仕事でやったら信用失うから今後は気をつけた方がいいと思うよ。

> 静的型検査なしで書くのは面倒くさい。

はい、「動的言語では作れないんだというニュアンス」なんて全くないですね。
動的言語だと「面倒くさい」って書いてるだけでした。

仕事でもこんな調子でコミュニケーションしてるのかなあ。

> 小さいモジュールの集まりで作るから、

せっかく「まったく同じようにモジュール化しても、静的型付き言語に比べて動的型付き言語は人間にかかる負担が大きい」って書いてあげたのに読めてないんだね。
モジュール粒度が同じでも、動的型付き言語と静的型付き言語では、人間の負担するコストに違いがあるんですよ。
683612
垢版 |
2018/09/04(火) 23:32:47.66ID:GKTPwsNb
search.h のハッシュ関数は別にglibc依存じゃなくてPOSIXだよ。
日頃POSIX POSIX言ってるけど、シェルスクリプトの範囲しか知らない人かな。
2018/09/04(火) 23:33:18.38ID:ROt4XEkp
>>682
> 「数百行クラスになったら」って書いてますね...

だから矛盾してるんだよ。

「条件付きの結論」っていうのは、その結論(シェルスクリプトやRubyやPythonを使わない)が
正しいのはあくまで条件を満たされている場合であって

条件を満たさなければ、シェルスクリプトやRubyやPythonを使うということになる
2018/09/04(火) 23:34:16.08ID:ROt4XEkp
>>683
> search.h のハッシュ関数は別にglibc依存じゃなくてPOSIXだよ。

いつ俺がPOSIXじゃないって言ったんだ?
「glibcで提供している」と書いてあるブログを持ってきただけだろ
2018/09/04(火) 23:34:31.63ID:ROt4XEkp
ほんとどうでもいいところにばっかり突っ込むよなw
2018/09/04(火) 23:36:12.99ID:idomDZwg
お前がな
2018/09/04(火) 23:36:56.71ID:ROt4XEkp
>>682

> せっかく「まったく同じようにモジュール化しても、静的型付き言語に比べて動的型付き言語は人間にかかる負担が大きい」って書いてあげたのに読めてないんだね。
> モジュール粒度が同じでも、動的型付き言語と静的型付き言語では、人間の負担するコストに違いがあるんですよ。

だから、負担が大きいが、別に作れるだろって話

お前は極端なんだよ。規模が大きくなったときのことで悩んで、負担が大きいから使わないと
規模を大きくしなければ済む話なのに、それに気づいていない

まあ行数が同じなら、負担なんて大して変わらんがね。
動的型付き言語で大変なら、静的型付き言語でも大変
689612
垢版 |
2018/09/04(火) 23:39:09.68ID:GKTPwsNb
>>684
君には日本語の勉強をお勧めしておく。
2018/09/04(火) 23:40:26.52ID:ROt4XEkp
お前がな
691デフォルトの名無しさん
垢版 |
2018/09/04(火) 23:41:11.31ID:gZnu4stV
隔離病棟はものすごいことになってる
2018/09/04(火) 23:41:41.00ID:ROt4XEkp
>>612の正しい日本語を書いておくよ

俺、数百行クラスにならないときは動的言語にするから、
シェルスクリプトやrubyもpythonも使う
2018/09/04(火) 23:42:22.29ID:+CEwKGA5
元の板に戻ったほうが良いんじゃないかな
2018/09/04(火) 23:42:47.42ID:Gq1Hay5m
キチガイに触んなすな
695612
垢版 |
2018/09/04(火) 23:43:57.27ID:GKTPwsNb
いや、IDがないともっと悲惨だよ、これ。
次スレはワッチョイもつけた方がいい気がする。
2018/09/04(火) 23:44:19.45ID:ROt4XEkp
>>693
そういう可能性も考えて、元の板にも
スレ立てといたんだがねw

サマータイム導入に気をつけろよ
ローカルタイム使ってると同じ日時が
2回でてくることになるぜ
697612
垢版 |
2018/09/04(火) 23:44:37.68ID:GKTPwsNb
>>694
すいません、以後控えます。
698デフォルトの名無しさん
垢版 |
2018/09/04(火) 23:46:10.08ID:gZnu4stV
懸命に手を尽くしたましたが
手の施しようがありません
2018/09/04(火) 23:47:02.77ID:ROt4XEkp
>>695
ワッチョイついてるスレでの俺の活躍を見よ(笑)

Git 16©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1502726047/458-
700612
垢版 |
2018/09/04(火) 23:47:07.77ID:GKTPwsNb
やっぱり前スレの荒らしおよび、UNIX 板で後から意図的に重複スレ立てた人物だったんだね。
まあそうだろうとは思ってはいたが。
2018/09/04(火) 23:48:37.75ID:ROt4XEkp
>>700
ひどいな。ネタに決まってるじゃないか
702デフォルトの名無しさん
垢版 |
2018/09/04(火) 23:50:01.24ID:gZnu4stV
なるほどサマータイムスレであばれた低学歴知恵遅れの一部で
マジキチだったヤツか
2018/09/04(火) 23:50:48.48ID:zILy+Zrq
迷惑なスレの乱立は
ID:ROt4XEkp の仕業だったんだな
2018/09/04(火) 23:50:57.04ID:ROt4XEkp
それは半角使うやつだろ
はっ!お前半角使ってるじゃん!
705612
垢版 |
2018/09/04(火) 23:51:43.34ID:GKTPwsNb
福岡県かあ。関東かと思ってたが違ったんだな。
706612
垢版 |
2018/09/04(火) 23:53:33.54ID:GKTPwsNb
>>703
前々からそうじゃないかと思ってたが、やっぱりでしたね。
2018/09/04(火) 23:55:45.20ID:ROt4XEkp
>>705
実はもう一つプロバイダ持ってるw
そっちはホスト名調べても県名がでない

予備回線で昔(10年以上前)は大手プロバイダでも時々回線異常発生してたんで
持ってたんだけど、最近は使わないからやめようかと思ってるけどね
もう2ちゃんねるでスレ立てるするときにしか使ってないしw
2018/09/04(火) 23:56:24.91ID:ROt4XEkp
んで、元の板に戻るのかどうか?
俺はどっちでもいいよ
2018/09/04(火) 23:58:49.53ID:ROt4XEkp
ワッチョイ板でも書いたけど日付変わったらIPアドレス変更するよ!
攻撃しないでね!(まあやっても無駄だけど)
2018/09/04(火) 23:59:32.47ID:ROt4XEkp
(まあIPアドレス変わっても書き込み内容が独特なのでストーキングしていればすぐに分かる)
711612
垢版 |
2018/09/05(水) 00:01:43.69ID:D7naH2YM
これだけ荒らしておいて、まだUNIX板に戻る選択肢があると思ってるとは...
絶対に戻らないっことが、今回の
件でさらに強固になっただけだね。
そして ID:+CEwKGA5 はもう一つのプロバイダーを使った自演だったというわけだ。
2018/09/05(水) 00:05:18.62ID:NuDqxS96
疑心暗鬼(笑)
2018/09/05(水) 00:33:48.24ID:uppndDPA
まず馬鹿ガイキチには叶わないっていう如実なサンプルってことで、以後ID:ROt4XEkp とわかったら途中でも終了スルーでいいだろう
2018/09/05(水) 03:10:59.07ID:mw/V56zA
元に戻るってのはID無くすってことだぞ
全く解決になってない
解決ってのはワッチョイなりIPなり表示させることだ
2018/09/05(水) 09:56:32.93ID:NuDqxS96
a="abc" から最初の一文字を削除するのは
echo "${a#?}" でいけますが、
この削除した文字を取得する方法ってないですよね?
2018/09/05(水) 10:20:06.92ID:04P6tucf
>>715
そのままだと多分ないな
今手元にkshしかないから検証は出来んがbashだったら
echo "${a:1}"
echo "${a:0:1}"
で代用したらどうだ
2018/09/05(水) 10:33:50.47ID:NuDqxS96
bashはまあそれでいけますよね・・・

試しに文字列の長さを測って
(ループで空になるまで1文字ずつ消していけばわかる)

文字列の長さ-1個の??????・・・という文字列を作って
${a%????・・・} で文字列の後ろを削って1文字残す
というやり方でevalも駆使して取り出したけど、

このやり方で1文字ずつループさせたら
1KB程度の文字列で1秒かかってしまったw
これならたぶんsedで1文字ずつ改行させて処理したほうが速いだろうな
2018/09/05(水) 10:34:25.02ID:NuDqxS96
>>716
ついでに聞きたいんだけど、手元にkshしかない状況ってどんな状況?
2018/09/05(水) 10:36:03.21ID:04P6tucf
>>718
仕事中
2018/09/05(水) 10:36:40.11ID:jCw2sC+8
${a%${a#?}}
でいいのかな。dashでもとれてそう
2018/09/05(水) 10:40:24.63ID:04P6tucf
お、kshでも取れたわ
なるほど
2018/09/05(水) 10:48:45.20ID:NuDqxS96
>>719
あ、いや、どんな仕事をしているのかという
Linux、Macではないようだから
どんなOSを使っているのかとか
2018/09/05(水) 10:51:17.41ID:04P6tucf
>>722
あぁ、AIXだよ
2018/09/05(水) 10:51:44.08ID:NuDqxS96
>>720
それでもいけるように見えるんだけど
aの中にa*bとか入れてみたら動かない

動くパターン
a="abc"
echo "${a%${a#?}}"
=> a

動かないパターン
a="a*b"
echo "${a%${a#?}}"
=> a*
2018/09/05(水) 10:52:39.04ID:NuDqxS96
>>723
なるほど。そっち系はよくわからないな。
2018/09/05(水) 11:14:09.22ID:jCw2sC+8
特殊文字かあ。 ' で括ってで問題なさげ
${a%'*b'}
なので、こうかな
eval 'b=${a%'"'${a#?}'}"
2018/09/05(水) 11:18:19.46ID:jCw2sC+8
ああ、今度は ' が邪魔か。sedで
2018/09/05(水) 11:22:08.23ID:04P6tucf
変数展開にこだわると特殊文字がきついな
eval容認するならもうcutでいい気が
2018/09/05(水) 11:26:44.33ID:jCw2sC+8
なるほど
2018/09/05(水) 11:33:48.80ID:jCw2sC+8
あら。" で括ってでいいみたい?また、入れ子にちゃんとなってるの?{ } でちゃんとなってるのか
echo "${a%"${a#?}"}"
dashでも大丈夫みたいな
2018/09/05(水) 11:37:46.43ID:04P6tucf
シングルクォートで駄目でもダブルクォートはいけるのか…
2018/09/05(水) 12:19:13.88ID:NuDqxS96
あ、本当だ。パフォーマンス出るかな?
あとでやってみよう
2018/09/05(水) 12:30:25.22ID:NuDqxS96
>>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
2018/09/05(水) 12:32:33.02ID:NuDqxS96
evalはさほど変わらない

time sh -c 'for i in $(seq 100); do eval "echo" > /dev/null; done'

real 0m0.031s
user 0m0.000s
sys 0m0.016s
2018/09/05(水) 13:00:13.96ID:NuDqxS96
>>730
めっちゃ高速化したw

1506文字を>>717でやったら1.7秒だったのが0.1秒にまで減った。およそ1/10

もっとも4倍の約6000文字をやったら1.6秒にまでなったので、
文字列が長くなるにつれてどんどん遅くなるようだね。
コピーする文字が多くなるからだろう。

sedで1文字ずつ分解した場合は6000文字でも0.2秒だったので
長い文字列を1文字ずつ処理するならsed、もしくはそれ相当の何かを使ったほうが良さそう。
(シェル芸で有名らしい grep -o . は改行が抜け落ちる)
2018/09/06(木) 20:18:06.55ID:DUG5skog
macOSのbrewでインストールしたdashで
echo '!' って実行したら \! ってなぜか
エスケープされて表示されるんだけど誰か心当たりある?

printf '%s' '!' でも \! と表示される
2018/09/06(木) 20:33:38.49ID:DUG5skog
もう一つ

case '!' in
[\!]) echo OK ;;
*) echo NG ;;
esac

これを実行すると、kshだけNGって表示されるんだけどkshのバグ?
mkshだとOKなのに
2018/09/06(木) 22:05:19.31ID:DUG5skog
>>736はここじゃ知ってる人少なそうなんでこっちに移動しますね。

OS XをUnixとして使ってる人の為のスレ 18 [無断転載禁止]©2ch.net
https://egg.5ch.net/test/read.cgi/mac/1462475819/
2018/09/07(金) 03:14:55.87ID:SvYUtRYX
>>737
ブラケット内だけの特殊文字 ! (および ^) でのエスケープ対応が必須ならバグだし、言及してないとかだったら動作不定なだけだな
ブラケット内の ! と ^ でのエスケープが効く効かないの動作が違うのはcaseの場合だけじゃないよ
2018/09/07(金) 08:32:30.20ID:dfq99u5c
>>739

いろいろ挙動を調べたけど
1. ブラケット内で!のエスケープは必須ではないし、必要ない。
2. 多くの実装ではどんな文字でもエスケープできるため \! は ! と認識されるが、kshはそうではない
3. ブラケットの先頭に!をつけた、 [!・・・] は否定表現
4. 否定表現自体にはどの実装も対応している
5. 例えば[A]だとAにマッチだが、[!]だと否定表現として扱われる
6. kshでは[!]を否定表現として扱われるのを防ぐ方法がない
7. 普通は[]を使うときは2文字以上になるはずなので殆どの場合問題ない
 (ただし何かの処理で動的にパターンを生成している場合はありえる)

ってことなのかな?

ちなみにこれ、POSIXブラケット表現っていう名前なのかな?
2018/09/07(金) 08:42:27.12ID:SvYUtRYX
動的の場合もksh以外でもエスケープしなきゃならないんだから同じじゃね
[!] は文法上エラーのようなもんだから、そもそもブラケットで括らないとかなんかもう一文字入れて ! を2文字目にするとか
2018/09/07(金) 08:53:35.87ID:dfq99u5c
あー、動的っていうのは、
> そもそもブラケットで括らないとかなんかもう一文字入れて ! を2文字目にするとか
ということをしたいんだけど、
ここが設定ファイルに書かれている文字とかで
ユーザーが1文字を指定してしまった場合
とかいうことです。

まあ1文字なら[!]じゃなくて!にするようにすればいいんですが。

> 動的の場合もksh以外でもエスケープしなきゃならないんだから同じじゃね
ksh以外だとエスケープして [\!] と書けばOKですが、
kshだとエスケープして [\!] と書いてもNGという問題です。
2018/09/07(金) 09:02:06.16ID:SvYUtRYX
POSIXブラケット表現は違うんじゃないかなあ
ブラケットだけを何というのか知らんけど、パターンマッチング、ワイルドカード、グロブ定義のひとつかな。グロブがどうやららしいがそんな言葉使ったことないw
2018/09/07(金) 09:04:59.23ID:SvYUtRYX
>>742
細かく拘ってるけど、なに言いたいのかちょっとわからないねえ。本題と関係ないってことでいいね?
2018/09/07(金) 09:18:53.90ID:dfq99u5c
Bracket Expression
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05

ワイルドカードっていうのは仕様ではなく何にでも使える文字という意味でしか無く
globはファイル名に展開するもののことだと思いますよ
2018/09/07(金) 09:27:59.54ID:SvYUtRYX
じゃ、パターンマッチングでいいよ。めんどくさい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だけが違うというのもある)
2018/09/07(金) 09:40:21.51ID:dfq99u5c
あー、やっぱりバグな気がしてきました。
一旦変数に入れると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
2018/09/07(金) 09:44:26.93ID:SvYUtRYX
なんか「バグ」にこだわっているようだけど、バグだったらバグレポートでもする気なの??
bashの [a!] の場合の方が大きな問題のような気がしないでもないが、それもエスケープすればすむのでkshさえなのかな??
2018/09/07(金) 09:52:52.93ID:dfq99u5c
>>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

!は最初に持ってきたときだけメタ文字扱い(エスケープが必要)で
途中にあってもエスケープは必要ないみたいですね。
(むしろエスケープしないほうが良いみたい。後述?)
2018/09/07(金) 09:57:25.65ID:SvYUtRYX
ああ、すまん勘違いしてた。コマンドライン上での ! でのヒストリからの展開だった
2018/09/07(金) 10:04:32.56ID:dfq99u5c
!が最初以外にある場合に、\! とエスケープするとどうなるか?ですが挙動がバラけました。

[ -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

変数に入れない場合は、どちらも\はエスケープ文字列として認識されている
2018/09/07(金) 10:11:14.19ID:dfq99u5c
まとめると、どのシェルでも同じように動かすには

1. 可能ならば!は[]の最初に書かない
2. 1を満たしている場合には、!はエスケープする必要はない(しても良い)
3. !が[]の最初に書く場合は変数に入れてマッチングさせる
4. 3の場合には、!はエスケープする

というところでしょうか?
2018/09/07(金) 10:11:47.58ID:SvYUtRYX
んー、発表会なの??どうすんのかどう書くのかじゃないのか??
2018/09/07(金) 10:13:19.48ID:SvYUtRYX
! を文字としてなら、ブラッケットで括らない、他の文字があるなら2文字目以降にする
だけじゃないのかなあ
2018/09/07(金) 17:31:04.46ID:+cI6iexZ
>>736はへえと思ったけど他は正直どうでもいい
シェルによって違いはあるものだし同じシェルでもバージョンによっても違うかもしれないし
2018/09/08(土) 12:02:12.04ID:t/+GvP7Y
文字列の末尾がLFのものを別の変数に入れる場合、
b=$a ってするしかないかな?
b=$(foo "$a") ってやったら消えるよね

関数で処理した結果を変数に代入したいんだけど、文字列末尾のLFは消したくないし、
LFはない場合も複数個の場合もあるので無条件にLFつけたりもできない
2018/09/08(土) 12:14:51.45ID:S5S855ao
IFS
2018/09/08(土) 12:29:20.28ID:S5S855ao
IFS変更しなくてもb=$(foo "$a")ってやったら消えてないじゃん。"$a"ならば
2018/09/08(土) 12:57:29.41ID:t/+GvP7Y
消えますよ

[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|
2018/09/08(土) 13:25:21.83ID:wZDaW80s
foo() { printf '%s ' "$1"; } とすると挙動が変わるんだね
2018/09/08(土) 13:28:37.24ID:t/+GvP7Y
違う。$(・・・)をすると挙動が変わる(末尾のLFに全削除の効果)

foo "$a" だけなら末尾のLFは消えない
2018/09/08(土) 13:38:57.95ID:wZDaW80s
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.
2018/09/08(土) 13:54:13.20ID:t/+GvP7Y
そういやファイル名やディレクトリ名に改行を含めるべきかどうか
POSIXで議論してるみたいな話が上の方で書いてあったけど
名前の末尾に改行が含まれてる場合に消えるから
dirnameやbasenameで取得できないってことになるな。
もういい加減仕様で含めるのやめればいいのに
2018/09/08(土) 16:24:05.28ID:xje6Dohs
実際名前に改行含めるような仕事したくないけどな
2018/09/08(土) 16:39:55.00ID:S5S855ao
>>763
あんたって決して自分のミスは認めないのね。うやむやにするいつもの人でしょ
2018/09/08(土) 16:53:13.12ID:SescvIaG
>>765
一人で何の話してるの?
2018/09/08(土) 16:55:08.56ID:SescvIaG
> IFS変更しなくてもb=$(foo "$a")ってやったら消えてないじゃん。"$a"ならば

消えますよ?だからまず自分のミスを認めましょうってことですよ。
2018/09/08(土) 16:58:21.15ID:SescvIaG
自分のミスはちゃんと認めましょう。

認めるまで言い続けますよ
2018/09/08(土) 16:59:06.30ID:SescvIaG
> IFS変更しなくてもb=$(foo "$a")ってやったら消えてないじゃん。"$a"ならば

>>759を読みましょう。
明らかに消えています。

あなたのミスですよね?
実験もしないで嘘ばっかり
2018/09/08(土) 22:31:06.03ID:B+r7WAvB
なんか病人多いなここ最近
2018/09/09(日) 00:05:42.19ID:MseSAwkB
うん
2018/09/09(日) 01:30:00.09ID:40h5Vf3t
alias wgeti='wget -ci <(cat <<_'
エイリアスでwgetをちょっと弄ったんですがこれの関数版作れないですかね
これで複数行のURLをDLできるけど最後に_と)入れる必要あるので
2018/09/09(日) 11:41:02.87ID:ZnXA8VyU
bashの拡張機能で便利なのってなんだろうか?
変数展開は便利だと思うんだが、
配列とかハッシュとか必要なんだろうかね?

配列は標準入力から受け取ってループで回せば良いわけで
それが必要になった時点で使い方を間違ってるという気がしてる

他にbashで便利なものってあるかな?
pipefailぐらい?
2018/09/09(日) 11:55:57.22ID:ZnXA8VyU
>>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
2018/09/09(日) 12:01:20.84ID:ZnXA8VyU
もしくは引数で渡す場合はこう

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.63ID:hUyLWeb6
それってこれでいいのでは?

wgeti () {
wget -c $@
}
2018/09/10(月) 00:48:53.10ID:hUyLWeb6
ああ、でも、引数にするなら何もしなくていいのかw
そのまんま wget の後に URL 入れるだけだ。
2018/09/10(月) 02:03:17.65ID:P2aNZV+z
標準入力からURLのリストを渡したいから
<(cat <<_って書いてあるんだと思った。
wget、普通に引数から複数のURL渡せるね
2018/09/10(月) 02:36:11.00ID:MLFQqRH+
コマンド引数の文字数制限に引っかかる可能性を
考慮すると wget -ci <(cat <<_ の方が無難なのだろう
(xargs でもいいけど)
2018/09/10(月) 21:09:13.29ID:P2aNZV+z
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だけ設定したくても、すべての引数を設定する必要があるけど。
グローバル変数は時に分かりづらいバグを生むことがあるけど
これをうまく使えば、使用する変数をなくせたり減らせたりするかもしれないな
2018/09/10(月) 23:57:57.78ID:3w8KnLJN
ダイナミックスコープはperlとかpowershellとかmathematicaとかにもあるけど、これもグ口ーバル変数並にバグの温床な気がする
2018/09/11(火) 01:49:50.99ID:oHtbKRPF
あぁ、これがダイナミックスコープのことなのか
Perl?って思ったけど、(Perlの)localを使った場合の話なのね。
通常はmyを使ってたから。
2018/09/13(木) 14:07:12.80ID:q7iUBK5M
ふと思ったんだけどシバンってあるじゃんシバン
あれってさ、#がコメントじゃない言語だったらどうするの?
Cインタプリタだったら

//!/usr/local/bin/c

とか書くの?
2018/09/13(木) 15:47:52.06ID:CY4XgXEU
>>783
あれはカーネルが解釈してるからだめ。
2018/09/13(木) 16:45:07.13ID:1sKEH3Wo
>>784
シバンってカーネルが解釈してんのか
だからFreeBSDとOS XとGNU/Linuxで挙動が変わるんだな。同じbashでも。
2018/09/13(木) 17:23:01.88ID:CY4XgXEU
>>785
別問題じゃね?どんな挙動?
2018/09/13(木) 21:25:29.73ID:fcPV9kIu
>>783
面白いネタを振ってくれてありがとう。いろいろ調べて勉強になったよ。
ちなみに質問の答えは「できないとは限らない」ということになるかなあ。
ネタを振ってくれたことには感謝するけど、自分で調べるほうが楽しいよ。
2018/09/13(木) 21:47:40.27ID:mocTFwRb
今日の荒らしは ID:fcPV9kIu か。NG推奨
2018/09/13(木) 22:02:34.22ID:QPFUtiyL
落ち着け
2018/09/14(金) 04:16:04.32ID:q3l06dS7
>>786
FreeBSDだと
#! /usr/bin/env awk -f
これが普通に通るけど
GNU/Linuxだと
“awk -f”なるコマンドがないとかなんとか言われる
2018/09/14(金) 05:06:28.57ID:hVbFTBye
素朴な疑問
・ shebangは シェバン? シバン?
・ "#!"の後にスペース入れずに "#!/bin/sh" ? スペース入れて "#! /bin/sh" ?
自分はともに前者、特にスペースについては入れるべきではないというの最初に覚えたんだけど、
結構後者も目にすることがあるので、実際のところ、どうなの?
2018/09/14(金) 09:25:36.66ID:lqNqtREE
>>790
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/execve.2.html
うぉ、Linuxまじ最低だな

インタープリタースクリプトの optional-arg 引き数の解釈方法は実装により異なる。
Linux では、インタープリター名 interpreter に続く文字列全体がインタープリターに
1個の引き数として渡される。 しかし、動作が異なるシステムもある。 あるシステム
では、 optional-arg のうち最初のホワイトスペースまでが 引き数として渡される。
また、別のシステムでは インタープリタースクリプトは複数の引き数を持つことができ、
optional-arg 内のホワイトスペースが引き数の区切りとなる。
2018/09/14(金) 09:40:37.87ID:CXa+ZLzo
>>790
本題のshebang仕様とは話がずれるが、
awkはいにしえの奴も含め俺の知る限りすべて/usr/bin/awkで起動できるから
env使う必要ないと思う。
2018/09/14(金) 09:48:01.90ID:CXa+ZLzo
>>791
#! の後のスペースは、どのOSでも有無に関わらず動いたと思う。
ただしshebang行に32バイト制限のあるOS があったので、
それに引っかかるギリギリならスペース無しにする必要アリ。

読みは知らない。
2018/09/14(金) 10:54:54.26ID:6xTUz+7n
>>793
自分でビルドしたawkを使う場合は?
2018/09/14(金) 12:12:08.80ID:CXa+ZLzo
>>795
システム付属じゃ駄目で、自分でビルドした特有の事情があるなら、絶対パス指定で呼べばいいのでは?
2018/09/14(金) 16:14:10.39ID:6xTUz+7n
>>796
それだと実行権限の意味がなくなるじゃん
実行権限をつけるのは、いちいち実行プログラムのパスを指定しなくていいからでしょ?
拡張子もなくせばなんの言語で作られているかも意識しないですむし。

手でコマンドを打ったときと同じように、環境変数の$PATHからどれを使うかが決まる。
そもそもなんで最初からそういう仕組みにして置かなかったんだろう?
そうすりゃシバンなんて #!awk だけですんだのにね
2018/09/14(金) 16:33:58.92ID:gmWhNmZA
実行権限は絶対パスでも相対パスでも必要なので関係ない
2018/09/14(金) 16:35:21.26ID:KKMncdOE
スクリプトのパスとインタプリタのパスを混同している
2018/09/14(金) 16:36:11.79ID:6xTUz+7n
>>798
シバンの話だよ
実行するスクリプトのパスじゃなくて
実行するスクリプトが使用するインタプリタのパス
2018/09/14(金) 16:46:56.10ID:gmWhNmZA
シバンの話は分かってるけど?
実行するスクリプトが使用するインタプリタに実行権限付いてなかったら
当たり前だけど絶対パスで指定したって実行できないよ?
2018/09/14(金) 16:49:01.41ID:CXa+ZLzo
>>797
なんか誤解してる?
絶対パスで書くってのは
#!/home/me/bin/awk -f
みたいに書くって意味だよ。
2018/09/14(金) 16:53:40.07ID:UfVRD/gP
>>794
> shebang行に32バイト制限のあるOSがあった
なるほど、そんな理由もあったんだね。

逆にスペースorタブを入れなければならない、なんていう例(4.1BSD)もあったみたいだ。
これについては修正されたようだけど、今でもこれを守っている人もいるらしい。

同じ#で始まっていても、コメントとは違うと思うから、
やはりスペースを入れることにはなんとなく躊躇しちゃうわ。
2018/09/14(金) 18:40:33.82ID:q3l06dS7
俺は半分脳死状態で
#! /bin/sh -
↑半角スペース ↑ハイフンマイナス
にしてるわ。

上でも書いてくれた人がいるけど,#!の後に空白が必要な環境があったり
先頭行から継続してパースしてしまい
(ほとんどありえないことだけど)
#! /bin/sh

-c
みたいなファイルに対し
/bin/sh -cというオプション付きshインタプリンタを起動してしまうOSもあるみたい
(オライリーのシェルスクリプト本に記述あり)
2018/09/14(金) 18:50:01.26ID:hBiQ1eS5
- で閉じるのはオレもやってるけど、
シバンの後のスペースは入れない
#!/bin/sh -
2018/09/14(金) 19:07:11.14ID:6xTUz+7n
>>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.66ID:za5qG/O1
なんかいろいろ誤解しとるw
2018/09/14(金) 19:27:29.88ID:EsLYvq4M
>>806
何をしたいとかは別として、実装としてできないんだよ。
カーネルのシステムコールexecveはPATHを見ない。
PATHを見てるのはユーザランドのライブラリ関数のexecvpとか。
大改造が必要になる。
2018/09/14(金) 19:38:49.59ID:6xTUz+7n
>>808
実装としてできないってどっちの話?

勘違いしている人がいて、話の前提で止まっている人がいてややこしいけど
>>806の話は理解した上で、俺が提案した #!awk でいいじゃんって話だよね?

PATHを見れないというのなら、見る必要はないよ。
#!awk -f という記述(絶対パスでないもの)を決め打ちした文字(/usr/bin/env )を
頭に入れて #!/usr/bin/env awk -f として解釈すればいいだけ

どういう文字を頭に入れるかはディストリが決めたカーネルの
ビルドオプションででも設定すればいいだろう

単なる文字列の変換でしかないので、カーネルだけでできる
2018/09/14(金) 20:18:23.13ID:EsLYvq4M
カーネルが特定の決め打ちしたバイナリを呼ぶようなことはないよ。
せいぜいinitだけ。
2018/09/14(金) 20:29:56.82ID:6xTUz+7n
そういう中途半端なレスはやめて欲しい。
結局>>809の方法で可能だってことだろう?
そうでないなら、そうでないとわかるように理由を添えて書いてくれ
2018/09/14(金) 20:33:39.49ID:EsLYvq4M
それほど言うなら試しにlinuxのパッチ書いて投げてみたら?
2018/09/14(金) 20:33:54.17ID:6xTUz+7n
補足すると>>809読めばわかると思うけど、読み取ったシバンの文字列を置き換えるだけ。
だからカーネルが特定の決め打ちしたバイナリを呼ばないというのが事実であっても
読み取ったシバンの文字列を置き換える話と無関係の話ということ
2018/09/14(金) 20:35:05.30ID:6xTUz+7n
>>812
話がすり替わってる。

技術的に可能かどうかの話をしている所に、
じゃあってみせろと言われても、
それは関係者を説得するのは難しいだろう?別の話だろ?
2018/09/14(金) 20:36:01.42ID:EsLYvq4M
可能か不可能かで言えば、もちろん可能だよ。なんだって可能。
でも、カーネルとユーザランドは明確に分けろって怒られるだろうね。
2018/09/14(金) 20:39:33.43ID:6xTUz+7n
>>815
話聞いてるか?
シバンはカーネルが読み取るもの
ユーザーランドのものには一切手を出していない。
読み取ったシバン文字列を置き換えるだけなんだから
2018/09/14(金) 20:39:41.70ID:1jWDqP4V
>>809
カーネルいじればそれは可能だな。
カーネル書ける人なら目茶目茶難しいってほどじゃないから、
カーネル書ける人雇えばいいぞ!

ただしそれを標準カーネルの機能として入れてもらえるように
議論するのは、カーネルに機能追加するよりだいぶ大変かも。
#! じゃない別のmagic文字列にした方が提案通りやすいかもな。
頑張れw
2018/09/14(金) 20:42:06.79ID:6xTUz+7n
>>817
技術的に可能でありユーザーランドを触ってないってのは同意したの?

だから関係者と話をつけるのが難しいっていうのは
別の話だから、すり替えるのはやめてくれと行ったんだが
2018/09/14(金) 20:43:14.61ID:6xTUz+7n
つーか、いい加減にしないといつもの荒らしモードに入るぞ?w

議論に負けそうになると、話をすり替えて、
俺を呼ばわりするのはいつもの手だよなw

もうそろそろ荒らし認定することだと思ってるんだが?w
2018/09/14(金) 20:43:32.04ID:6xTUz+7n
訂正

俺を荒らし呼ばわりするのはいつもの手だよなw
2018/09/14(金) 20:46:17.92ID:6xTUz+7n
反論しないならさっさとNGIDに入れて
俺に反論できない状態を作ってくれよ?

見れなくなったら俺に反論できないんだから
それこそ俺の望んだ結果だw

はい、結論。>>809の方法で技術的には実現可能です。
反論がある人は、関係者を説得して調整をするのが難しいって
別の話にすり替えないで技術的な話でお願いしますねー
2018/09/14(金) 20:46:23.72ID:1jWDqP4V
>>818
なんか別人と勘違いしてるようだが、俺は技術的にできないと書いたことは一度もない。

この勝手に勘違いしてるあたり、もしかしていつもの人か?
2018/09/14(金) 20:48:41.19ID:6xTUz+7n
>>822
はい、技術的な内容を長文で書いて
相手を論破するのは、いつもの俺のパターンw
2018/09/14(金) 20:48:54.07ID:1jWDqP4V
だって勝手に勘違いして勝手な仮定して勝手に腹立ててるんだもん。

せっかく賛成してた俺まで敵視しだす有り様だし。
自業自得ってことよ。
2018/09/14(金) 20:51:13.71ID:jAge75Zy
長文ってだけでとりあえずスクロールする
2018/09/14(金) 20:54:16.23ID:6xTUz+7n
>>824
5ちゃんねるなんだからこの程度のもんよ

こっちが真面目に話をしていても、とりあえず何か言い返せば
それが反論したことになるみたいな、みたいなクソみたいなレスしてくる

いい案だと思うなら一言「それはいい考えだ」ぐらい書けと
自分が間違っていたら、素直に間違いを認めるやつばかりなら、
それもこんなにどうでもいいことを、毎回書かなくてすむんだよ
2018/09/14(金) 20:58:13.19ID:EsLYvq4M
>>816
ファイルシステムの構成に何らかの仮定を置いた時点でユーザランドと分離できていない。
2018/09/14(金) 20:59:16.05ID:EsLYvq4M
ちなみに俺はIDずっと変えてないよ。
2018/09/14(金) 20:59:57.05ID:6xTUz+7n
>>827
ファイルシステムの構成に仮定をおいたりしてない
単にシバン文字列を置換するだけ
2018/09/14(金) 21:08:41.85ID:EsLYvq4M
>>829
仮定せずにどうやって/usr/bin/env付ければいいってわかるの?
2018/09/14(金) 21:12:09.04ID:6xTUz+7n
>>830
単なる文字列の置換に過ぎない
カーネルはシバンがファイルパスなんて思ってない。

カーネルがシバンを読み取るというのなら、少なくとも
読み取ったものがシバンであるということはわかってる
あとはそこににある文字列が、ファイルパスだろうが
ランダム文字列だろうが関係ない

単に#!の後に固定の文字列を埋めるだけ
あとは後続のプログラムに渡せば、
そいつが勝手になにかしてくれるんだろ?
それはカーネルの知ったことじゃない
2018/09/14(金) 21:30:49.25ID:gmWhNmZA
この話と実行権限が関係ないのは理解できたのか?
2018/09/14(金) 21:44:08.73ID:6xTUz+7n
>>832
お前1人で意味不明の話をしてるんだってw

(awkスクリプトで書いた)fooコマンドが実行できるのは
fooコマンドに実行権限がついているからだし、そのfooコマンドの
シバンで指定されたプログラムも実行権限がついていなければいけない

当たり前の話だが、上記の理由により awkであっても /usr/bin/envを
使っておいたほうが良いって結論を言ったんだが、
それに対して前は何の話をしてるのだ?
2018/09/14(金) 21:46:58.87ID:6xTUz+7n
どうもこの話を理解できないのが、おかしいと思うんだが、
もしかしてawkスクリプトに実行権限をつけるという発想がないのか?
いつもawk -f スクリプトファイル名 で実行してるとか?

いや、まさかな。
シバンはスクリプトファイル名だけで実行するためにあるんだし
そのために実行権限つけるだろう。

でもなぁ、ここまで以上に理解能力がないのは、
まかさが的中しているとしか思えない。
シバンをつける意味もわかってなかったりしてw
2018/09/14(金) 21:49:19.68ID:jAge75Zy
ここまでの話全く読んでないけどawk実行させる時は-f使うわ
2018/09/14(金) 22:00:24.41ID:6xTUz+7n
>>835
ということは、シェルスクリプトを実行させるときはsh使って
perlスクリプトを実行させる時はperlを使ってるのかな?

かつてsystemdが普及するまではみんなが使っていた
serviceコマンドやbyobuはシェルスクリプトだし
apt-fileやshasumはPerlスクリプトだし
ufwはPythonスクリプトだよ

実装がなんのスクリプト言語で作られているかなんて気にしなくていいじゃないかw
2018/09/14(金) 22:02:01.56ID:jAge75Zy
shは実行権限つける
perlは場合による
意味はない
2018/09/14(金) 23:01:40.99ID:gmWhNmZA
>>833
俺は>>797でお前が意味不明な
> それだと実行権限の意味がなくなるじゃん
と、書いてたからパス指定と実行権限の意味は無関係だと指摘してるだけなんだが
機能的文盲とかいうやつなのか?
839デフォルトの名無しさん
垢版 |
2018/09/14(金) 23:05:15.75ID:fXySkelb
$ls aho.sh
rw-r--r-- aho
$. ./aho.sh
aho
$
840デフォルトの名無しさん
垢版 |
2018/09/14(金) 23:06:41.90ID:fXySkelb
$cat ./aho.sh
echo aho
$
2018/09/14(金) 23:15:17.42ID:1jWDqP4V
>>838
確かにあの書き込みは全体的に意味不明だったね。
2018/09/15(土) 01:10:17.43ID:pm09nqHo
>>838
> と、書いてたからパス指定と実行権限の意味は無関係だと指摘してるだけなんだが
> 機能的文盲とかいうやつなのか?

実行権限がついているとパスの指定を省略できるんだよ

ご存知じゃないかもしれないが(皮肉)パスの指定を省略した時に
$PATHに設定された複数のパスから、パスを補完してくれる機能がある
つまり$PATHからパスを補完してほしいなら実行権限をつけないとだめ

(awk)スクリプトを$PATHの中から補完してほしいなら実行権限をつける。
そうするとパスを省略して実行できる。
スクリプト自体は$PATHから補完してくれる、だけどそのスクリプトに
シバンが/usr/bin/awkとなっていると、スクリプトを実行するインタプリタは
/usr/bin/awk固定となってしまう。

/usr/bin/env awk -f と書くことで、インタプリタ自体も$PATHから検索してくれる

パス指定を"省略すること" と 実行権限の意味、いい加減理解しましたかね?
2018/09/15(土) 01:13:44.97ID:pm09nqHo
ほんと、理解能力がないのか、
それとも、単に技術レベルが数ランク下なのか知らんが
馬鹿を相手にしてると疲れる。煽りたくもなるわw
2018/09/15(土) 01:20:22.61ID:pm09nqHo
> 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
それだと実行権限(をつけてパスを省略できるようにした)の意味がなくなるじゃん


ここまで言えば、馬鹿でも理解できるかな?
まだ説明しないと理解できない?
2018/09/15(土) 01:22:03.62ID:pm09nqHo
実行権限は単に実行可能にするだけじゃない
パスを省略して$PATHの中からパスを補完してくれる機能があるのだ
2018/09/15(土) 01:32:29.75ID:pm09nqHo
まあ、細かいことを説明するなら、"スクリプトファイル" の実行パスを
検索してくれるのはシェルで、シェルが$PATHの中から
実行ファイルを見つけることができるようにするために実行権限をつける

でも今は "スクリプトファイル" の実行パスの検索の話ではなく
シバンから起動する "インタプリタ" の話
シバン自体には$PATHの中から検索してくれる機能はなくて
単にシバンに書かれたパスのプログラムを実行するだけ

そこで出てくるマジックが /usr/bin/env awk -f
シバンは$PATHを検索しないが、/usr/bin/envが$PATHを検索して
適切なプログラム(ここではawk)に引き継いでくれる


などと丁寧に説明してやったら、今度は長文だーとか言って
荒らし呼ばわりするんだろう?
2018/09/15(土) 02:03:07.61ID:pm09nqHo
話は変わるけどさ、

シェルスクリプト(シバンは #!/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と同じ
どっちが正しい動きなんだろう?
2018/09/15(土) 04:27:15.99ID:2etSWec6
またかww
849デフォルトの名無しさん
垢版 |
2018/09/15(土) 05:43:59.56ID:krdUo6un
>>847
単にシェルごとに仕様が違ってるだけで全て正常動作だろうし正しいと言えば正しいのでは?
てか、あらゆるシェルはこのような時はこのような動きにならなければいけないみたいな決まりがあるわけでもないんだから正しいか間違いかで考えること自体がおかしい。
2018/09/15(土) 06:12:06.93ID:pm09nqHo
>>849
> 単にシェルごとに仕様が違ってるだけで全て正常動作だろうし正しいと言えば正しいのでは?

POSIXの仕様と照らし合わせてって意味だよ

POSIXの仕様と照らし合わせて正しいのか間違ってるのか
そもそもPOSIXにこういったときの仕様は定義されていないのか

> あらゆるシェルはこのような時はこのような動きにならなければいけないみたいな決まりがあるわけでもないんだから

決まりはあって、それがPOSIXの仕様のことだよ
2018/09/15(土) 06:13:27.92ID:pm09nqHo
>>848
> またかww

うん、またなんだ。済まない。
バーボン(略
2018/09/15(土) 09:25:08.76ID:bwURAev4
よほどリアルでぼっちなんだな。そらそうだなという人格と見えるし
2018/09/15(土) 11:18:23.22ID:OUVvcRON
>>843
> それとも、単に技術レベルが数ランク下なのか知らんが
https://cdn-ak.f.st-hatena.com/images/fotolife/k/kemurikikakuku/20170201/20170201184641.jpg
2018/09/15(土) 15:58:58.37ID:8KftQgLD
俺自身にもそういう傾向があるが
訊かれてもないことをずらずら書いて自己満足に浸るのはよくないと思う。
現実の人間関係でもそういう人はハブられがちだし。
855デフォルトの名無しさん
垢版 |
2018/09/15(土) 16:00:37.10ID:KIanXBkQ
聞いたことを答えないで
聞かれてないことを答えるのは
それはそいつが何も知らないときだ

オマエはなにもわかってない
2018/09/15(土) 16:04:38.00ID:pm09nqHo
>>855
誰がそんなことを答えてくれと質問したんだ?

聞かれてないことをペラペラ喋ってるのは
あんただろう?w
2018/09/15(土) 16:05:17.15ID:pm09nqHo
>>847の質問よろしくおねがいします。
2018/09/15(土) 16:16:01.63ID:iaCHT03n
文書なげぇんだよなぁ
2018/09/15(土) 16:16:38.70ID:pm09nqHo
前に情報小出しにするなって言われたからねw
2018/09/15(土) 16:32:31.20ID:Svn0IWNp
質問のときだけはへり下るのな
身を正してのつもりかもだが、質問のときだけですぐに豹変するからお前の場合はもうただただ気持ち悪いだけ
2018/09/15(土) 16:35:43.79ID:pm09nqHo
何だ?質問も高圧的にすれば満足するんか?
ただ文句言いたいだけだろ。
そんな無駄な会話してないで
本題にもどれや
2018/09/15(土) 16:38:13.80ID:Svn0IWNp
どうしてそっちになるのだか。やっぱりそっちが素で付け焼き刃のへりくだりか
社会的にはは豹変しない方になんだけどなあ
2018/09/15(土) 16:45:50.83ID:pm09nqHo
やっぱり意地でもスレと無関係の話をしたいようだ。
お前がいなくなればスレは平和になるのになぁw
2018/09/15(土) 16:50:58.66ID:Svn0IWNp
なにその俺は違う的なレスは
さすがいままでのレスで自己中ぶりを発揮しまくっただけあるやつだなあ。ただただ気持ち悪いのもそれは自己中ぶりからなんだかが、わからないだろうな、わかってたらそんな自己中にはならんだろうし
2018/09/15(土) 16:55:24.75ID:SSTURz0o
なるほど、コマンドライン上にある変数(シェルが予め展開する変数)はそのままなのか
fork & exec されるプロセス空間の環境変数にのみ作用するのだからそうなるわな

$ PATH=hoge ls "${PATH}"
$ PATH=hoge /bin/ls "${PATH}"
2018/09/15(土) 17:01:07.67ID:Svn0IWNp
>>865
それと、(一時的)環境変数をいつするのかと、環境変数をいつ展開するのかが被ってるてとこかなあ
A=123 /bin/echo "$A"
A=123 bash/dash/ksh/etc... -c 'echo "$A"'
2018/09/15(土) 17:19:32.41ID:8KftQgLD
>>866
そのコマンドラインは,「直前に指定した変数が影響しない」のが正しい挙動だよな

なぜならシェルはそれらを一緒くたに処理するから,変数の変化を参照できない
↑この理解って正しい?

bashコマンドラインで
$ VAR=val echo $VAR
# なにも返らず
$ VAR=val; echo $VAR
val
こういう挙動から推測したんだけども。
868867
垢版 |
2018/09/15(土) 17:20:16.67ID:8KftQgLD
ごめん安価ミス
1s/>>866/>>865/1
2018/09/15(土) 17:42:37.90ID:pm09nqHo
>>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"

と書いたら変数の内容は実行後に元に戻る。
というのが基本の動きでいいのだろう
まあよく知られた機能だよね。
2018/09/15(土) 17:43:08.57ID:pm09nqHo
ちなみにコマンドライン(シェル)じゃなくて
スクリプトを書いて実行して確かめてる
2018/09/15(土) 17:56:26.73ID:pm09nqHo
知ってると思うんだけど、念の為

var=value command

この構文は、変数varにvalueを入れるだけじゃなくて
export varした状態になる。だからcommandが
外部コマンドであっても値は引き継がれている
(今回の話とは直接関係はない)
2018/09/15(土) 18:00:22.45ID:pm09nqHo
話を簡単にすると

A=
A=123 eval :
echo $A

dashだと123と表示される。
bashだと何も表示されない。
2018/09/15(土) 18:15:21.72ID:SSTURz0o
>>872
ふむ、bash で set -o posix してから実行すると 123 って表示されるね
2018/09/15(土) 18:22:17.36ID:pm09nqHo
>>873
それは気づかなかった。ってことはPOSIXで仕様化されてるってことかな?
evalだけ特殊と。なんでだろうね。
2018/09/15(土) 18:34:31.19ID:8KftQgLD
>>871
$ VAR=val echo $VAR
とした場合,「VAR=val」が反映されていないように見えるのはどうしてだろう
2018/09/15(土) 18:43:07.13ID:pm09nqHo
>>875
それは単に「VAR=var echo $VAR」が1行だから
先に$VARが展開されるだけだと思うよ

変数を一時的に変更したいけど、別変数にバックアップして元に戻すの面倒だな
その他にも方法あるけどアレ(省略)だし、

よし、var=value command構文を使おう!
うお、先に$VARが展開されちまった
ぴこーん!だったらeval使えば先に展開されることないんじゃね?

よし動い・・・あれぁ、変数を一時的に変更したかったのに
実行終わっても変数が元に戻らないよぉ

よし5ちゃんねるだ。という流れw
2018/09/15(土) 18:52:32.83ID:8KftQgLD
>>876
もうとっくに分かってると思うが 俺が思い付いたのは
$ VAR=val-b4
$ (VAR=val-tmp; echo $VAR)
→ val-tmp
$ echo $VAR
→ val-b4
くらいだな
2018/09/15(土) 19:22:09.86ID:imSsWev+
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があるので、これだと調べられません。
どうやるんでしょうか?
2018/09/15(土) 19:37:37.26ID:SSTURz0o
GNU sed の -r オプション使ってるけど、こんな感じで

$ mediainfo "$FILE" | sed -nr '/^Audio/,$s/^Format +: (.+)/\1/p'
2018/09/15(土) 19:38:31.49ID:pm09nqHo
>>878
mediainfo "$FILE" | sed -n -E '/Audio/,/\s*$/{s/Format\s*:\s//p}'
2018/09/15(土) 19:41:31.43ID:SSTURz0o
ヘルプメッセージ読んだらこれでいいかも

$ mediainfo --Inform="Audio;%Format%" "$FILE"
2018/09/15(土) 19:41:51.97ID:pm09nqHo
Audioにformatが複数あっても対応できないかなー?ってやってたら遅れたw
2018/09/15(土) 19:42:08.44ID:8KftQgLD
>>878
mediainfo "$FILE" | sed -n -e '/^Audio/,$p' | grep '^Format' | cut -f '2-' -d ':' -s
これでどうだろう?

ところで綺麗な端末だね。
2018/09/15(土) 19:42:36.17ID:8KftQgLD
ちょっと確かめてたらめっちゃ回答ついてたw
2018/09/15(土) 19:43:35.86ID:8KftQgLD
ちなみに俺のコマンドラインはPOSIXに準拠してるので可搬性は高いと思うよ(ドヤ顔)
2018/09/15(土) 19:50:28.32ID:pm09nqHo
Format複数あっても出力されるはずなのにおかしいと思ったら
CRLFになってたw いい加減ATOMのデフォルトを変えないと

>>885
> POSIXに準拠してるので
そうそう。それを言おうと思っていたw

>>879
> GNU sed の -r オプション使ってるけど、こんな感じで
-r じゃなくて -E を使えば良いのでは?
POSIX準拠?かどうか知らないけど-Eは使えるはず
2018/09/15(土) 19:57:27.53ID:SSTURz0o
>>886
>> GNU sed の -r オプション使ってるけど、こんな感じで
>-r じゃなくて -E を使えば良いのでは?
>POSIX準拠?かどうか知らないけど-Eは使えるはず

癖で指が -r を押してしまう…以後気をつけます
2018/09/15(土) 19:59:15.83ID:pm09nqHo
Macだと\sは使えないのかな?
とりあえず>>879を参考にしつつ修正してみた。
General、Audio、の次になにか来ても対応できるようにしてみた。
これなら-Eいらんかったわ。macOSで動くのを確認済み

sed -n '/^Audio/,/^$/ s/^Format *: *// p'
2018/09/15(土) 20:01:46.68ID:pm09nqHo
-Eが良いよ(ドヤァ)

POSIX準拠というより可搬性重視なので、
-Eが使えるなら-Eつけてれば良いんじゃね?ぐらいに思ってるw
2018/09/15(土) 20:06:03.93ID:pm09nqHo
>>883
> grep '^Format' | cut -f '2-' -d ':' -s

grepしてcutするって流れは、俺もよくやるんだけど、
awk一つにまとめられる(と後からよく気づくw)
2018/09/15(土) 20:13:17.74ID:8KftQgLD
>>890
でもなんかその操作をawk一つにまとめるって
emacsのorgモードに近い印象を受けるというか
ちょっとUnix哲学っぽくねえなと思う。

もちろんUnix哲学に従う必要性は皆無なんだけど,あくまで個人的な意見として。
2018/09/15(土) 20:16:21.20ID:pm09nqHo
>>891
それ言ったらsedは今回、範囲選択+行選択+置換 の3つを同時にやってるんやで?w
2018/09/15(土) 20:20:10.43ID:8KftQgLD
>>892
俺の >>883 ←これはそんなことやってねえぞ(謎の自信)
検索→表示オンリー

スレチにもほどがあるのでそろそろやめるわ
2018/09/15(土) 20:41:53.02ID:pm09nqHo
sedもawkも複数行のスクリプトを実行できるわけで
一つのコマンドで複雑な異なる機能を提供してるから
Unix哲学から反してるのかもね

だから例のアレはUnix哲学がどうとか言ってる割に
結局awkでプログラム書くんかいって突っ込みたくなるんだな
895デフォルトの名無しさん
垢版 |
2018/09/15(土) 20:45:00.31ID:8rxpHkWL
まだとどまる事のない誤解を披瀝し続けとってわろたw
2018/09/15(土) 21:28:41.91ID:imSsWev+
みなさんどうもありがとうございます!

>>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になってしまいました。
2018/09/15(土) 21:30:45.05ID:imSsWev+
>>883
端末はMacのiTerm、シェルはfish、プロンプトは適当にいじったやつです。
2018/09/15(土) 21:43:49.56ID:pm09nqHo
>>896
> このファイルはLC-AACかHE-AACなのか判別して次の処理に進む事が出来なかったので、このオプションではダメでした。

ちゃんと調べた? %Format%以外で出るのあるんじゃないの?
2018/09/15(土) 21:59:26.07ID:imSsWev+
>>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
が取り出せるので判別出来そうです。
2018/09/15(土) 22:08:36.45ID:8KftQgLD
>>896
>>883のコマンドラインを提案した者だが
mediainfo "$FILE" | sed -n -e '/^Audio/,$p' | grep '^Format' | cut -f '2-' -d ':' -s | sed -e 's/^[[:blank:]]//1'
↑これでいけるかな。
ただ長いので他の人のを使ったほうがいいかも
2018/09/15(土) 22:18:17.17ID:8KftQgLD
>>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でやっと区別できるんだけど,俺の勘違いかな。
2018/09/15(土) 22:25:58.84ID:8KftQgLD
何度も投稿してすまん。
これでいいんじゃないかな。
確かめた環境はMediaInfo 0.7.91 on Debian 9.5。
case "$(mediainfo --Inform='Audio;%Format_Profile%' "$FILE")" in
HE*) echo 'HE';;
LC*) echo 'LC';;
esac
2018/09/15(土) 22:45:32.78ID:pm09nqHo
>>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の所も"$@"にして複数ファイル対応できるようにしたい。
だけどメディアファイルっていうのはオーディオを複数入れることができるはずだから、
この場合どうなるのか?という疑問がある。その場合はうまくいかないかもしれない。
まあ適切なサンプルファイルを思いつかんし面倒だから試しては見てないが
2018/09/15(土) 23:39:36.74ID:imSsWev+
みなさんどうもありがとうございます
>>896の時点のコードは以下です
https://pastebin.com/qdNT6iBm
拡張子がaacのファイルがあるディレクトリでこのスクリプトを動かしたらaacファイル全て(ひとつづつ)処理させてます。

>>900-903
明日確認してみます

$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v18.08.1

以前のバージョンではFormat profile欄があったのでそこで判別してたんですが、いつのまにか(昨日気がつきました)最近のバージョンではFormat profile欄がなくなっているんです。>>878のスクショです
2018/09/15(土) 23:59:46.80ID:8KftQgLD
>>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
これは結構見分けやすいんじゃないか?
2018/09/16(日) 00:12:32.41ID:ynEgKPZ+
>>904
ちょっと訊きたいんだけど,MPEG4のLCとHEの違いってSBRが適用されてるかいなかの差?
もしそうならまさにそのオプションがあって
mediainfo --Output='Audio;%Format_Settings_SBR%'
↑これは,SBRが含まれていれば“Yes (Explicit)”,含まれていなけば空文字を返す。
2018/09/16(日) 00:17:30.07ID:6L484PJq
>>904
> >>896の時点のコードは以下です
> https://pastebin.com/qdNT6iBm

つまらん。特に指摘する点はない。
細かい趣味程度のことぐらいだな。

ファイルは引数で渡したほうがいいんじゃね?とか
俺ならset -eu -o pipefailをつけるとか
(一行で書く場合を除いて)コマンドの後ろの ;; は嫌いだとか
2018/09/16(日) 01:08:58.79ID:dyBKzwHe
大先生かよw
2018/09/16(日) 01:22:39.05ID:6L484PJq
ちーす
2018/09/16(日) 13:43:22.79ID:dTju3huw
ネタフリ、これ前に紹介したことあったっけ?

modernish: a shell moderniser library
https://github.com/modernish/modernishhttps://github.com/modernish/modernish#modernish-a-shell-moderniser-library

良さそうなことを書いてあるが、大きすぎて、それでいて何ができるのかよくわからない
ようするに誰か日本語で簡潔に解説してくれとw
2018/09/16(日) 21:03:29.36ID:ynEgKPZ+
変な人が二人いるせいで質問者が帰っちゃったじゃん。せっかく良い案を思いついたのに。
2018/09/16(日) 23:14:50.58ID:dTju3huw
いや、気にせず書けよw
また見るかもしれないじゃん
2018/09/16(日) 23:27:44.88ID:ynEgKPZ+
もう書いてるよw
2018/09/17(月) 09:30:58.79ID:yJ/mJYoq
二人いるんじゃなくて、同一人物なんじゃ?
例の人、プロバイダー2つ契約してて自演に使ってるんだし。
2018/09/19(水) 03:32:21.41ID:6Ke1Nn09
引用符を除去するいい方法ってないかな。
個人的には変数の仕様("abc"はabcとみなされる)とかを利用してエレガントに解決できるんじゃないかと思ってるんだけど うまくいかん。
いまのところsed -e 's/"\([^"]+\)"/\1'で問題はないけれど「\"」の形のエスケープに対応したりするのが面倒になってくるんだよね この形だと。
2018/09/19(水) 04:43:37.82ID:ScWhkKn/
a='"aa\"a"'
eval echo "$a" とか eval "b=$a"
じゃだめ?


おまけ、最近のbashには以下のような変数展開が
増えているけど今回は関係なさそう
${parameter@A}
${parameter@E}
${parameter@P}
${parameter@Q}
2018/09/19(水) 07:25:21.58ID:6Ke1Nn09
>>916
なるほどevalは思いつかんかったわ。
ただそれだと "aa\""→aa" になってしまうんだが これは正常な動作なんだろうか。
2018/09/19(水) 07:59:33.05ID:ScWhkKn/
>>917
さあね。「引用符を除去するいい方法」の正確な意味がよくわからないので
もしかして単に前後の引用符を除去するだけだった?
ならこれだけで行けるけど

a='"aa\"a"'
a=${a#\"}
a=${a%\"}

エレガントに解決っていうから、なんかもっと複雑な話かと思った
2018/09/19(水) 08:36:50.27ID:6Ke1Nn09
>>918
いや 別に文句を言ったつもりはない
先に挙げてもらった方法で解決してるし あれはすごくエレガントだと思う。


エレガントっていうのは数学畑の言葉のつもりで使った。
つまりまわりくどいやりかたではなく本質をつらぬいた方法。
今回は,
「シェルに対してトークンの区切りを示すための引用符をシェルに読み込ませることによって除去する」
という非常に直感的で素晴しい方法を学べた。
俺のやりかたはわざわざsedを使ってる点で,シェルが解釈するという本質から外れてしまっている。
2018/09/19(水) 08:38:35.76ID:6Ke1Nn09
ちなみにやりたかったことは単純に
VAR="value with space"
↑こういうことが書かれたファイルから
value with space
という語句を取り出すというもの。

$ cat /etc/os-release | grep '^PRETTY_NAME' | cut -f 2 -d '=' | eval echo "$(cat)"
↑こういう感じ。
2018/09/19(水) 09:31:58.31ID:qXmDWFW/
$ cat /etc/os-release | grep '^PRETTY_NAME' | cut -d'"' -f2

というのはどうだろう
2018/09/19(水) 09:41:44.85ID:ScWhkKn/
>>919
単に文字列の途中にどういう意味かわからなかっただけだよ。
>「\"」の形のエスケープに対応したりするのが面倒
とか書いてあったから、何がしたいんだろうと

前後の""を取るだけなら>>918のやり方が最短で最速

>>920
> VAR="value with space"
> ↑こういうことが書かれたファイルから
> value with space
> という語句を取り出すというもの。

それだとまた話が変わってくるな
(. /etc/os-release; echo $PRETTY_NAME)

()でくくってるのは、単に変数のスコープをサブシェルに閉じ込めてるだけ
カレントシェルにばらまいていいなら()はいらない

シェル互換の文法としてみなせるファイルならこれでいけるよ
コードが入っていたら実行されるから、安全なファイルと断定できるものにしか使えないけど
923デフォルトの名無しさん
垢版 |
2018/09/19(水) 22:30:20.23ID:/Yn8C735
"a" → a

こういう変換は、CSV でも苦労してる。
" が偶数個なら良いけど、奇数個なら形式エラーにするとか

CSV は、様々なバグが考えられるから、TSV が良い

"a""b" → a""b

ただし、" " 内で、" を使う場合、"" と連続させる。
この場合も、奇数個なら形式エラーにするとか、ややこしい
2018/09/19(水) 22:42:07.01ID:ScWhkKn/
>>923
別々の言語で3回ぐらいCSVのパーサーを書いたことありますよ
ダブルクォートがない場合、あって改行が入ってる場合など
Excelの仕様に完全対応したCSVライブラリがその言語になかったので

Perlの変態正規表現レベルにまでなれば可能かもしれないですが、
そういうネスト構造のあるものは単純な正規表現では解決不可能な問題です。
925デフォルトの名無しさん
垢版 |
2018/09/19(水) 22:46:07.55ID:xLP4ypV2
タブ区切りでも
当然ダブルクォートがいる

頭悪いこといってるわ。。。
926デフォルトの名無しさん
垢版 |
2018/09/20(木) 09:41:46.66ID:cMPVhU9i
ダブルクォートを特別扱いするかどうは仕様によるのでは?
2018/09/20(木) 10:46:25.87ID:jnBpqPJK
CSVの仕様といったらRFC4180やろ
928デフォルトの名無しさん
垢版 |
2018/09/20(木) 12:24:25.01ID:rEtRtbV+
>>927
それって区切り文字がタブの場合も書かれてるの?
2018/09/20(木) 12:57:43.85ID:ILleL3Gt
それくらい読めよ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も含んじゃだめそうなので、ダブルクオートいらねえよ。
2018/09/20(木) 20:07:29.45ID:v1EqyHAs
まあいくらRFCで規定してもディファクトスタンダードのExcel読めるフォーマットでないと意味ないしな w
2018/09/20(木) 20:41:14.92ID:jnBpqPJK
>>930
RFC4180とExcelのCSVはほとんど同じ

違いはデータの中に改行が含まれてる場合
Excelデータの中の改行はLF。(一行の最後はCRLF)
RFC4180はデータの中の改行はCRLF(一行の最後は同じくCRLF)

これだけしか違いはないよ
2018/09/20(木) 20:45:03.75ID:jnBpqPJK
CSVもTSVデータとしてキーボードから入力可能な文字を
区切り記号としているわけで、なんで
RS (0x1e Record Separator) とか
US (0x1f Unit Separator) とかいう
便利な文字を使わなかったのか?って思うな
933デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:32:37.16ID:zLqp8E23
頭悪いこといってるわ
そんなコードなキーボードからどうやって入力すんの

viならできるが
こんなアホが、vi使えるとは考えらればいしな
934デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:37:28.28ID:IHzBiPD0
いつまでトリップはずしてんねんお前
2018/09/20(木) 21:38:06.55ID:MjJalB6Y
>>931
ほとんど同じとか言うプログラマーは信用できない
2018/09/20(木) 21:38:41.53ID:t6JihYkI
そもそもCSVは数値の表のためのデータ形式だからね
937デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:39:06.57ID:Rg0LfXUv
ほとんど病気
938デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:42:44.26ID:zLqp8E23
カンマのキーとタブのキーと改行のキーは
どのキーボードについてる

低学歴知恵遅れにはコレが分からない
2018/09/20(木) 21:51:32.09ID:jnBpqPJK
>>933
CSVエディタを使えばいいだけでは?
2018/09/20(木) 21:51:35.97ID:5pjY9bpj
CSVネタで久しぶりにアノヒトが嬉々として現れたなってことかな?w
2018/09/20(木) 21:53:59.48ID:jnBpqPJK
つーかCSVファイルをテキストエディタなんかで閲覧、編集する人なんていないでしょう?
可能か不可能かで言えば、可能だけどバイナリエディタでテキスト編集するような感じで
効率が悪いから、みんなエクセルつかってCSVファイルの読み書きするんだけど
942デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:13:21.07ID:8Bepevhe
国によっては、カンマとピリオドの意味が逆転してるのあるけど
そんな国でも割り切って、セパレータはカンマにしてるんだろか

小数点がカンマ、どーしてそうなったか興味あるが
943デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:16:57.13ID:zLqp8E23
引用符でくくられてたらどんな記号でも問題起きないからな
textを普通のエディタで開いてなんのコードが混入してるか分からないほうが
普通の感覚でイヤだから

低学歴知恵遅れなら細かいことは気にしないかもしれない
2018/09/20(木) 22:18:05.52ID:MjJalB6Y
>>941
編集はExcelだけど差分が容易に取れるからバージョン管理の為にcsvしてる
945デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:24:15.47ID:zLqp8E23
たとえばhttpもsmtpもコンテンツ以外は
crlfを除いて普通にぜんぶ0x20以上0x7e以下のテキストでやりとりしてるからな
低学歴知恵遅れなら、自分はそんなの意識しないUA使ってるからなんでもいいというワケ
946デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:28:11.99ID:zLqp8E23
低学歴知恵遅れは
まずcsvがデータ交換用のフォーマットであることが分かってない
2018/09/20(木) 22:33:55.28ID:8pZm26YJ
>>925
半角また間違えたんか。何度目だよ
948デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:39:27.57ID:zLqp8E23
デファクトスタンダードのエクセルで
タブ区切りで保存すると
ふつうにこうやって保存されるからな

aho<HT>"boo""foo"<HT>baka
aho<HT>"boo""foo"<HT>baka
2018/09/20(木) 23:21:58.71ID:fVTsYrUH
>>948
そうだね そうだね
2018/09/21(金) 00:46:25.95ID:m8DL5ZJ4
>>931
TSV にして、データ中に、タブ・改行を使わないのが良さそう

>Excelデータの中の改行はLF。(一行の最後はCRLF)
Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ
2018/09/21(金) 01:24:23.69ID:i9i22CNp
Excelで直接開くと勝手にフォーマット変換されるのが気に入らないからテキストエディタで開いてからExcelにコピーとかやってるわ
2018/09/21(金) 02:43:02.52ID:v8LFlyn0
>>950
タブはともかく改行は無理
Excel使ってると改行は絶対入れる
2018/09/21(金) 02:43:36.28ID:v8LFlyn0
>>950
> Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ
バイナリ扱いすればいいだけ
954デフォルトの名無しさん
垢版 |
2018/09/21(金) 04:04:34.44ID:m7KC0L1Z
>>951
拡張子を txt にしてから開いてウィザード動かすか、または 0 で始まる数字だけの文字列は ="0123" のようにして最初から作っておくとうまく行く。
2018/09/21(金) 04:48:00.63ID:dtC8HZuo
ちょっと荒れたのであまり話題にはしたくないものの
Unicodeの区切り文字を使うのはいい手段だと思う。
ただし思い切り独自規格なので既存の製品には対応できないけどね。もちろん
2018/09/21(金) 05:30:02.46ID:v8LFlyn0
RS、USってのはUnicodeじゃなくてASCIIの制御文字だよ
2018/09/21(金) 05:37:53.78ID:v8LFlyn0
もちろんUnicodeでも使えるけどね
2018/09/21(金) 06:06:23.57ID:v8LFlyn0
一般人は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カラムずつ処理するのも可能で処理に時間がかからない方法はないだろうか
959950
垢版 |
2018/09/21(金) 07:09:48.97ID:m8DL5ZJ4
>>931
>Excelデータの中の改行はLF。(一行の最後はCRLF)

もし、このCSV を、Linux で扱う場合には、やばくない?
行区切りをCRLF に設定すれば、データ中に、LF があっても問題ないのかな?
2018/09/21(金) 08:12:42.97ID:LR4lwFnG
>>959
別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ
標準のアプリと動作が違うけどそういう特殊フォーマットだと思えばいいだけ
961デフォルトの名無しさん
垢版 |
2018/09/21(金) 09:34:09.19ID:7bTZc31z
>>958
fork?どういう処理を想定してるのか?
2018/09/21(金) 09:47:27.07ID:NXw3/PDJ
みんなで輪になって踊る処理やろ
963デフォルトの名無しさん
垢版 |
2018/09/21(金) 09:56:30.62ID:7bTZc31z
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'
2018/09/21(金) 10:10:07.17ID:v8LFlyn0
>>961
a=$(printf 'test')

ビルトインコマンドであってもforkが行われる
2018/09/21(金) 10:49:46.73ID:v8LFlyn0
なんか次から次へと変なテクニックが編み出されていくw
2018/09/21(金) 12:41:08.14ID:FeY49FdE
構内放送「直ちに中庭に集合してください」
従業員 (また誰かforkコマンド実行したな…)
2018/09/21(金) 12:48:09.10ID:v8LFlyn0
>>960
> 別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ

よく考えたら、シェルスクリプトでもそれなりに使いやすいかもしれない。
readで1行(LFがくるまで)読んで、読み込んだ最後がCRだったら行区切りあつかい
そうでなければ同一行としてあつかえば良いわけだし
968デフォルトの名無しさん
垢版 |
2018/09/21(金) 12:50:18.79ID:isbUNhMl
8進数エスケープってbashの機能で文字に直せなかったっけ?
2018/09/21(金) 12:53:33.36ID:v8LFlyn0
printf以外でってこと?
2018/09/21(金) 12:56:03.96ID:dtC8HZuo
たとえばエスケープをするのは
US,RS,エスケープ文字自体
↑これでどうだろうか各種エスケープは
\#,\%,\\
これ。

ちなみにあたり前だが 端末の画面に「分かりやすく」表示するときは
\#→水平タブ,\%→改行(LF)
に置換するのがいいだろう。
2018/09/21(金) 12:57:07.23ID:dtC8HZuo
>>968
echo $'\030'
↑こういう感じやね。
2018/09/21(金) 13:28:31.46ID:v8LFlyn0
>>971
あー、dashで使えないから頭から抜け落ちてたわw
2018/09/21(金) 18:20:35.40ID:dtC8HZuo
>>970
これはだめだ。
\<US> \<RS> \\
↑これで十分だった。
2018/09/21(金) 20:25:16.42ID:FeY49FdE
思いつきだけど、エスケープ文字自体を表すときは別の文字をエスケープして表現するほうが何かと都合がよくないか?
2018/09/21(金) 21:30:40.16ID:dtC8HZuo
>>974
くわしく。
具体例でたのむわ(アホで申し訳ない)
2018/09/21(金) 23:27:59.03ID:/eJt2TVD
例えば\rsを検索したいときに、\が\\でなければ\rsを検索するだけでよいけど、\が\\のときは見つけたあとに\の数をたどってそれが本当に\rsなのか調べないといけない、とか、
とある場所までシークしたときに、その場所の文字が何なのか、\を繰り返し数えないといけない、とか、
\?はすぐエラーとわかるとか。
977デフォルトの名無しさん
垢版 |
2018/09/22(土) 00:50:25.74ID:9bcvhAfJ
>>974
その別のエスケープ文字をエスケープするには
どうすればいいの?
2018/09/22(土) 01:10:24.01ID:Whfp6XnZ
>>977
エスケープ文字はあくまで\だけ。
例えば%を使うとして、
rsを表すなら\rs、
usを表すなら\us、
\を表すなら\%、
%を表すなら%、
と記す。とかね
2018/09/22(土) 03:37:20.07ID:LHC7cNdc
>>978
よくわからん。そのルールだと

\rsを表すときは、\%rs
\usを表す時は、\%us
\%を表す時は、\%%
%を表す時は、%
ってことか?

%を検索した時、それが本当の%であるかは
一文字前が\であるかどうかを調べないといけなくて、
\rsを検索したい時は、\%rsで検索しないといけないってことか?
2018/09/22(土) 04:10:01.34ID:wyOkhzEz
>>979
あってるよ。

\が\\の場合は、
\を検索するときは\\を見つけるだけじゃ不十分だけど、
\が\%の場合は、
%を検索するときは一文字前が\でない%を見つけるだけで十分だし、
\を検索するときも\%を見つけるだけで十分なんだ。

同様に、
\が\\の場合は、
\rsを検索するときは\\rsを見つけるだけじゃ不十分だけど、
\が\%の場合は、
\rsを検索するときは\%rsを見つけるだけで十分になる。
2018/09/22(土) 06:13:58.91ID:dKJ+Zat7
どうせRS,USとかの非文字を使うんなら
エスケープ文字もESCでいいんじゃないだろうか。
2018/09/22(土) 06:46:52.90ID:LHC7cNdc
bashでさ、typesetで関数の中身を出力できるじゃん?
それをevalで評価したら同じ関数が出来上がるじゃん?
これってどれくらい信用できるんだろう?

作成した関数のコードそのままの形で出力されるなら
evalで評価して同じものができるだろうけど、
ぱっとみtypesetで出力するされたものをみると、
改行の位置とか変わって整形された状態になって
関数にはfunctionが頭に追加されてる。

元のコードをどれくらい書き換えるんだろうか?
これ以外になにか変わる事知ってたりする人いない?
2018/09/22(土) 11:47:57.86ID:rfhCLeCr
次スレたてるわ
2018/09/22(土) 11:56:38.68ID:rfhCLeCr
次スレ
ワッチョイつけたぞ

シェルスクリプト総合 その29
http://mevius.5ch.net/test/read.cgi/tech/1537584801/
2018/09/22(土) 12:03:50.02ID:rfhCLeCr
今まで人気ないスレだったから全く不要だったわけだが、今後は次スレ立てる安価指定しといたほうがいいか
次回の勢い次第でテンプレ編集で
2018/09/22(土) 21:25:51.74ID:SEEeyc/q
埋めろって言っても反発されて埋まらん気もするし自分でやるわ
2018/09/22(土) 21:26:12.71ID:SEEeyc/q
埋め
2018/09/22(土) 21:26:36.85ID:SEEeyc/q
埋め
2018/09/22(土) 21:26:59.15ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:22.40ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:46.75ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:56.78ID:wyOkhzEz
埋めない!
993デフォルトの名無しさん
垢版 |
2018/09/22(土) 21:27:56.90ID:PGp2AKzL
荒らすなよハゲ
2018/09/22(土) 21:28:09.05ID:SEEeyc/q
埋め
995デフォルトの名無しさん
垢版 |
2018/09/22(土) 21:28:36.50ID:PGp2AKzL
ID:SEEeyc/q ← アラシ
2018/09/22(土) 21:28:55.88ID:SEEeyc/q
埋めも理解できない阿呆がいるのか…
2018/09/22(土) 21:30:18.74ID:SEEeyc/q
このスレも埋まらんうちにすでにCSV荒らしと半角荒らしが次スレ移動してるからな
前スレ使え言っても子供が言うこと聞くわけないから自分でやることにしただけよ
2018/09/22(土) 21:31:28.53ID:wyOkhzEz
梅屋敷!
2018/09/22(土) 21:31:44.51ID:SEEeyc/q
埋め
2018/09/22(土) 21:32:32.82ID:SEEeyc/q
終わり。質問はなし
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 60日 10時間 31分 16秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況