シェルスクリプト総合 その35
■ このスレッドは過去ログ倉庫に格納されています
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
前スレ: シェルスクリプト総合 その34
https://mevius.5ch.net/test/read.cgi/tech/1597990675/ >>779
あなたは時期が来たらreadでエラーを出すべきだと思いますか?
逆にそう思わないですか?
出すべき or 出すべきでない、その理由は何でしょうか?
知りたいのは「理由」です。
いま出てないから出てないんだーとかいう
現状は最初からわかってます。 こっちはechoを使ってるのに、こっちではprintfを使ってる理由はなんですか?というレビューに対して
printfはechoじゃないから、じゃ全く答えになってないんだよな
そんな答えばっかり返してるやつはアスペだと思う
レビューでインデントはスペース4にしなさいと言っても
こっちのスクリプトは4にしなさいと言われなかったからとか言いそうw 読めなさすぎだろう、自分の頭で物事を考えなさすぎだろう
問題の本質は、
何で コマンド置換のとこのソースコード中に昔から元々あったメッセージ出力を出すようになったのか
でしかない。readとか関係ない。ソース見れば大体その雰囲気がわかるだろう
質問するなら、
どうして4.4からコマンド置換のとこでメッセージ出すようになったか
だろう。readに主題置いて聞かれたら、readはコマンド置換じゃないから という返答は特におかしくもないだろう
レビューとか下手な例え話してんじゃないよ >>783
本質って、最初のレス読めばわかるだろう?
>>725
> $ a=$(printf '\0\n')
> -bash: 警告: command substitution: ignored null byte in input
> っていうエラーが出るんだけどさ、これだとでない
> printf '\0\n' | read a
>
> なんでreadだとこのエラーはださないんだろう?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 誰か理由わかる?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
問題の本質は「なんでreadだとこのエラーはださないんだろう?誰か理由わかる?」
以外にありえないよ。勝手に文章に入れ替えるの"だけ"は明らかに間違いだからね > だろう。readに主題置いて聞かれたら、
readは主語ではありません。この文章は日本語でよくある主語の省略です。
主語を入れるなら
「なんで(開発者は)readだとこのエラーはださないんだろう?」
となり、主語は開発者です。 お前の言ってるのはトンチンカンな質問の本質(??)wだろう
問題の本質の意味が違う、てか読めねえの?普通に読めそうだと思うんだがな
トンチンカンな質問の発端がメッセージが出ることなんだろ?その疑問の発露となる問題の本質だよ、故に
何で コマンド置換のとこのソースコード中に昔から元々あったメッセージ出力を出すようになったのか
だよ
繰り返しreadではと言っておいて何を言っているのか。本当にお前は懲りないな 文章は
「read "では"」です。
「read "が"」ではありません。
この文章を見て、readを主語だと思うのは日本語不自由な証拠です。
「コマンド置換(主語)がエラーを出している」
「read(主語)はエラーを出さない」
と勘違いしちゃったんでしょうね。
「開発者はなぜコマンド置換ではエラーを出すようにし、readでは出さなかったのか?」
という文章だと読めなかったんですか?
やっぱりアスペなんだろうな どうして4.4からコマンド置換のとこでメッセージ出すようになったか
開発者の気分だろうwもしくはそこの部分で開発者に何らかの注文があったんだろ
コマンド置換の部分だけの修正(ソースコードからは気分としか読めないけどw)なのでコマンド置換だけの話、readは関係ない
readに主題置いて聞かれたら、readはコマンド置換じゃないから という返答は特におかしくもない
それだけの話だな
色々読めないくせに、なんか言ってる
正直何言ってるのとしか思えない。マジでそれで自分は日本語が不自由ではないと思っているなら、日本語が不自由すぎだろう。そりゃ色々読めないだろうな >>788
やっぱりなw お前が>>787に反論しなかったのが答えだわ
readは主語じゃない 質問文 「なんで(開発者は)readだとこのエラーはださないんだろう?」
>>788のの解釈
質問分の意味は「どうして4.4からコマンド置換のとこでメッセージ出すようになったか」だな!
これだからもうw アホな日本語講釈に事細かに反論するのも馬鹿らしいだけなのに
>>728
質問は明らかにこれです。
> なんでreadだとこのエラーはださないんだろう?
こう書いたのはどこぞの誰なんだかな。馬鹿馬鹿しい
以下ずっと。
1.コマンド置換とreadは同じであるはず/あるべきと思った
2.それが間違いだったのに自ら先に返答レスを馬鹿にした
この2つの間違いを決して認められないだけで、下手くそな小手先な誤魔化しを延々と繰り返すんだろうな
ますます馬鹿を晒してるだけなのに > こう書いたのはどこぞの誰なんだかな。馬鹿馬鹿しい
↓これ
> 725 自分:デフォルトの名無しさん[sage] 投稿日:2021/02/01(月) 01:32:52.47 ID:/mOfS3Su
> $ a=$(printf '\0\n')
> -bash: 警告: command substitution: ignored null byte in input
> っていうエラーが出るんだけどさ、これだとでない
> printf '\0\n' | read a
>
> なんでreadだとこのエラーはださないんだろう?
> 誰か理由わかる? お前は馬鹿すぎて話にならんぞ
だったら、
readに主題置いて聞かれたら、readはコマンド置換じゃないから という返答は特におかしくもない
でしかないだろう
お前の小手先ごまかしがキチガイすぎて頭痛くなってくるぞ >>794
誰が言ったのか書いたのに、無視すんの?
都合が悪いレスは無視だもんねw なに言ってるの?マジキチすぎ
>誰が言ったのか書いたのに、無視すんの?
揶揄とかわからんのかw それに対しての>>794がわからんのか。レスする前にちゃんと読み返したほうがいいよ って言うくせにwww
どうして4.4からコマンド置換のとこでメッセージ出すようになったか
開発者の気分だろうwもしくはそこの部分で開発者に何らかの注文があったんだろ
コマンド置換の部分だけの修正(ソースコードからは気分としか読めないけどw)なのでコマンド置換だけの話、readは関係ない
readに主題置いて聞かれたら、readはコマンド置換じゃないから という返答は特におかしくもない
1.コマンド置換とreadは同じであるはず/あるべきと思った
2.それが間違いだったのに自ら先に返答レスを馬鹿にした
この2つの間違いを決して認められないだけ
でしかないな 「どうして4.4からコマンド置換のとこでメッセージ出すようになったか」
それはどれが言ったの?w
質問は明らかにこれです。
> なんでreadだとこのエラーはださないんだろう? レスする前にちゃんと読み返したほうがいいよ
www
阿呆らしい...いやアホだけど だから質問は「なんでreadだとこのエラーはださないんだろう?」だろ
これに対して反論なかったんだが?
誰が4.4とかいい出したのか。お前か?
いつから出したとか誰も気にしてないんだが
はい、この質問に答えられる? レスする前にちゃんと読み返したほうがいいよ
としか言いようがない
1.コマンド置換とreadは同じであるはず/あるべきと思った
2.それが間違いだったのに自ら先に返答レスを馬鹿にした
この2つの間違いを決して認められないだけ
だけでよくそんだけ小手先の誤魔化しを続けられるな。マジキチすぎだろう > 1.コマンド置換とreadは同じであるはず/あるべきと思った
思ったとか、それはお前の感想でしかない
> 2.それが間違いだったのに自ら先に返答レスを馬鹿にした
「それ」とはお前の感想である ほらね。俺が言い返しても、
こいつは言い返してこない。
言い返せないというのが正しいがw すぐにそういう馬鹿なこと言うし
アホな小手先の誤魔化し文になんで正面からいつまでも付き合わなきゃならんねん
アホな小手先の誤魔化し文という自覚がないのか?マジキチすぎすぎだろう それにコマンド置換とreadが全く違う動作をすると思ってそうだよなw
違うところがあるのは知ってるからそれは聞いてない
同じ動作をするところがあるのを、はたしてこいつは知ってるんだろうか?w
ま、また関係ない話をしてごまかすだろうな 後付けて決めつけが始まりましたwww
ソース読んでるし、他のシェルで試してもいるし
イマイチ何のことかだが、こいつだと言い出しそうなのは大体推測できる
こんなこと言い出したのもついさっきわかったとかだろうな。違うか?w だいたいさぁ command substitution: ignored null byte in input を出すなら、
read: ignored null byte in input も出すべきだって思うだろ
これに関する動作は同じなんだから
多分それも知らなかったんだろうけどな レスする前にちゃんと読み返したほうがいいよ
www
いい加減怒るヤツ出るだろうし、誤魔化しに付き合うのももういいってので
どうして4.4からコマンド置換のとこでメッセージ出すようになったか
開発者の気分だろうwもしくはそこの部分で開発者に何らかの注文があったんだろ
コマンド置換の部分だけの修正(ソースコードからは気分としか読めないけどw)なのでコマンド置換だけの話、readは関係ない
readに主題置いて聞かれたら、readはコマンド置換じゃないから という返答は特におかしくもない
1.コマンド置換とreadは同じであるはず/あるべきと思った
2.それが間違いだったのに自ら先に返答レスを馬鹿にした
この2つの間違いを決して認められないだけ
というだけのお話でしたとさw > どうして4.4からコマンド置換のとこでメッセージ出すようになったか
誰もそんな事気にしてない > 1.コマンド置換とreadは同じであるはず/あるべきと思った
同じところがありますね。 もうネタバレしてやると
コマンド置換とreadは、どちらも ignored null byte in input は同じなんですよ
どちらも入力のnullバイトを無視してる >>779ですでに書かれてることを何を一人悦に入っているのだか
すでに書かれてることを、何自分は知ってるお前(ら)は知らないと言えるんだか
>コマンド置換とreadは、どちらも ignored null byte in input は同じなんですよ
ちょっと違うんだなあ。さてどう違うでしょう?ww 違いはありません。どちらも同じように ignored null byte in input します。
英語わかる? 入力のNULLバイトを無視するって書いてあるんだよw ふふ〜んwww
「ちょっと違う」ことは知らないということね 1. コマンド置換とreadはどちらも入力のNULLバイトを無視する
2. 質問は「なんでreadだとこのエラーはださないんだろう?」
これだけなのにreadが主語だ!とか理由わからないことを言って
ずーっと自分の勘違いをごまかしてる >>815
「入力のNULLバイトを無視する」は同じですといいました。
それ以外の点では違うところがあると>>805ですでにいいました。
> 違うところがあるのは知ってるからそれは聞いてない
お前のターン(笑) はい出ました、また話題を変えての堂々巡り巡り
レスする前にちゃんと読み返したほうがいいよ
www
一人でやってなさい。じゃね 逃げてないよぉ
他の人に怒られるのが嫌なだけだぞw本当にお前は自分がどれほどだと思ってるねん 質問者おいてけぼりだと思ってるやつがいるらしい
そんなやついないだろう 反論できなくなって単発IDを出し始めたぞw
>>823とか>>825とか $find . -type f -name '*.mp4' -exec sh -c "echo /Applications/Safari.app " \;
/Applications/Safari.app
/Applications/Safari.app
$find . -type f -name '*.mp4' -exec sh -c "echo $dirname /Applications/Safari.app " \;
/Applications/Safari.app
/Applications/Safari.app
$dirname /Applications/Safari.app
/Applications
どうして2番目の例ではdirnameが作用していないように見えるのですか? $dirname /Applications/Safari.app
だと、dirnameという変数を展開しようとしてるだけだろ
dirnameというコマンドを実行するのではなく
コマンドプロンプトのとちょっと見分けづらいのでちゃんとスペースを置くべきだな さっぱりわからんなw
動作確認の途中なんだろう。findしても同じ結果出すだけだしな
そのうち {} とか入れたりするんだろうが、
実行したいなら $() だろう
-exec sh -c "
は
-exec sh -c '
でないとマズそうマズいだろうな
な感じかなあ ${〜} だろ
echo ${dirname}/Applications/Safari.app パラメータ展開よりbasename/dirnameコマンドのほうが分かりやすいね
~$ DIR='/ChonChon/Chon.bak'
~$ basename $DIR
Chon.bak
~$ echo ${DIR##*/}
Chon.bak
~$ basename $DIR
Chon.bak
~$ echo ${DIR#*/}
ChonChon/Chon.bak
~$ echo ${DIR##*/}
Chon.bak
~$ echo ${DIR%/*}
/ChonChon
~$ echo ${DIR%%/*}
~$ dirname $DIR
/ChonChon ありがとうございます
変数になっていることに気づいていませんでした
find -exec sh -cで複数コマンドを扱うのは諦めforを使って解決しました
>>833 スペースをどう置くとどう見分けやすくなりますか?
>>834 質問に関係ある部分だけ抜き出したので意味不明なものになっています >>837
わかりやすさ vs 実行速度の話だね
さくっとコマンド入力する時はbasenameでいいけど
シェルスクリプトであればパラメーター展開のほうがいい >>838
$ find . -type f -name '*.mp4' -exec sh -c "echo $dirname /Applications/Safari.app " ¥;
$ dirname /Applications/Safari.app # sudo apt install xclip
CLIPB=$(xclip -o)
echo $( basename $CLIPB ) Ruby なら、glob を使う
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/*.csv"
Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each { |full_path| puts full_path }
出力
C:/Users/Owner/Documents/a.csv
C:/Users/Owner/Documents/b.csv シェルスクリプトも、Windows 10, WSL2, Ubuntu 18.04, VSCode でやってる
Ruby は、Linux用・Windows用の両方を入れてる >>845
久しぶりだけどなw
なんて言われてるかは上の方であるな
トンチンカンなレスしてるとこからもトンチンカンな承認欲求なんだろう Alpine?busyboxってコマンド追加した場合の競合どうなってるんですかね?
たとえばdateがGNU版と挙動が違うのでcoreutils追加したんですけど
元々/bin/dateだったのが追加後も/bin/dateのままなのに呼び出されるのはしっかりcoreutilsのに変わってます
macではdateとgdateで使い分けられたのでモヤモヤします 汎用ではなくカスタマイズした環境前提だからそんなの気にしない
置き換わっても置き換わるのを知って作るそういう独自の環境を自ら望んで作る >>849
ディストリの方針次第。Debianとかだってvim-tinyを入れるか
通常のvimを入れるかで呼び出されるvimが変わる
どちらを使うかの切り替え機能も持っている
パッケージで入れる分には、入れても動作するように作られてる
パッケージで入れて壊れたらそれはディストリのバグ
Debianなんかはbusyboxを入れてもデフォルトで置き換えたりしない
alpineはbusyboxの方がデフォルトなんだから、それで動くように作られてる
それをcoreutilsに変更しても動くように作られてるだろう
macの場合、gdateを入れるのはサードパーティのHomebrew
Apple社と一切関係ないフリーソフトで、Appleは動作保証もしてないのだから
Homebrewはデフォルトで置き換えたりしない。壊れる可能性があるから
dateを置き換えられないだけで使い分ける方が便利なわけではない
そもそもbusyboxはcoreutilsのコマンドと比較して一部の機能が
実装されてないだけで、実装されてる機能に関しては互換性があるように作られてる
しかしMacのdateはBSD版なのでgdateと互換性がない 超高速なシェルって登場しないもんかね?
JITエンジン搭載して最適化とかガシガシやるようなやつ >>853
それはスクリプト言語の高速化、とはちがうのけ? >>854
お前の言うスクリプト言語の高速化が何のことかわからんって >>855
各自適当に当てはまると思うのを挙げてもらえばいいと思ったんだがw
じゃあ例えばPythonの各種実装でいいけども。
そしてJITだけが高速化の技術ではないけども。 超高速なシェルって〜という質問に対して
スクリプト言語の高速化とは違うのけと言われてもね
飴がほしいに対して
キャンディーとは違うのけと言うようなもんだよ
お前は何がいいたいのか 思慮が浅いからわからんのだろう
思慮が浅いからトンチンカンな疑問が湧くのだろう >>857
じゃあ最初から「ちがうのけ」に対して「ノー」と言えよw
どうしてもシェルじゃないといけないのかの確認だったのだが。
もうどうでもいい。 各自適当に当てはまるといっておきながら何を言ってるんだ?
(俺の定義に当てはまるものは)ノーだ
これでお前は何のことかわかるのか? いやお前がなんだが
いつものやつもそういうレスを前にいくつかしてたからなおだな じゃあ、そういうように見えるから気をつけたほうがいいな
なぜかいきなり喧嘩腰になる>>857とか、全然意図を読めずにまだマウント取るのがメインのような>>860とかな
本当に違うんだったら、すまんかった。本当に違うなら 超高速なシェルって言ってもどこを高速化したいのか分からんね
他のスクリプト言語と違ってプロセス起動を平気でやる性質があるから
JIT実装したところで、ねえ…… >>865
>本当に違うんだったら、すまんかった。本当に違うなら
くっワロタ >>866
だよな
だから誰も必要としてないから誰も作ろうともしない、
シェルスクリプトの長い歴史から見ても
変わった人(いい意味で)がやろうと出ても企画倒れかな デーモン起動とかにも使われるシェルスクリプトは、速さよりもちょっとでも軽いほうがええやろ。
JITなんかにメモリを使う余裕はないな。 デーモンとかに使うのは素の/bin/shで、言う通り軽い方なのが採用されてるだろう
JIT云々はそういうのではないのだろう。今あるbashとかzshとかそういう方向の シェルスクリプトの高速化って結局、exprに対する$()みたいな、外部コマンドの組み込みコマンド化が原則になると思うけど、
それで行き着く先ってPerlでしかないよね
まあRob Pikeの言う通り計測しろって話ではあるので、ボトルネックが実際fork/waitじゃなければまったくの的外れだけど >>871
JavaScriptの言語仕様を見ればわかるけど
JavaScript自体ではファイルの読み書きはできないんだよ
つまりI/Oを伴う機能は言語仕様としては本質的に不要と言える
外部コマンドなんて殆どがI/Oなので、それらを組み込む必要はない
Perlは多数組み込んでるので良くない
JavaScriptと同じように、I/Oを必要としないものは
シェル組み込みとして、メモリ計算処理を高速化すればいい
例えばメモリだけでできる単純な値比較や計算だけでもシェルは遅い >>874
違うけど、お前はいつもの「ポジキチと争ってるやつ」ってことは確定かなw 争ってるがどこまでを指しているのかわからんが、反論してるのは複数居るだろう
確定しても意味なさげw >>873
ブラウザというホスト環境にのせるために考えられた言語だからI/Oがないだけ
ホスト環境がI/OやEvent Loopを補完しないと動かないし役に立たない
そういう種類の言語の仕様にI/Oがないからといって
一般的なプログラミング言語仕様にI/Oが本質的に不要なわけない
I/O無しではどんなプログラムも役に立たないから JavaScriptは元々はブラウザ上で動くが発端だからな
勝手にどこぞからロードしてユーザの意思に関係なく勝手に動くプログラムだからな
ローカルファイルにアクセスなんて自由にできたらどうなるか火を見るより明らか
ていうのがあって、何言ってんだかなという>>874じゃないのかな。知らんけどw ■ このスレッドは過去ログ倉庫に格納されています