◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

シェルスクリプト総合 その34 YouTube動画>1本 ->画像>1枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1597990675/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2020/08/21(金) 15:17:55.64ID:mArnj/tT
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その33
http://2chb.net/r/tech/1584893550/
2デフォルトの名無しさん
2020/08/21(金) 15:18:16.96ID:mArnj/tT
・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
 POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
 参考 https://unix.stackexchange.com/questions/145522/
 特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)
・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
  Debian系 … dash   CentOS系 … bash   Alpine … ash(busybox)  Android … mksh
  FreeBSD … ash   Solaris,OpenBSD … ksh
  macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・ログインシェルは/bin/shでない場合があります。例 macOS … zsh
・シェルスクリプトは可搬性を持たせるために可能な限りPOSIXに準拠しましょう
 仕様 http://pubs.opengroup.org/onlinepubs/9699919799/
 参考 https://en.wikipedia.org/wiki/POSIX
・bash依存はなるべく避けましょう。自覚なきbashism。シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
 #!/bin/shを使うならシェル依存は厳禁です。bash依存するなら#!/bin/bashです
・BourneシェルはPOSIX標準化前に主にUNIXで使われていたシェルで多くの亜種が存在します
 Bourneシェル≒Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
  Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
  Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
 歴史的資料 https://www.in-ulm.de/~mascheck/
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
  参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
 aproposやman -kでそれらしい単語による簡単な検索もできます
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題はスレ違い(正規表現スレへ)
・シェル芸はシェルスクリプトとは異なります
・シェルスクリプトのことをシェルってゆうな
3デフォルトの名無しさん
2020/08/21(金) 15:19:27.93ID:mArnj/tT
関連スレ

【Bash】Windows Subsystem for Linux【WSL】8
http://2chb.net/r/linux/1590742701/

Bashでプログラミング [転載禁止](c)2ch.net
http://2chb.net/r/linux/1443885102/

シェルスクリプト総合 その28
http://2chb.net/r/unix/1533154936/

zsh その7
http://2chb.net/r/unix/1337844883/

【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
http://2chb.net/r/unix/1443103705/
4デフォルトの名無しさん
2020/08/21(金) 15:25:17.16ID:MuUIpq44
>>1
おっつん
5デフォルトの名無しさん
2020/08/24(月) 18:01:20.80ID:xVB6pD3/
こんにちは
Macでzshを使っています
フォルダに

memo20200810.txt
memo20200817.txt
memo20200824.txt

のようなファイルがあったとして(週に1つずつ増える)
最新のファイルをechoで見たいとしたらどうするのがいいでしょうか???
6デフォルトの名無しさん
2020/08/24(月) 18:06:26.10ID:xVB6pD3/
すみませんechoではなくcatでした
別にコマンドは何でもいいので最新のテキストの内容を見る方法を知りたいです
7デフォルトの名無しさん
2020/08/24(月) 18:08:35.17ID:eDLiikcy
cat "$(/bin/ls *.txt | tail -1)"
8デフォルトの名無しさん
2020/08/24(月) 18:14:51.49ID:xVB6pD3/
ありがとうございました!
9デフォルトの名無しさん
2020/08/24(月) 19:06:43.25ID:8Ar+AlN+
ファイルが大量にあった場合には大きい順でソートして1行目を取り出すみたいに書いた方が速くないか?
10デフォルトの名無しさん
2020/08/24(月) 19:12:31.00ID:8Ar+AlN+
ただし ls で引数に指定するのはディレクトリ。
11デフォルトの名無しさん
2020/08/25(火) 08:17:19.49ID:kX+0EEJG
>>7
ちなみにlsだけフルパスなのは? lsがエイリアスである可能性を考慮とか?
12デフォルトの名無しさん
2020/08/25(火) 08:57:33.67ID:c6c4SV8K
Unixで「複数のパスを区切る」といえばコロン区切りが普通だと思うんだけど
(例えばPATH,CDPATH,NLSPATHとか)
POSIXの
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03
でも言われている通りコロンが含まれているパスを指定することができない。

もちろん自分で勝手にPOSIXを逸脱して,バックスラッシュでコロンを
エスケープする,みたいなことをしてもいいんだけど,
なるたけ標準に合わせたい。

環境変数で複数のパスを指定するときに,
コロンを含めるようにしているユーティリティの例とか知らない?
13デフォルトの名無しさん
2020/08/25(火) 09:30:33.15ID:lHpt9rtN
PATHがコロン含められないのにコロン使えるようにするの?
チャレンジャーだなw

Unixはパスに使えない文字を決めたほうが良かったと思うね
MS-DOS/Windowsはちょっと多すぎだけど
14デフォルトの名無しさん
2020/08/25(火) 12:32:57.49ID:c6c4SV8K
>>13
Windowsだとドライブレターにコロンを使ってるから
PATHの区切りは;ですね。
15デフォルトの名無しさん
2020/08/25(火) 14:21:00.18ID:qvclnJmh
>>14
シェルスクリプトには関係なくね?
16デフォルトの名無しさん
2020/08/25(火) 14:22:05.05ID:qvclnJmh
そういや環境変数名に記号とか改行とか使えるの知ってる?w
17デフォルトの名無しさん
2020/08/27(木) 12:47:09.11ID:Di05+wlc
コマンドの戻り値を反転させたい、つまり0のときは非0に、非0のときは0に変えたいんだけど、どうすれば?
set -e状態のスクリプトで、特殊なコマンドを使いたい場合に。

また、makeで使うときにmake専用の記法(-とか@とか)がもしあればそれも。
18デフォルトの名無しさん
2020/08/27(木) 13:37:00.71ID:Q9F08mvx
>>17
if [ $? -eq 0 ]; then
 exit 1
else
 exit 0
fi

すればいいと思うけど、困ってる点は何?
19デフォルトの名無しさん
2020/08/27(木) 13:56:01.63ID:Di05+wlc
>>18
set -e状態やmakefile中では、コマンドが終了した時点でエラー中断する。
なので、$?を参照するところまで至らない。
20デフォルトの名無しさん
2020/08/27(木) 14:11:33.44ID:Di05+wlc
ちなみに、makefileの場合は、次のように一行にまとめてしまえばごまかすことはできるが、set -eスクリプトだとやっぱりダメなもよう。

コマンド; test $? -ne 0
21デフォルトの名無しさん
2020/08/27(木) 14:24:40.22ID:eXOTJM+N
!
22デフォルトの名無しさん
2020/08/27(木) 15:13:00.41ID:Q9F08mvx
>>19
まあ大体そうなんだろうとは思ったが
どういうときにコマンドの戻り値を反転させたいのか気になるけど
処理をmain関数に入れてしまってこれでできるはず

( main ) && return 1
return 0

! ( main ) でも一応良いはずなんだけど ifを使わずにコマンドの頭に
!をつけるだけだと動かないシェルがあった気がする
今回はサブシェルが間に入っているから大丈夫かもだけど

あとは、思いつきだけどこんな感じでも出来る気がする

#!/bin/sh
set -e
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
任意のコマンド
23デフォルトの名無しさん
2020/08/27(木) 15:13:43.83ID:Q9F08mvx
ちなみにmakefileは知らんw
24デフォルトの名無しさん
2020/08/27(木) 15:30:52.02ID:aM8Ck5Vz
0/1の二択なら1から引けばいいじゃんね
25デフォルトの名無しさん
2020/08/27(木) 15:33:26.32ID:Q9F08mvx
set -eでエラー終了した時は$?が1とは限らん

trap 'exit $(($? == 0 ? 1 : 0))' EXIT
trap 'exit $(($? > 0 ? 0 : 1))' EXIT # 一文字短縮化w
26デフォルトの名無しさん
2020/08/28(金) 15:22:32.20ID:hYmDe1I0
>>21
>>22
ありがとう。
コマンドラインの前に「!」を書けばいいのか。
manページを確認すると、「logical negation」とあったから、こちらの期待どおり。
27デフォルトの名無しさん
2020/08/28(金) 19:08:43.38ID:0gWrnmZ1
trap 'exit $(($? > 0 ? 0 : 1))' EXIT
これいいね
28デフォルトの名無しさん
2020/08/29(土) 14:16:28.94ID:fysUNitN
MirBSDの記事として書き込まれてたけど
このスレの前々スレくらいでもちょっと議論されてた
「ASCII区切り文字による表形式」についての話

https://www.mirbsd.org/permalinks/wlog2020_e20200620.htm#e20200620_wlog2020
29デフォルトの名無しさん
2020/08/29(土) 15:32:00.60ID:tFn2MGZe
>>28
あー、その記事読んだ。FSってフィールドセパレータだと思っちゃうよねw
たまたま俺は、レコードとフィールドと、ファイル区切りもいるかなぁ?って
考えながら探してたから、お、4つもあるじゃんって感じで気付いたが
30デフォルトの名無しさん
2020/08/29(土) 16:27:42.59ID:2GmTjly/
>>16
知ってる。
31デフォルトの名無しさん
2020/08/29(土) 16:39:43.91ID:2GmTjly/
>>17
シェルによって書き方違うかも知れないがこんな書き方も可能。

if コマンド [引数 ...]
then
 exit 1
else
 exit 0
fi

ほぼ >>18 と同じだが、コマンドを if の直後に書けばそのまま戻り値の判定ができる。

こういう書き方もできる。短い場合はこれでも良いかも。(でも後で見て分かり辛くなるかな?)

コマンド [引数 ...] && exit 1 || exit 0

2行に分けても行ける。exit 1 の方が実行されたら下の行には行かないので。
こちらの方が見た目は分かり易いかな。

コマンド [引数 ...] && exit 1
exit 0
32デフォルトの名無しさん
2020/08/29(土) 16:42:17.42ID:2GmTjly/
あ。上の方からゆっくり読んで下まで読まずに書いたら途中で色々と話が進んでいたorz
33デフォルトの名無しさん
2020/08/30(日) 18:43:29.75ID:CLO3al/P
http://2chb.net/r/tech/1537584801/206
この問題のレベル2を実装できないw

レベル1は
foo() { set -- $2 $1 $(shift 2; printf ' %s' "$@"); bar "$@"; }
↑こんな感じのが正解の一つだと思うんだが,
これだと
foo 1 2 3 4 '5 includes space'
という引数を指定した場合に
$ foo 1 2 3 4 '5 includes space'
begin
2
1
3
4
5
includes
space
end
というような出力になってしまう。
34デフォルトの名無しさん
2020/08/31(月) 12:38:22.81ID:pjiHotrY
age
35デフォルトの名無しさん
2020/09/02(水) 11:33:18.91ID:ifuz91bD
シェルスクリプトマスターしてしまったので
シェルスクリプト難しいって言ってる人が
何が難しいのかわからなくなった

シェルスクリプトが難しいんじゃなくて
初心者だから難しいだけなんじゃ?
36デフォルトの名無しさん
2020/09/02(水) 19:16:56.69ID:orWCnyGy
>>33
age
37デフォルトの名無しさん
2020/09/03(木) 02:22:39.28ID:weiyro1+
>>33
いくつかやり方があると思うがヒントな

位置パラメータが 1 2 3 4 5 の状態から
1 2 3 4 5 2 1 3 4 5 を作り出すことができれば
あとはshift 5をするだけで
2 1 3 4 5 にすることができる

この問題を解くカギは、終了条件をどうするか?なんだよ
38デフォルトの名無しさん
2020/09/03(木) 02:23:25.90ID:ZRdxhfh3
1 2 3 4 5  2 1 3 4 5 を作り出すことができれば

スペース入れたつもりだったが見やすくならなかったな
39デフォルトの名無しさん
2020/09/03(木) 21:49:28.77ID:cH7nhQ1J
>>37
Thx
考えてみる
40デフォルトの名無しさん
2020/09/03(木) 23:57:53.85ID:BJh39Y3Y
補足 わかると思うけど

この問題を解くカギは、「ループの」終了条件をどうするか?なんだよ
41デフォルトの名無しさん
2020/09/06(日) 11:36:07.13ID:r+7yP+3C
>>37 >>40
ちなみに >>33 の解答でも
setやshiftを使ったりしてうまいこと
引数処理をしてはいる。
42デフォルトの名無しさん
2020/09/06(日) 14:08:50.79ID:B3LMKUW8
もう自演にしか見えないw
43デフォルトの名無しさん
2020/09/06(日) 20:01:46.98ID:7hbRm2sU
前スレ止まってると思ったら埋めずに分裂してたんかい
44デフォルトの名無しさん
2020/09/06(日) 20:55:56.09ID:racdSqu4
>>41
できたかニャ?
45デフォルトの名無しさん
2020/09/07(月) 13:21:21.27ID:77IwCGLU
>>44
できた。
結局 >>37 のヒントには全く頼らなかったわw

eval "set -- \
$(printf "'%s' \\\\\n" "$2" "$1"
shift 2; while [ $# -gt 1 ]; do printf '%s\n' "$1" |
sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/"; shift; done
printf '%s\n' "$1" |
sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/")"
46デフォルトの名無しさん
2020/09/08(火) 10:49:07.66ID:4xL00uJx
申し訳ないですが誰か教えてください。
以下のような感じで処理をしたいのですが
a.sh(rootで実行)
#!/bin/bash
#処理
#postgresでb.shを実行
su - postgres -c "bash パス/b.sh `$1`"

echo "b.sh完了"

#testでc.shを実行
su - test -c "bash パス/c.sh"
echo "c.sh完了"

exit 0;

b.sh(postgres)
#!bin/bash
#複数処理
exit 0;

これをやるとb.shの一番最初の処理は実行できるのですが
2番目の処理からがエラーで実行できません。
postgresにてb.sh単体で処理を動かすと問題なく動かすことが出来るのですが・・・

このb.shをrootのa.shからpostgresのb.shを呼ぶ方法を教えていただけないでしょうか。
またシェルを分けずに、一貫してやった場合てどうやって途中でユーザ切り替えするのでしょうか?
申し訳ございませんが教えてください・・・
47デフォルトの名無しさん
2020/09/08(火) 11:14:25.07ID:ymgasiE/
>>46
なんとなく
"... `$1`"のあたりが原因なような気がする。
この状態だと引数の実行結果が空白区切りでb.shに渡される。

二番目の処理のエラーは見せられない感じ?
48デフォルトの名無しさん
2020/09/08(火) 11:52:32.28ID:4xL00uJx
>>47
[root@test-srv test]# ll
合計 8
-rwxrwxrwx 1 root root 216 9月 8 11:46 a.sh
-rwxrwxrwx 1 postgres postgres 115 9月 8 11:44 b.sh
[root@test-srv test]# cat a.sh
#!/bin/bash
echo "a.shの処理を開始します。"
echo "a.shのテスト出力、引数は${1}です。"
echo "b.shを実行します"
su - postgres `/home/postgres/work/work/test/b.sh ${1}`
echo "a.shを終了します"
exit 0;
[root@test-srv test]# cat b.sh
#!/bin/bash
echo "b.shの引数1は${1}です。"
echo "b.shのテスト出力です。"
echo "b.shのテスト出力です。"
exit 0;
[root@test-srv test]# ./a.sh test
a.shの処理を開始します。
a.shのテスト出力、引数はtestです。
b.shを実行します
-bash: b.shの引数1はtestです。: そのようなファイルやディレクトリはありません
a.shを終了します
[root@test-srv test]#
少し処理を変えた結果もこんな下の感じです。
[root@test-srv test]# ./a.sh test
テスト: 引数1はtestです: command not found
これはテストです
49デフォルトの名無しさん
2020/09/08(火) 12:32:53.69ID:o44vEJ9h
`/home/postgres/work/work/test/b.sh ${1}`

` じゃん

su - postgres b.shの引数1はtestです。

をしようとしてるじゃん、
-bash: b.shの引数1はtestです。: そのようなファイルやディレクトリはありません
のメッセージの通りじゃん?
50デフォルトの名無しさん
2020/09/08(火) 13:38:46.77ID:wSlh5XRm
いったい何がしたいんや?
バッククォートは何のため?
51デフォルトの名無しさん
2020/09/08(火) 13:41:35.55ID:4xL00uJx
>>49
すみませんが、知識が貧しいので
詳しく教えてください・・・
52デフォルトの名無しさん
2020/09/08(火) 13:44:08.25ID:4xL00uJx
>>50
単純にrootでa.shを叩いたら
postgresユーザでb.shが引数付きで呼ばれるようにしたいて感じです。

その処理がいまいちうまく組めないのです・・・
53デフォルトの名無しさん
2020/09/08(火) 13:47:28.39ID:o44vEJ9h
` で囲んだのは、その時点でそれが実行されてその出力に置き換えられる。$() はほぼ等価
su - postgres `/home/postgres/work/work/test/b.sh ${1}`

su - postgres b.shの引数1はtestです。
をやろうとしてる(b.shの引数1はtestです。に b.shのテスト出力です。もあるけどな)

だから、
-bash: b.shの引数1はtestです。: そのようなファイルやディレクトリはありません
というメッセージなんだよ
su - postgres b.shの引数1はtestです。
をしようとしてるんだから

やりたいのは、
su - postgres `/home/postgres/work/work/test/b.sh ${1}`
ではなくて、
su - postgres "/home/postgres/work/work/test/b.sh ${1}"
とかだろう
54デフォルトの名無しさん
2020/09/08(火) 13:58:43.10ID:4xL00uJx
>>53
出来ました!
su - postgres -c "/home/postgres/work/work/test/b.sh ${1}"
という形でした。
ありがとうございました!
55デフォルトの名無しさん
2020/09/08(火) 14:04:44.26ID:o44vEJ9h
ちゃんとメッセージ見ような。だいたいにおいて正しく問題点が書いてあるんだからw
56デフォルトの名無しさん
2020/09/08(火) 15:16:17.47ID:wSlh5XRm
>>54
参考までに聞いてみたいが、なぜバッククォートを使おうと思ったのか?
クォートならどれでも同じだと思った?

>>55
バッククォートの機能を知らずに使うと、エラーメッセージを見てもわからんやろな。
57デフォルトの名無しさん
2020/09/08(火) 15:37:36.08ID:o44vEJ9h
だが、typoでもよくみるメッセージだからな
それを実行しようとしてる、なぜなんだぜぐらいから始めないとな
58デフォルトの名無しさん
2020/09/08(火) 15:59:34.51ID:7o8rcsWh
ブログはクォート関係はよく文字化けする
59デフォルトの名無しさん
2020/09/08(火) 17:39:44.03ID:ymgasiE/
cshやAndroidにも対応した上で
POSIXに準拠したシェルスクリプトの書き方
(cshの場合はshで起動し直すらしい)
https://togetter.com/li/1077808?page=5
ここまでやる意義は不明w
60デフォルトの名無しさん
2020/09/08(火) 20:25:26.31ID:7o8rcsWh
>>59
それは読んだことがあるが
どうももやもやしている

どういう環境でそれが必要なのかが書いてないからかな?
Androidといわれてもー
バージョンわからないしー
検証環境用意できないしーw

読んでて思うのはtogetterはツイートをまとめるだけなので
検証内容をまとめるには適してねーわ
61デフォルトの名無しさん
2020/09/09(水) 10:55:40.97ID:L9ofENhq
>>60
同意。
「結局なにが分かったのか」
「解決方法はどうだったのか」
っていう,一番重要な情報もめちゃめちゃ
みにくいところにある。

しかも,まとめ主は
「あとで記事にする」と言っているのに
その後音沙汰がないし
アカウント乗り換えてる模様。
怪しすぎる。
62デフォルトの名無しさん
2020/09/09(水) 11:00:38.40ID:ShrkmEVF
>>61
あとなんかシェルによってシバンの扱いが違うように書いてるように見えるんだけど
シバンを解釈するのてOSだよね?
他の言語から起動することもあるんだから
シェルはOSに丸投げしてるだけ
63デフォルトの名無しさん
2020/09/09(水) 11:05:11.17ID:ShrkmEVF
だれかもうずばっと シバンはちゃんと書きましょう。
shを使うなら #!/bin/sh です。このパスがない環境はもうありません
って言ってくれないかな?w

真偽不明でタイトルだけ残ってて困る
64デフォルトの名無しさん
2020/09/09(水) 11:54:49.47ID:L9ofENhq
>>63
ちょっとつっかかるけど
「このパスがない環境はもうありません」
これも根拠なくないか?

POSIXでは定められていない訳だし,
Solarisだと/bin/shはめちゃめちゃ古い。
POSIX shは/usr/xpg4/bin/shにある。
65デフォルトの名無しさん
2020/09/09(水) 12:45:45.54ID:SvwSYfrG
#!/usr/bin/env sh
66デフォルトの名無しさん
2020/09/09(水) 13:06:06.44ID:L9ofENhq
>>65
より非可搬。
詳細は前スレ参照。
67デフォルトの名無しさん
2020/09/09(水) 17:24:48.34ID:QPd8QPwA
たまたまSolarisの環境があるから調べてみたが、

> Solarisだと/bin/shはめちゃめちゃ古い。
これはSolaris 10以前の話。古いというかPOSIX以前のBourne Shellだな。
これがSolaris 11ではkshに変わっている。

それからシステムの初期設定PATHと
getconf PATHは必ずしも同じではない

Solarisのシステムの初期設定PATHは/usr/sbin:/usr/binなんだが互換性上の理由(?)で
POSIXに準拠してない可能性があるコマンドが入っていると考えて良さそう
getconfはPOSIX準拠のコマンドということもあり、getconf PATHもPOSIX準拠のためのPATHを返す
例えば /usr/xpg4/bin/ が優先されている。ただし /usr/sbin は入ってない。Linuxでも/bin:/usr/binしか返ってこないな
だから PATH=$(getconf PATH) なんかしてしまうと fdisk が使えなくなったw
ちなみに /bin はどちらのPATHにも入ってない

getconf PATHをどう使うかもOS依存な気がするけど、Togetterまとめに書いてあるように
PATH="$(command -p getconf PATH):$PATH"
こうすることで、標準を壊すことなくPOSIX準拠に近くするという意味になるんだろう
ちなみにだけどcommandの-pオプションは古いzsh(たしか4.0あたり)で使えなかったりするけどなw

個人的にはgetconfがない環境があるのは知っていたので、そこは何も不思議はない
Togetterまとめに書いてあるPATHの初期化方法は何をやりたいのかよくわからんw
なんつーか一行にしようとして意味不明にしてるとしか思えんな。こんなんでいいやろ?

default_path="$(command -p getconf PATH 2>/dev/null ||:)"
[ "$default_path" ] && PATH="$default_path:$PATH"
68デフォルトの名無しさん
2020/09/09(水) 17:25:20.59ID:QPd8QPwA
↑でこれはシバンがないほうがいいかどうかとは全く関係ない話
まぜるなや
69デフォルトの名無しさん
2020/09/09(水) 18:30:55.68ID:COY4N7BF
宇宙刑事シバン
70デフォルトの名無しさん
2020/09/09(水) 18:57:01.22ID:L9ofENhq
>>67
Solarisで
$ getconf PATH
するとPOSIX準拠の命令が優先されるような
設定が返ってくるのな

勉強になった。さんきゅ〜
71デフォルトの名無しさん
2020/09/09(水) 18:59:49.28ID:L9ofENhq
>>67
ちなみに棘でもzshのcommand -p非対応については
触れられてたな。

あきらめてhash使ってたが。
72デフォルトの名無しさん
2020/09/10(木) 02:57:03.19ID:wmlkkGXD
>>71
command -p (もしくはただのcommand)って
シェルで微妙に動作が違うんだよな

ちゃんとまとめてないからきっちりとは言えんけど
例えば dash や ksh だと command -p printf --help は
ビルトインコマンドが実行される

zshだと外部コマンド
zsh で command -p : がエラーになるのはそのせい
73デフォルトの名無しさん
2020/09/10(木) 03:02:01.02ID:wmlkkGXD
なんで昔の人って

command ・・・ 外部コマンドを実行する
builtin ・・・ ビルトインコマンドを実行する
function ・・・ シェル関数を実行する

みたいに全部作ろうと思わなかったんだろうな?
ユースケースを思いつかなかったということなんかな
74デフォルトの名無しさん
2020/09/10(木) 03:19:24.10ID:Imxe+iF3
zsh
% type command
command is a shell builtin

https://linux.die.net/man/1/zshbuiltins
command [ -pvV ] simple command
The simple command argument is taken as an external command instead of a function or builtin and is executed. If the POSIX_BUILTINS option is set, builtins will also be executed but certain special properties of them are suppressed. The -p flag causes a default path to be searched instead of that in $path. With the -v flag, command is similar to whence and with -V, it is equivalent to whence -v.
See also the section 'Precommand Modifiers'.
75デフォルトの名無しさん
2020/09/10(木) 04:00:38.67ID:MVNZ6OMc
zshにしたら今まで使ってたbashがぶっ壊れることって結構ありますか?
76デフォルトの名無しさん
2020/09/10(木) 05:24:13.89ID:krA4WMn4
bashがぶっ壊れるって何?
両方入れるだけでしょ?

bash消してzsh入れるっていうのならぶっ壊れる可能性が高い
もしくは最初からbashが入ってない(必要ない)システムを使うとかね
例えばdashを採用しているdebian/ubuntuとか

そういうシステムでもdashを消してzshにしたらぶっ壊れる
zshをPOSIXモードで実行すればワンチャンあるかもしれんけど
77デフォルトの名無しさん
2020/09/10(木) 08:23:53.97ID:gaq4bikN
bash用スクリプトはzshで動かすことを考えて作っていない限り動かない
sh用スクリプトであってもzshでは動かない可能性がある
78デフォルトの名無しさん
2020/09/10(木) 09:30:12.19ID:KfHzrxU8
カタリナにしてからmacのターミナル起動するたびに出てくる
`chsh -s /bin/zsh`って実行したらbash使えなくなるよね?
79デフォルトの名無しさん
2020/09/10(木) 13:51:29.36ID:a+RPoaYl
>>73
zshを基準に見ているからそうなる。
80デフォルトの名無しさん
2020/09/10(木) 13:53:05.81ID:a+RPoaYl
シェルとコマンドの関係はOS依存たぞ
81デフォルトの名無しさん
2020/09/10(木) 14:42:26.26ID:aa4WTOXX
>>79
意味不

>>80
意味不w
82デフォルトの名無しさん
2020/09/10(木) 14:47:37.11ID:aa4WTOXX
>>78
ならない。
macは最初からbashとzshの両方がインストールされてる。容量の無駄遣い
macOSでbashは/bin/shとして使われてる。Debianで使われてるdashよりも重い

最新のbashは5系だがmacOSの/bin/shのbashは3系で古い。
ライセンスのせいで新しいbashにアップデートできない
しかしPOSIX準拠のdashにしようと思っても
bash依存してるスクリプトがあって互換性の問題が出るからdashにもできない

つまりmacOSの/bin/shはPOSIX準拠のdashでもない上に
古いbashという中途半端な状態
83デフォルトの名無しさん
2020/09/10(木) 14:49:08.50ID:aa4WTOXX
>>77
> `chsh -s /bin/zsh`って実行したらbash使えなくなるよね?
さっさと実行しろ。どうせシェルスクリプトの類はbashで動く
明示的にしていて無い限りmacOSでは古いbashでスクリプトを動かすことになる
最新のbashの機能も使えない
84デフォルトの名無しさん
2020/09/10(木) 15:45:56.05ID:uhPbYbU6
>>81
コマンドについてはデフォルトのシェル用に作られたものを、別のシェルでは動きを変えて対応している。

だから同じ名前のシェルでもOSが異なれば、動きが変わる。

Linuxのshはbashがsh風に動かしているだけで、いろんなところがshではない。
85デフォルトの名無しさん
2020/09/10(木) 16:58:53.57ID:aa4WTOXX
>>84
それが>>73のレスと何の関係があるの?
どういうつながりでそういう発言をしたのかを聞いてる
86デフォルトの名無しさん
2020/09/10(木) 18:11:40.04ID:uhPbYbU6
>>85
UNIXは体系的に作られたものではないということ。

それぞれが他人によって作られ、それらを統合しているため、一貫性がないのが普通。

細かい規格も存在していないので、コマンド、スクリプトは環境に依存する。
87デフォルトの名無しさん
2020/09/10(木) 18:21:46.36ID:aa4WTOXX
>>86
だからそれが何の関係があるの?
88デフォルトの名無しさん
2020/09/10(木) 19:21:59.58ID:aD+veWb6
>>87
>>73
後出しの思い付きを垂れたからやろ。
89デフォルトの名無しさん
2020/09/10(木) 19:37:41.08ID:pjCowNAw
なんでだろう?→疑問に思うな!

思考停止か
90デフォルトの名無しさん
2020/09/10(木) 22:48:02.68ID:QyeHeLUF
>>86 って言ってるのに、疑問に思うな思考停止とか読めないやつなんだろな
91デフォルトの名無しさん
2020/09/10(木) 23:37:28.48ID:a+RPoaYl
そもそもUNIXは、たまたまこうなったんじゃなくて、合理的な理由があるんだけど、なんでそれを知ろうとしないの?

UNIXはこういう思想で物を作ってますと宣言してるのに。
92デフォルトの名無しさん
2020/09/11(金) 01:22:31.38ID:hZ3Ldf5L
いやー、たまたまやろ。
根っこにポリシーはあっても、それ以外はかなりのいきあたりばったり。
93デフォルトの名無しさん
2020/09/11(金) 03:59:13.43ID:d1DTUP2t
>>92
それな。"$1" みたいにダブルクォートでくくらないといけないのは
明らかな仕様の失敗だって言われてるし
他の言語と同じようにPOSIXシェル以前やBourneシェル以前との
互換性をある程度保ちながら改良を続けてきた
必ずしも合理的な理由があるわけじゃないよ。作者がたまたま必要だった
必要と思いつかなかった。それだけだろ
94デフォルトの名無しさん
2020/09/11(金) 08:15:02.44ID:xA9OFzcD
>>93
二重引用符で囲まない場合,
どういう利点があるの?
あとそれを説明した記事とかある?
95デフォルトの名無しさん
2020/09/11(金) 08:49:14.16ID:5RqPMo1H
>>94
> 二重引用符で囲まない場合,
> どういう利点があるの?
ない

やりたいことはevalで代用できる
96デフォルトの名無しさん
2020/09/11(金) 11:23:25.35ID:oZv/fWa7
ぬるぽ
97デフォルトの名無しさん
2020/09/11(金) 11:48:58.51ID:+wXdjlpn
>>94
あるというか、そうしなければならない場合も。
引数がなかったときに、クォートされてると、空文字列になってしまうので、意味が変わる。

make $1
みたいなスクリプトだとクォートしてはいけない。
98デフォルトの名無しさん
2020/09/11(金) 13:38:53.46ID:2ygR8GWv
>>97もクォートしないと駄目。嘘を教えるな
99デフォルトの名無しさん
2020/09/11(金) 13:45:46.53ID:GM+a9m1V
>>98
試してから言え。
簡単に嘘呼ばわりすんな。
100デフォルトの名無しさん
2020/09/11(金) 14:05:53.38ID:2ygR8GWv
>>97
だと makeに "install uninstall" という文字を渡すと
エラーにならずに実行できるから駄目
試さなくてもわかる
101デフォルトの名無しさん
2020/09/11(金) 14:32:38.68ID:GM+a9m1V
>>100
じゃあ引数がないときは?
102デフォルトの名無しさん
2020/09/11(金) 14:36:02.66ID:FL1BL0eE
>>101
引数がないのに$1を参照してたら

bash: $1: 未割り当ての変数です

っていうエラーが出るだろ
アホかw
103デフォルトの名無しさん
2020/09/11(金) 15:18:28.07ID:GM+a9m1V
>>102
でねえわ。
-uを前提にすんな。
クズ。
104デフォルトの名無しさん
2020/09/11(金) 15:22:36.50ID:ClWA61Ey
>>103
お前のようなやつが rm -rf "$path/" とか書いて痛い目見るんだろ
ベストなやり方前提にしろ。ベストなやり方で使えない方法を持ってくるな
105デフォルトの名無しさん
2020/09/11(金) 17:22:23.47ID:GM+a9m1V
>>104
勝手に-uをベストに決めつけんな。クズ。
オプションは使うべきときに使え。クズ。

makeみたいな、引数の有無で挙動が変わるコマンドがあって、考えなしに変数をクォートすりゃあいいってもんじゃない、って話をしてんだよ。クズ。
106デフォルトの名無しさん
2020/09/11(金) 17:26:30.94ID:rpshaWn6
考えなしにクォートしなかったから
バグが増え危険なコードになってんだろが
107デフォルトの名無しさん
2020/09/11(金) 17:39:34.54ID:cQZtEKri
ガッ
108デフォルトの名無しさん
2020/09/11(金) 17:48:50.71ID:oZv/fWa7
make組のスクツか
109デフォルトの名無しさん
2020/09/11(金) 17:53:09.84ID:JEMEP9MD
ガッ
なコード書きたいただの甘えん坊だな ID:GM+a9m1V は
110デフォルトの名無しさん
2020/09/11(金) 18:41:08.82ID:GM+a9m1V
>>108
lsでも同じ。
111デフォルトの名無しさん
2020/09/11(金) 19:09:02.73ID:JEMEP9MD
シェルスクリプト書くうえで、
command
command arg
どちらも(前にチェック無しで)書きたいなんてほとんどないだろうに。ほとんどないのはあげつらってるのはお前だけという点で明らかだな

ls で言えば
ls target
ls
結果が違うんだから目的も違う
ls ''
でエラーになる方が大体の目的にあっているだろうにとしか思えない
112デフォルトの名無しさん
2020/09/11(金) 21:09:13.16ID:GJYer3nV
>>92
だから、そう説明してるんだよ。わざわざ作り直したり、同じようなものを作らないのがUNIXの考え方。
113デフォルトの名無しさん
2020/09/11(金) 21:25:03.10ID:GM+a9m1V
>>111
文盲どもめ。
もともと頻度の話ではない。
クォートしないことにも意義がある、というだけ。

実際、既存コマンドのラッパーみたいなものを書くときなんかでは活用できる。
114デフォルトの名無しさん
2020/09/11(金) 21:30:01.59ID:xA9OFzcD
そこでPlan 9 rcですよ。

引用符の種類が一つしかない。
そしてクソほど使いにくいw
115デフォルトの名無しさん
2020/09/11(金) 22:09:45.47ID:JEMEP9MD
>>113
文盲と他人をあげつらってるくせにの文盲はお前じゃ
>クォートしないことにも意義がある
誰も意義がないなんて言ってないだろが

発端は
>それな。"$1" みたいにダブルクォートでくくらないといけないのは
>明らかな仕様の失敗だって言われてるし
だからな。その流れ中にクォートありだけをあげつらっている(?)のは、クォートしないことにも意義があるじゃなく読まれてもしょうがないな
116デフォルトの名無しさん
2020/09/11(金) 22:26:19.12ID:JEMEP9MD
失敗だって言われてるってその例では「全く」wピンと来ないが、

今時名前の中にスペースが入っているの当たり前で、ほぼ必ずダブルクォートで囲まなければならないのがメンドくさいのは確かだな
逆(単にダブルクォート有無の動作が逆ではなく、ダブルクォート無しでもダブルクォート有りの動作、IFSで分かつなら別の表現)っていうのならわかるが、失敗というほどでもねえなとも思われる
多分、伝わってないのは、そういうことだよw
117デフォルトの名無しさん
2020/09/11(金) 22:45:29.66ID:GM+a9m1V
>>115
違うわ、文盲。
>>94
これ。
118デフォルトの名無しさん
2020/09/11(金) 22:54:33.23ID:JEMEP9MD
>>117
話には流れがあるんだな
で、お前の言うことには言うほどでもないってこともあるだろう、そのしつこく延々と>>94にたいしてって言うのは。自分で案に認めてるように 頻度 はそうないらしいしw
文盲の意味を履き違えてるなwてかよくわかってないだろう
119デフォルトの名無しさん
2020/09/12(土) 00:02:20.83ID:8+3Td7f1
$1と書いてるのに$1がないとみなされるのは
利点ではなく欠点
120デフォルトの名無しさん
2020/09/12(土) 01:27:02.50ID:cIbo/3Vm
>>119
シェルの変数は、ただのテキスト置換なレベルだからな。
今さらそんな理想を言っても始まらん。
121デフォルトの名無しさん
2020/09/12(土) 01:28:06.18ID:cIbo/3Vm
>>118
いや、あきらかに文盲であることがはっきりした。w
122デフォルトの名無しさん
2020/09/12(土) 01:28:55.85ID:Q/cMHo3Y
>>120
> シェルの変数は、ただのテキスト置換なレベルだからな。
それはウソ
123デフォルトの名無しさん
2020/09/12(土) 01:51:34.41ID:lVvt6egL
>>121
流れに関係なく、俺の突然言い出したことを理解できないのは文盲というのなら、お前から見たら文盲なんだろな
文盲という意味(厳密な意味じゃない)を理解してないアレだと俺は思うけどな
っていうことで明らかに終わりだな、その投げやり言い放ちだけのレスでw
124デフォルトの名無しさん
2020/09/12(土) 03:31:42.22ID:d3hRbJnw
仮にお前が賢い人間だとするじゃん
仮に相手が馬鹿な人間だとするじゃん
その場合だと争いにならないわけだから争いになってるということはその過程は合っていなかったわけだね
つまり
お前らは馬鹿だってことさ
125デフォルトの名無しさん
2020/09/12(土) 04:17:42.56ID:wMTnI8uy
>>122
コードをどう解釈するのかはシェル内部の仕様。

変数名を文字列として指定し、文字列で指定された変数の値を参照する仕組みもシェルの仕様。

これは結果的にわかりにくい表現、使ううえで間違いやすい仕様として認識されている。

UNIXはたいしたことない欠点をあとから変更する文化はない。

マイクロソフトのように次から次へ新しいものを作っては捨て、作っては捨てということはしない。
126デフォルトの名無しさん
2020/09/12(土) 05:24:39.89ID:Q/cMHo3Y
単に互換性のために修正できないだけ
欠点は欠点。修正できない可哀想
だからPOSIXに新しい言語も追加できない
127デフォルトの名無しさん
2020/09/12(土) 05:39:35.64ID:Q/cMHo3Y
> 変数名を文字列として指定し、文字列で指定された変数の値を参照する仕組み
ウソ
128デフォルトの名無しさん
2020/09/12(土) 05:49:23.00ID:UoolulYH
行為主体(発言主体)の意思ではなく事柄の客観的事実に言及したいのであれば、「ウソ」ではなく「間違い」「事実ではない」といった言葉を用いるべし
129デフォルトの名無しさん
2020/09/12(土) 05:49:59.50ID:Q/cMHo3Y
わかってていってるからウソだろう
130デフォルトの名無しさん
2020/09/12(土) 06:29:49.25ID:UoolulYH
だろうおじさんでしたか...
131デフォルトの名無しさん
2020/09/12(土) 07:07:17.20ID:uZ7XE8wK
本人が否定しなければウソだということ
132デフォルトの名無しさん
2020/09/12(土) 13:09:24.18ID:wMTnI8uy
>>126
そうね。でもそれで大成功をおさめているのがUNIX系。もうすべてがUNIXになりつつある。WindowsのUNIX化もとまらない。

そもそもシェルスクリプトに不満があるのなら、別のスクリプト言語を使えばいい。
133デフォルトの名無しさん
2020/09/12(土) 13:09:48.29ID:65NtGZ7l
仕事でシェルスクリプトを触りはじめたけどすぐに地雷を踏む
134デフォルトの名無しさん
2020/09/12(土) 13:23:20.82ID:6ll5lvdV
macのローカルで作ったシェルをLinuxで動かしたら悲しいことになった
135デフォルトの名無しさん
2020/09/12(土) 14:00:32.63ID:Py28fth2
>>132
> そもそもシェルスクリプトに不満があるのなら、別のスクリプト言語を使えばいい。
/bin/shが他のスクリプト言語になることなんてあるんか?
最小構成で他のスクリプト言語が含まれることなんかあるんか?
POSIXが改定して別のスクリプト言語が使えるようになることなんてあるんか?

現実的にありえない話をしても意味がない
136デフォルトの名無しさん
2020/09/12(土) 14:01:12.85ID:Py28fth2
>>133
まあ初心者さんは何でもそうだよね

>>134
だからPOSIX準拠しろって話だ
137デフォルトの名無しさん
2020/09/12(土) 14:34:38.84ID:tj7slUn6
>>133
例えば?
138デフォルトの名無しさん
2020/09/12(土) 14:58:47.65ID:cIbo/3Vm
>>133
ワナだらけだからね。
しかたないね。
本当に。。。
139デフォルトの名無しさん
2020/09/12(土) 15:02:55.76ID:WICsaeqa
自分が無知なのをごまかすためにわなと言ってる
140デフォルトの名無しさん
2020/09/12(土) 15:05:52.91ID:cIbo/3Vm
>>135
じゃあPOSIXなんか無視すりゃいいんだよ。
自分で好きなのをインストールすれば。

poshが普及したりはしないかな?w
141デフォルトの名無しさん
2020/09/12(土) 15:52:04.79ID:WICsaeqa
自分は良くても他人のイメージを使うときに困るだろ

posh?好きなら自分でイントールしてろw
142デフォルトの名無しさん
2020/09/12(土) 15:58:40.31ID:WICsaeqa
>>140
そのposhとかいうのをmacにインストールしたんだが

$ cd /
posh: cd: too many arguments

で動かないんだがwww

こんなバグソフト普及するわけねーだろwww
143デフォルトの名無しさん
2020/09/12(土) 16:01:00.14ID:WICsaeqa
poshを終了しようとして

$ exit
posh: exit: bad number

www
144デフォルトの名無しさん
2020/09/12(土) 17:12:01.89ID:cIbo/3Vm
>>141
POSIX互換ならなんでもすべて同じ、ではないから、そんな配慮はムダ。

>>142
ツンデレだな?w
まあがんばれ。
145デフォルトの名無しさん
2020/09/12(土) 17:14:06.13ID:l+/2U9kY
https://hoge1http://hoge2https://hoge3

https://hoge1
http://hoge2
https://hoge3
にしようと、sedやperlワンライナーで頑張ってみたけど
https://hoge1http://hoge2
https://hoge3
にしかならないです

どうやればできますか?
146デフォルトの名無しさん
2020/09/12(土) 17:37:28.98ID:lYGfHMY4
>>144
全て同じではないから/bin/shはdashかbashしかありえない
147デフォルトの名無しさん
2020/09/12(土) 17:39:17.54ID:bxqUAjH/
PS > "https://hoge1http://hoge2https://hoge3"; -split "http"| %{if($_ -ne ""){"http" + $_}}
https://hoge1
http://hoge2
https://hoge3
148デフォルトの名無しさん
2020/09/12(土) 18:48:43.31ID:T2sfpjbr
>>145
echo 'https://hoge1http://hoge2https://hoge3' |
sed -e 's/https\{0,1\}:\/\//\
&/g'

いけるけど?
149デフォルトの名無しさん
2020/09/12(土) 22:08:36.54ID:wMTnI8uy
>>135
シェルスクリプトで全部やるなんて言われたら、バークレー校出身者もびっくりだわw
150デフォルトの名無しさん
2020/09/12(土) 23:06:50.77ID:T2sfpjbr
https://mrsh.sh/
A minimal POSIX shell
151デフォルトの名無しさん
2020/09/13(日) 01:46:19.84ID:adiCUzyX
>>150
This project is a work in progress.

はい撤収w
152デフォルトの名無しさん
2020/09/13(日) 01:47:10.49ID:adiCUzyX
>>149
今話をしてるのはシェルスクリプトでやることの話だろ
153デフォルトの名無しさん
2020/09/13(日) 01:59:03.48ID:Z+zAoG6v
よくわからないのが、シェル関数や外部プログラムを作って、呼び出せばいいんじゃないの。

シェルスクリプトの見た目がどうこうという話は不毛だよ。
154デフォルトの名無しさん
2020/09/13(日) 02:53:31.51ID:adiCUzyX
シェルスクリプト(の文法)に不満がある
→別のスクリプト使えばいい。あちこちに頼んで入れてもらえ

馬鹿なの?
どこにシェルスクリプト以外のスクリプト言語が
予めインストールされている世界があるというのか
現実を見たほうがいい
155デフォルトの名無しさん
2020/09/13(日) 04:07:42.04ID:yf/OpS3O
>>154
「予め」とか言ってるのが馬鹿。
自分でインストールしようと思えばする。
でなければしない。
それだけ。
156デフォルトの名無しさん
2020/09/13(日) 06:59:54.51ID:adiCUzyX
だから他人が作ったイメージでは無理だろ
なんでもroot持ってると思うな
157デフォルトの名無しさん
2020/09/13(日) 08:18:10.16ID:Z+zAoG6v
>>154
そのOSの基本シェルがインストールされていないわけがない。

そもそもシェルがなんなのかわかっているのか?
158デフォルトの名無しさん
2020/09/13(日) 08:30:33.36ID:723dk/Fa
>>154
だからシェルスクリプト以外を使えないだろって話をしてる
159デフォルトの名無しさん
2020/09/13(日) 08:30:53.63ID:723dk/Fa
間違え

>>157
だからシェルスクリプト以外を使えないだろって話をしてる
160デフォルトの名無しさん
2020/09/13(日) 10:56:17.02ID:lPS2EOvv
>>147,148
ありがとう

>>147
PS???は初見だったんで調べてみます

>>147
先頭のhttpを除外しようと、頭が固くなってた
161デフォルトの名無しさん
2020/09/13(日) 11:12:17.07ID:gk+8XYjA
>>160
PSはPowerShell、Windowsのやつなので関係ない
調べるだけ時間の無駄
162デフォルトの名無しさん
2020/09/13(日) 11:14:43.75ID:lvPQUdaN
>>151
え,開発途中だったら興味ないの?
163デフォルトの名無しさん
2020/09/13(日) 11:16:03.05ID:gk+8XYjA
開発断念には興味ないよw
164デフォルトの名無しさん
2020/09/13(日) 13:04:46.28ID:lPS2EOvv
>>161
助かりました
165デフォルトの名無しさん
2020/09/13(日) 14:46:18.01ID:fPwxPBWU
>>164
いえいえ
166デフォルトの名無しさん
2020/09/13(日) 17:11:10.48ID:yiIqPN8F
お前じゃない
167デフォルトの名無しさん
2020/09/13(日) 18:32:41.62ID:lvPQUdaN
>>163
This project is a work in progress
168デフォルトの名無しさん
2020/09/13(日) 18:38:01.19ID:8aNWh6BR
>>167
コミット見てみ。もう飽きてる。
169デフォルトの名無しさん
2020/09/13(日) 20:15:09.89ID:lvPQUdaN
>>168
そんなことわかるなんてすごいね。
170デフォルトの名無しさん
2020/09/13(日) 20:50:53.96ID:Z+zAoG6v
>>159
そもそもおまえはUNIX、Linuxをインストールしたことがあるのか?

かなり不思議なことを言っているぞ?

sedやawkは何か説明できる?
171デフォルトの名無しさん
2020/09/13(日) 20:53:16.41ID:qg7N5frC
Ubuntuのインストールを学ぶべき。
172デフォルトの名無しさん
2020/09/13(日) 21:07:19.31ID:Z+zAoG6v
Linuxをインストールしたら、Perlもデフォルトでインストールされることも知らないんだろうな。

そもそもシェルの概念がわかってないと、シェルスクリプトがシェルのスクリプトだとおそらく理解できない。
173デフォルトの名無しさん
2020/09/13(日) 21:18:59.72ID:Z+zAoG6v
別にシェルからすれば、シェルスクリプトではなく、実行ファイル形式を橋渡ししてマシン語でやり取りしてもらってもかまわない。

ただし、UNIXは既存のものの組み合わせでできるのであれば作らないという思想なので、C言語でゴリゴリ作るやつは批難される。
174デフォルトの名無しさん
2020/09/13(日) 22:50:04.20ID:yf/OpS3O
>>172
デフォルトって何?w
Perlはインストールされなくてもおかしくないやろ。
175デフォルトの名無しさん
2020/09/13(日) 22:53:06.96ID:yf/OpS3O
>>173
ゴリゴリつくるヤツがいたから、Gitが存在するんやで!w

Linux業界に「思想」なんかない。
あっても、何かの拍子にコロッと変わる。
あんまり真に受けないほうが。
176デフォルトの名無しさん
2020/09/13(日) 23:54:22.32ID:w3Y31Eld
Windows10, WSL, Ubuntu 18.04 では、最初から、Python3 も入っている。
anyenv, asdf などで、Ruby, Node.js などの好きなバージョンも入れられる

file `which python`
/usr/bin/python: symbolic link to python2.7

file `which python2`
/usr/bin/python2: symbolic link to python2.7

file `which python3`
/usr/bin/python3: symbolic link to python3.6
177デフォルトの名無しさん
2020/09/14(月) 00:00:43.38ID:8/TQSAVT
>>175
>>173はUnixの話をしているのに,
Linuxの話にすり替えるべきじゃないな。

「Linuxの思想はない」かも知れないが,
>>173が言っているのはUnix哲学だ。
178デフォルトの名無しさん
2020/09/14(月) 00:39:00.87ID:LBeWsbwt
>>174
おまえは画面まっくらで、いくらキーを打っても何もできない状態で使うのか?

組み込みならわかるんだか。
179デフォルトの名無しさん
2020/09/14(月) 00:43:01.28ID:LBeWsbwt
>>177
あのさ、LinuxはUNIXをPCアーキテクチャのハード用に、初めは個人が作ったものなんだよ。

UNIXの仕様が完全にはわからなくて、Linuxは少し異なるものになってしまった。

だから、LinuxはUNIXでないと説明される。しかし、UNIXの定義はPOSIX程度しかないため、UNIXから見ればLinuxもUNIXに含めてもいいかなあレベルになる。
180デフォルトの名無しさん
2020/09/14(月) 00:46:08.13ID:LBeWsbwt
>>175
あのね、Linuxはレッドハット社がほぼ標準を決めていて、基本的なところが大きく変わることはない。

あなたの言っている部分は枝葉の部分。
181デフォルトの名無しさん
2020/09/14(月) 01:28:26.98ID:arqUoPz9
実際に存在するLinuxの話をしましょうよw

$ docker run -it alpine
/ # perl
/bin/sh: perl: not found
/ # python
/bin/sh: python: not found
/ # pyton3
/bin/sh: pyton3: not found
/ # ruby
/bin/sh: ruby: not found
182デフォルトの名無しさん
2020/09/14(月) 01:51:11.45ID:Cxw6q39C
>>177
であれば、ほとんど死んだようなOSの哲学を語ることに現実の意味はない。
考古学者以外は。w
183デフォルトの名無しさん
2020/09/14(月) 01:58:31.80ID:8w1wBNml
Alpine は、5MB しかない。
何も入っていない

それに、Ruby on Rails, Node.js などを入れて使うもの
184デフォルトの名無しさん
2020/09/14(月) 02:31:04.77ID:Cxw6q39C
>>178
サーバー用最小ならおかしくない。

まさかデフォルトって、GUIデスクトップ用のことを言ってないよなあ?
185デフォルトの名無しさん
2020/09/14(月) 02:41:43.07ID:LBeWsbwt
>>184
おまえさ、CUIの画面があるのがあたりまえだと思っているだろ?

CUIそのものがシェルなんだよ。
186デフォルトの名無しさん
2020/09/14(月) 02:43:36.81ID:LBeWsbwt
コンピューターの仕組みを理解していないのにいちいち見当違いのことを書くんじゃない。
187デフォルトの名無しさん
2020/09/14(月) 09:57:03.60ID:Cxw6q39C
>>185
だから何?

>>186
自己紹介乙。w
188デフォルトの名無しさん
2020/09/14(月) 10:40:45.77ID:S/jhW9z+
Perlが入ってないLinuxがあるってこともしらんのか
189デフォルトの名無しさん
2020/09/14(月) 10:41:04.73ID:S/jhW9z+
しかも有名でよく使われてるディストリ
190デフォルトの名無しさん
2020/09/14(月) 17:25:24.86ID:LBeWsbwt
揚げ足取りは久しぶりに
191デフォルトの名無しさん
2020/09/14(月) 17:37:46.13ID:dr1ZmQsx
>>178
どうしてperlかなかったら画面真っ暗で文字が打てないわけ?
192デフォルトの名無しさん
2020/09/15(火) 01:42:38.92ID:Yms7aROo
シェルがなかったらと書いてあるだろ。
しつこいけどシェルは人間とのユーザーインタフェースだよ。
シェルがなければ人間は何もできない。
193デフォルトの名無しさん
2020/09/15(火) 01:43:33.60ID:Yms7aROo
コンピューターは必ずCUIの画面があると思ってしまうのだろうか?
194デフォルトの名無しさん
2020/09/15(火) 03:10:33.47ID:0TDTec2Q
言葉遊びには意味がない。
195デフォルトの名無しさん
2020/09/15(火) 05:57:39.18ID:+pcRVQQ5
シェルはLinuxに必ずインストールされているが
Perlはインストールされてないものが実際に存在し使われている

話はこれだけだろ
196デフォルトの名無しさん
2020/09/15(火) 08:21:54.14ID:QH5y4eUt
>>192
お前コミュ力なさすぎ…
perlがインストールされてなくてもおかしくないってレスに対して、
なんでシェルがなかったら画面真っ暗なんて回答になるんだよ
197デフォルトの名無しさん
2020/09/15(火) 11:38:13.21ID:Ru6NgLud
このスレの人ってどうでもいい事になんでこんなすぐ必死になるの?
198デフォルトの名無しさん
2020/09/15(火) 13:03:13.91ID:DboEcGlM
>>197
そしてなぜ黙ってればいいのに
こんなことを書き込んでしまうの?
199デフォルトの名無しさん
2020/09/15(火) 13:59:53.23ID:y5g42ZKf
真面目で、相手の誤りを修正してあげたいから。
バカで、自分の誤りを認識できないから。

とか、人それぞれに理由があるやろ。
まあ、最大の理由はヒマだから。w
おまえもな。
200デフォルトの名無しさん
2020/09/15(火) 15:48:33.27ID:Yms7aROo
>>196
デフォルトというのはLinuxだったら、bashシェルがインストールされて起動するということ。PerlはLinuxの大半のインストーラが標準設定でインストールしてしまう。
201デフォルトの名無しさん
2020/09/15(火) 16:02:10.84ID:0TDTec2Q
>>200
もとの話とつながってないぞ!w
やりなおし!
202デフォルトの名無しさん
2020/09/15(火) 17:23:49.50ID:SdJ7XIqb
>>200
bashがインストールされてない環境はあるし実際によく使われている
203デフォルトの名無しさん
2020/09/15(火) 18:41:25.99ID:DboEcGlM
これ何の話だっけ。
「シェルが存在せずにPerlなどが存在する環境」

「シェルは存在するがPerlは存在しない環境」
の比較?
いや,違うのかもしれないが,
だとするとPerlがどうとかいう話がどこから出てきたのか分からんw
204デフォルトの名無しさん
2020/09/15(火) 18:52:17.80ID:SdJ7XIqb
これだろ?

172 名前:デフォルトの名無しさん[] 投稿日:2020/09/13(日) 21:07:19.31 ID:Z+zAoG6v [4/5]
Linuxをインストールしたら、Perlもデフォルトでインストールされることも知らないんだろうな。

200 名前:デフォルトの名無しさん[] 投稿日:2020/09/15(火) 15:48:33.27 ID:Yms7aROo [3/3]
>>196
デフォルトというのはLinuxだったら、bashシェルがインストールされて起動するということ。


perlもbashも入ってない環境が実際にあってよく使われている
205デフォルトの名無しさん
2020/09/15(火) 19:01:42.43ID:1jncYIE/
極論が好きな人が居るねぇ
root権限でのパッケージ導入を依頼するでもOS/ディストリビューションの選定提案をするでもVMを生やすでもコンテナを建てるでも何でも使える手は使って、自分の手段と環境の中で一番楽な地獄を使うのがいい
手を尽くしてもシェルスクリプト以外使えないか、手を尽くすのがダルいならそりゃそのままシェルスクリプトを使うしかないのはそれはそう
ただ現代においてシェルスクリプトしかスクリプト言語を使えない上に新規導入もできない案件が多数派だし普通だよって言われると本当?って思うしその立場に同情するまである
206デフォルトの名無しさん
2020/09/15(火) 19:14:03.32ID:0TDTec2Q
最近はコンテナ系がはやって、ガチガチの最小構成も現実的やろ。
昔なら、とりあえずあれこれ入ってるし入れるのがふつうだったが。
207デフォルトの名無しさん
2020/09/15(火) 20:21:38.62ID:DboEcGlM
>>206
これ
208デフォルトの名無しさん
2020/09/15(火) 20:36:21.55ID:Bkm+Im76
>>197
1つの道具しか使えない人や1つの道具への依存度の高い人は
その道具の必要性を下げる話や短所を指摘されると
無意識に自分の存在意義を否定された(攻撃された)と感じるので必死になる

特定の道具への精神的依存度の高い人たちが集まってる所ではよくあること
209デフォルトの名無しさん
2020/09/15(火) 20:40:12.28ID:d9JYg3Jf
>>206
そういう時はGoで書いてもいいよね?
210デフォルトの名無しさん
2020/09/15(火) 20:49:49.54ID:st0X4sID
コンテナ向け最小構成ならそれこそコンテナ生やせばいいじゃん…
211デフォルトの名無しさん
2020/09/15(火) 21:05:24.21ID:0TDTec2Q
>>210
PerlコンテナとかPythonコンテナとかつくるの?
粗なの?密なの?w
212デフォルトの名無しさん
2020/09/15(火) 21:06:37.35ID:0TDTec2Q
>>209
C++23で書こう!w

しかし、今さら使いやすそうになってきたな。。。
213デフォルトの名無しさん
2020/09/15(火) 21:22:33.55ID:bVn8kGX2
>>209
ほんの数行で作れるシェルスクリプトの代わりに
goを使うのは手間がかかりすぎる
214デフォルトの名無しさん
2020/09/15(火) 21:23:36.57ID:bVn8kGX2
なんでもPython、なんでもPerl、なんでもGoっていうのは
単に勉強したくないだけなんだろうなって思ってる
215デフォルトの名無しさん
2020/09/15(火) 21:49:15.52ID:DboEcGlM
Goがやろうとしてる「どこでも動く!,依存性最小!」って
それまさにPOSIXシェルが数十年前から実践してることなんだけどねw
216デフォルトの名無しさん
2020/09/15(火) 22:09:41.62ID:5uVwOM3u
YouTube で有名な雑食系エンジニア・KENTA は、
初心者が進む道を、サーバー側言語のRuby → Go を王道としてる

この2つ以外は、出てこない

GUI 系は、画面の手直しなどで、工数がかさむ。
C#, dot.net などのWindows 系は、いらない。
Java などの土方系も、いらない。
Elixir, Rust は、普及へのchasm・溝を超えられなかった

言語よりも、Docker, Kubernetes, AWS などの、サーバー構築・新規案件を重視する。
上流工程・新規案件の方が、価格交渉力が強いから
217デフォルトの名無しさん
2020/09/15(火) 22:27:04.19ID:5aHfCmvT
>>208
なるほどね〜

コンプレックスの裏返しみたいなものか
218デフォルトの名無しさん
2020/09/15(火) 23:33:10.49ID:Tmf/kgmE
「シェルスクリプトで書いていたもの」を他の言語に
置き換えることで楽になることなんてないと思っている

※最初からシェルスクリプトで書いてないものの話ではない
219デフォルトの名無しさん
2020/09/16(水) 00:01:35.11ID:MNPDZagX
>>211
単芝生やしてるけどそれこそDockerHubにPythonのOfficial Image普通にあるよ
正直お互い想定してる状況が違い過ぎてるような気もするが
220デフォルトの名無しさん
2020/09/16(水) 00:07:40.59ID:NJW1Qx1P
1. PythonやPerlが入ってない環境がある
2. シェルスクリプトで実現できる
3. PythonやPerl入れればいいじゃん!
4. PythonやPerlで書き直す
5. コードがシェルスクリプトよりも面倒になってる

ほとんどがこれ
シェルスクリプトで実現できることを
他の言語で書いたら余計面倒になる

面倒になるのに他の言語で書こうとするやつは
単に(効率的な)シェルスクリプトを勉強したくないだけ
221デフォルトの名無しさん
2020/09/16(水) 00:18:53.14ID:fQIibdhg
はしゃいでるところに水を差して悪いけどシェルスクリプトに必要な心得ってなんですかね?
素人ながらとりあえず動く物は作れたけどifだらけのクッソ汚いコードなんで修正したい
オプションもgetopts知らずにifと[[でなんとかしてる
bashの基本は押さえたけどLinuxの常識までは網羅できてないんで
222デフォルトの名無しさん
2020/09/16(水) 00:26:37.24ID:NJW1Qx1P
ifだらけだからクソ汚いってことにはならない

もしキレイなコードとやらを知ってるのであれば
それをシェルスクリプトでやればいいだけ
223デフォルトの名無しさん
2020/09/16(水) 00:40:05.89ID:BkyZoSl2
>>219
そりゃああるやろ。w
あるからなんなの?
コンテナのまま実運用で使うの?
224デフォルトの名無しさん
2020/09/16(水) 00:41:31.46ID:67D9s6fy
ほんとに必死だね
よほどコンプレックスが強いんだろうな

シェルスクリプトに固執しないとダメな状況ってそうそうないだろうに
225デフォルトの名無しさん
2020/09/16(水) 00:49:16.66ID:NJW1Qx1P
シェルスクリプトに固執っていうか、シェルスクリプトが最善な場合に
シェルスクリプトを使うってだけだよね
226デフォルトの名無しさん
2020/09/16(水) 01:41:09.00ID:BkyZoSl2
>>224
スレタイが読めないの?w
どっちが固執してるんだか。。。
227デフォルトの名無しさん
2020/09/16(水) 02:44:08.53ID:0ZaEBr0v
>>221
入門UNIXシェルプログラミングという名著を読めばよい。
228デフォルトの名無しさん
2020/09/16(水) 02:45:36.69ID:0ZaEBr0v
>>226
シェルスクリプトと、コマンド、外部プログラムの呼び出しはシェルスクリプトではないからな?
229デフォルトの名無しさん
2020/09/16(水) 02:48:58.69ID:0ZaEBr0v
シェルのスクリプトだから、シェルスクリプトの構文だけの話をすると、このスレは過疎化すると思うぞ。
230デフォルトの名無しさん
2020/09/16(水) 06:01:38.56ID:NJW1Qx1P
だからといって外部コマンドのオプションやら文法の話をしたって意味ない
そういうのはmanページ見ろで終わる話
231デフォルトの名無しさん
2020/09/16(水) 10:12:38.47ID:+0jueX8G
シェルスクリプトにこだわることの是非はともかく,
このスレに住み着くのは理があるわけだけど,
一方でPythonやRubyに固執している人が
このスレに居座りつづける理由が不明。

このスレはシェルスクリプトのことを話すスレなんだから,
Perl,Python,Ruby,Goなんかにこだわってても
ストレス溜まるだけだと思うんだけど……。
しかも不毛だしw
232デフォルトの名無しさん
2020/09/16(水) 10:14:49.79ID:+0jueX8G
>>229
過疎化してなにか問題あるか?
シェルスクリプトの構文で質問がある場合は
ageればいいだけだし,
技術系のスレは勢いがなくても一定数の閲覧があるんだから
それで全く問題ない。

もしかしてなんJとかその辺りと同じような考えで
「過疎化する」=「悪」みたいに捉えちゃってる?
233デフォルトの名無しさん
2020/09/16(水) 10:33:38.10ID:+Zum6F6u
シェルスクリプトとPythonやRubyの使い方は全く違っていて
シェルスクリプトの代替にはならないんだよ

だってPythonやRuby言語がシェルになるかい?
そういうのもあるみたいだけど使わないだろ

lslの代わりにPythonやRubyの関数を使えってことだよ
やるかい?

シェススクリプトはそういう手作業の操作をスクリプトにまとめたもので
「手作業の操作」そのものであることに価値があるんだよ
234デフォルトの名無しさん
2020/09/16(水) 10:34:04.05ID:+Zum6F6u
× lslの代わりにPythonやRubyの関数を使えってことだよ
○ ls -alの代わりに
235デフォルトの名無しさん
2020/09/16(水) 10:40:48.87ID:2aHyKEnC
シェルスクリプトを使わないほうがいいケースや使うべきでないケースを判断出来ないようなやつは技術力が低くて使えない

だからリアルでは軽んじられる
その反動がネット上でのマウンティング合戦

不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術への依存度を下げるといい
236デフォルトの名無しさん
2020/09/16(水) 10:44:06.38ID:BkyZoSl2
>>235
シェルスクリプトを使ったほうがいいケースや使うべきであるケースを判断出来ないようなやつは技術力が低くて使えない

だからリアルでは軽んじられる
その反動がネット上でのマウンティング合戦

不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術への依存度を下げるといい
237デフォルトの名無しさん
2020/09/16(水) 10:52:37.21ID:MNPDZagX
>>223
当然その他個別に必要な要素はDockerfileに書き出すけど、実運用でコンテナを使えるのがDockerHubやオーケストレーションツールを含めた現代コンテナ運用の強みだし革新性だと思ってるよ

なんていうか「シェルスクリプトの文法や仕様が嫌い過ぎてシェルスクリプト数行で済むものにも別の言語を導入して書こうとする1byteもシェルスクリプトを書きたくない人間」に対してシェルスクリプトの可搬性や有用性・必要性を説こうとしてる人と
「シェルスクリプトの文法や仕様でウッとなってしまう嫌な部分が出てくるような複雑さ・処理対象・処理内容の、シェルスクリプトで扱うのにある意味不適な案件がある人間」に対して別の言語や環境で扱うのも選択肢だよって説こうとしてる人が争ってる感
238デフォルトの名無しさん
2020/09/16(水) 10:58:35.61ID:VpAz8kB7
格言「すべての道は、Vagrant に通ず」
Homebrew が、何十年も他の言語で書かれないわけ

つまり、システム構築運用は、できる限りRuby で書く。
シンプルなものに限って、シェルスクリプト
239デフォルトの名無しさん
2020/09/16(水) 11:10:41.03ID:Uxf3IaQ5
このスレのおかげでシェルだけでWebサイト作れました!
RubyやPythonなんて学ぶ価値無いですね
240デフォルトの名無しさん
2020/09/16(水) 11:36:55.73ID:+0jueX8G
>>235
PythonやRubyを使わないほうがいいケースや使うべきでないケースを判断出来ないようなやつは技術力が低くて使えない

だからリアルでは軽んじられる
その反動がネット上でのマウンティング合戦

不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術へ

こうですか? 分かりません!
241デフォルトの名無しさん
2020/09/16(水) 11:38:45.59ID:+0jueX8G
いいかげん下らなくなってきたけど,ともかく
「シェルスクリプトにこだわるな! Python・Rubyを使え!」
という主張は同時に「Python・Rubyにこだわっている」わけなんだから,
いくら「こだわり」をバカにしてマウント取ったところで,
ものすごい勢いで自分に跳ね返ってくるだけっていうねw
242デフォルトの名無しさん
2020/09/16(水) 11:58:19.63ID:sxVBKKDL
え、両方使いなよって主張じゃないの?
そういうレスした本人じゃないから知らんけど
243デフォルトの名無しさん
2020/09/16(水) 12:04:24.33ID:+Zum6F6u
>>237
> 「シェルスクリプトの文法や仕様でウッとなってしまう

それってようするにオブジェクト指向言語にそまってて
関数型言語に抵抗があるやつと一緒なんだわ

パラダイムが同じならそれもわかるけど、シェルスクリプトは異なるパラダイムなので
単に異なるパラダイムのものをつけつけられないだけ
244デフォルトの名無しさん
2020/09/16(水) 12:09:15.41ID:+Zum6F6u
>>238
HomebrewのインストーラーをRubyからBashに書き直しました!
https://itchyny.hate
nablog.com/entry/2020/03/03/100000

> 将来的にmacOSデフォルトにRubyやPythonが含まれなくなる (参考リンク)。

こうなる
245デフォルトの名無しさん
2020/09/16(水) 12:39:23.56ID:BkyZoSl2
>>237
シェルスクリプト自体に文句があるのはしゃあない(つーか、ないヤツはおらんやろw)が、全否定したらこのスレではただのあらしでしかない。
さらに、最近の一部のヤツはとくにバカっぽかったからな。
246デフォルトの名無しさん
2020/09/16(水) 12:41:43.36ID:0bH7BLR9
状況に応じて使う道具を変えなよって言われてるのに、PythonやRubyを持ち出して否定したがるのはそれらを使えないことへのコンプレックスが強いから

どの技術でもその限界や短所を理解してないやつが多ければ要注意
247デフォルトの名無しさん
2020/09/16(水) 12:42:57.45ID:uLph0UBy
シェススクリプトへの文句というより
シェルスクリプトが改善されないことに文句がある
何年停滞してるんだ
248238
2020/09/16(水) 12:55:13.00ID:VpAz8kB7
ハーバード大学には、Ruby on Rails の授業がある。
他の言語だと、数年以上遅れて、その間にシェアを取られてしまうから

他の言語では、複雑さが並みじゃないから、簡単に作れない。
かなりの費用・期間が掛かるから、そういうプロジェクトを起ち上げられない

例えば、Ruby以外のプロジェクトで、半年過ぎると取りやめになる。
サーバー側言語では、Ruby, Go しか使われない
249デフォルトの名無しさん
2020/09/16(水) 13:03:02.60ID:D69h0Ren
PythonとかRubyみたいな簡単な言語使ってる雑魚がイキってるのマジで笑える
250238
2020/09/16(水) 13:04:02.76ID:VpAz8kB7
例えば、Ruby の数値リテラルには、_ を含めることができる

1_000_000_000 # 1000000000
0xffff_ffff # 0xffffffff

この機能がないと、下みたいに、コメントを書かないといけないし、確かめるのも大変

1000000000 # 1_000_000_000

Ruby では、こういうように、バグを減らす工夫をしている。
だから、こういうことを思いつく日本人は、smart だって言われる
251デフォルトの名無しさん
2020/09/16(水) 13:11:20.74ID:MNPDZagX
>>243
どこの誰の事を異なるパラダイムを受け付けられない人間としてるのか知らないけど、パラダイムが異なれば当然向き不向きがあるよね?
その上で私は
> シェルスクリプトの文法や仕様でウッとなってしまう嫌な部分が出てくるような複雑さ・処理対象・処理内容の、シェルスクリプトで扱うのにある意味不適な案件
っていう「シェルスクリプトのパラダイムに向かない作業」を話題の前提にしてる人が他の言語を提案してるんじゃないの?って話しかしてないのよ

「何らかの作業をシェルスクリプトのパラダイムに向かない作業だと感じるのは、そいつがパラダイムを受け付けないだけで不向きな作業だからではない」という可能性は間違いなくある
ただ可能性はあるけれど恒真とは思わない
私がシェルスクリプトに向いてない作業はあると思ってるから
もしあなたがシェルスクリプトに向かない作業なんてないと思ってるなら何も言わない
この先は気持ちの問題なので
252デフォルトの名無しさん
2020/09/16(水) 14:56:05.79ID:+0jueX8G
ほとんどの人が「別にPythonでもRubyでもいいけど,
そうじゃない選択肢としてシェルがある」というだけの話をしてるのに

「いまだにシェルを使ってるのは時代遅れ!」
「シェルにこだわるな!Python・Rubyを使え!(こだわり)」
となるのはなぜなのか。

あと一部の奴が「シェル最高!世の中にはこれしか要らない!」みたいな
主張をしてるのも問題。
253デフォルトの名無しさん
2020/09/16(水) 15:03:48.26ID:BkyZoSl2
>>250
PerlにもPythonにもC#にも、別の文字ならC++にもある。
Rubyがえらいわけではない。
もうすでにあたりまえ。
254デフォルトの名無しさん
2020/09/16(水) 15:06:08.22ID:BkyZoSl2
>>252
> あと一部の奴が「シェル最高!世の中にはこれしか要らない!」みたいな
> 主張
どれ?
対比でそう返しただけじゃないの。
255デフォルトの名無しさん
2020/09/16(水) 18:42:23.15ID:vxZ/INdB
技術力のある人はシェルスクリプトの短所や限界をよく理解している

Google曰く
If you are writing a script that is more than 100 lines long,
you should rewrite it in a more structured language now.
https://google.github.io/styleguide/shellguide.html#s1.2-when-to-use-shell

GitLab曰く
we recommend staying away from shell scripts as much as possible.
A language like Ruby or Python is almost always a better choice.
https://docs.gitlab.com/ee/development/shell_scripting_guide/#avoid-using-shell-scripts
256デフォルトの名無しさん
2020/09/16(水) 19:16:11.22ID:PhvdJ7XH
>>255
全てに当てはまることだけど、理由が書いてないコーディング規約はクソ
257デフォルトの名無しさん
2020/09/16(水) 19:59:30.26ID:YseoXyv4
そういやユニケージで作られた例のシステム、ユニケージを捨てて
全部作り直したそうだな
258デフォルトの名無しさん
2020/09/16(水) 20:58:02.47ID:VpAz8kB7
同じディレクトリ内にある、yarn.js ファイルを呼ぶラッパーである、yarn ファイル・コマンド
#!/bin/sh
argv0=$(echo "$0" | sed -e 's,\\,/,g')
basedir=$(dirname "$(readlink "$0" || echo "$argv0")")

case "$(uname -s)" in
Darwin) basedir="$( cd "$( dirname "$argv0" )" && pwd )";;
Linux) basedir=$(dirname "$(readlink -f "$0" || echo "$argv0")");;
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

command_exists() { command -v "$1" >/dev/null 2>&1; }

if command_exists node; then
if [ "$YARN_FORCE_WINPTY" = 1 ] || command_exists winpty && test -t 1; then
winpty node "$basedir/yarn.js" "$@"
else
exec node "$basedir/yarn.js" "$@"
fi
ret=$?

# Debian, Ubuntu では、node ではなく、nodejs
elif command_exists nodejs; then
exec nodejs "$basedir/yarn.js" "$@"
ret=$?
else
>&2 echo 'Yarn requires Node.js 4.0 or higher to be installed.'
ret=1
fi

exit $ret
259デフォルトの名無しさん
2020/09/16(水) 20:59:44.06ID:PhvdJ7XH
ユニケージはシェルスクリプトじゃないからなぁ
シェルスクリプトを使って作られたCOBOL用関数みたいなもん

ユニケージを使った途端、シェルスクリプト言語から
COBOL言語に開発スタイルが変わる
260デフォルトの名無しさん
2020/09/16(水) 21:09:23.04ID:PhvdJ7XH
シェルスクリプトを始めた頃は
> usp Tukubaiは短期間低コストで企業システムを構築するエンタープライズ向けコマンド群。
> ユニケージ開発手法で利用するコマンド群であり、
https://uec.usp-lab.com/tukubai_man
に便利なコマンドがあるんじゃないか?って思ったんだよ

実際に見てみたら完全にゴミ

> ctail(1) ファイルの末尾n行を削って出力
例えばこれとかhead -n -10でいいじゃんとか

> count(1) 同じキーの行数をカウント
それをawkでやるのがシェルスクリプトでしょとか

そういうのばかりで、

根底に CSVならぬ、空白区切りのファイル形式を使うという前提があって
そのデータ操作するためのコマンド群でしかないことに気付いた
261デフォルトの名無しさん
2020/09/16(水) 21:16:09.82ID:PhvdJ7XH
ユニケージのコマンドに絶望した後
クソコマンドをまともにしてやろうと思ったが
クソな理由はコマンドではなくデータ形式だったので
どうしようもないというねw

データ形式を空白区切り前提にしなければ、
通常のシェルスクリプトで使うコマンドを使うことになるが
ユニケージのコマンドとは全く異なる仕様になる
直しようがない
262デフォルトの名無しさん
2020/09/16(水) 21:31:53.79ID:fQIibdhg
一日やってるとか暇か
ユニケージを導入して後悔してるとこならあったぞ
https://www.hands-lab.com/tech/entry/5600.html
263デフォルトの名無しさん
2020/09/16(水) 21:36:41.16ID:66kQJWEh
>>255
>a more structured language

↑ここがポイントだろうね
264デフォルトの名無しさん
2020/09/16(水) 22:04:09.41ID:RIbUq78m
ポイント? なんでそう思ったの?
根拠がないから具体的ではないだけ
265デフォルトの名無しさん
2020/09/16(水) 22:36:59.59ID:+0jueX8G
どうでもいいんですけど,
シェルスクリプト以外の話題なら他所でやってもらえません?
もちろんシェルスクリプトの存在論も含めて。

テンプレくらい読んでくれよな〜頼むよ〜
266デフォルトの名無しさん
2020/09/16(水) 22:48:58.53ID:AIq8Iw+F
長々とどうでもいいこと書き綴ってスレ荒らしてたのお前じゃん
267デフォルトの名無しさん
2020/09/16(水) 22:56:04.59ID:BkyZoSl2
>>264
わかる人にはわかる。
わからない人のほうがその理由を内省するべき。

ただ、Bashは関数と連想配列のおかげで、それなりの構造化はできてるな。
逆に言うと、よっぽどややこしいデータ構造を組むのでなければ、シェルスクリプトでも可、ってことか。w
268デフォルトの名無しさん
2020/09/17(木) 05:40:41.40ID:arhYEtgP
>>267
分かる人が理由を書くべきだろ
こういう意味不明なこと言うから信用されないんやで
269デフォルトの名無しさん
2020/09/17(木) 06:53:22.12ID:7lkKgDUb
まあ結局
「シェルスクリプトでおかしな書き方をするやつは
Pythonで書こうがRubyを使って メタプログラミング() をしようが
下手な書き方をすることに変わりない」
ってことよね。
270デフォルトの名無しさん
2020/09/17(木) 07:33:41.05ID:hnEDQboZ
シェルスクリプトから○○言語に変更したってやつは
変更した結果どうなったのか、そのコードを見てみたいんだが
シェルスクリプトで一体何をしていたのか?
271デフォルトの名無しさん
2020/09/17(木) 09:41:38.06ID:v24DPghR
Pythonさえやっておけばシェルスクリプトやる必要ないってことじゃないですかやったー!
272デフォルトの名無しさん
2020/09/17(木) 09:46:01.87ID:HvzSxf7x
Pythonの関数(特別に作られたものではなく標準関数)を使うという前提の
シェルが作れるものなら作ってみて欲しいね
Python以外でもいいけど
273デフォルトの名無しさん
2020/09/17(木) 09:53:36.15ID:d9Y9RH6u
>>268
べつに信用せんでもええで。w
相手にしないだけの話やから。
274デフォルトの名無しさん
2020/09/17(木) 10:32:54.56ID:chlfrU3v
>>273
信用されないというのは「その他大勢の人から」という意味だよ
>>268の内容は俺がお前を信用しないという宣言じゃなくて
その他の人に対して、お前は信用に値しないという宣言をしている
275デフォルトの名無しさん
2020/09/17(木) 10:53:19.56ID:PVLBY2eY
>>267
POSIX準拠じゃないから使えないねw
276デフォルトの名無しさん
2020/09/17(木) 11:04:29.11ID:d9Y9RH6u
>>274
そんな個人的アホ宣言はいらんで。w
「その他大勢の人から」とか少数側が主張しても意味なんかあらへん。
277デフォルトの名無しさん
2020/09/17(木) 11:05:00.12ID:Ebl/PrBy
bash特有の機能を使おうと思った時点で
それはシェルスクリプトでやるべきことじゃないんだろうな
もちろんちゃんとシェルスクリプトのスタイル(関数型)でコーディングするのは大前提
ようするにシェルスクリプトはPOSIX準拠の機能で十分なんだよ
278デフォルトの名無しさん
2020/09/17(木) 11:47:37.44ID:6qIvJTFZ
シェルスクリプトのスタイルは関数型!

さすがシェルスクリプターの考えることは次元が違うぜ
279デフォルトの名無しさん
2020/09/17(木) 12:00:55.65ID:Ebl/PrBy
>>278
https://qiita.com/piroor/items/77233173707a0baa6360

ところで、「流入してくるデータを加工して返却する」「ステートレスな」処理が得意で、
「内部で複雑な状態を持つ必要のある」「ステートフルな」処理が苦手だというのは、
関数型言語にも見られる特徴です。14

そう考えると、シェルスクリプトで凝った事をしようとする人があまり多くないのも頷けます。
「関数型言語は難しい」と言われる事が多いですが、他の言語とパラダイムが違う言語だと思えば、
これまでのプログラミングのパラダイムに囚われたままでは理解が進まないのも当然です。


14. 実際、関数型言語が得意な人にこの説を披露してみた所、
「関数型言語というのはストリーム型のデータを処理するという所が
キモ(なので、解釈としてそう外してはいない)」という感じの感想を頂きました。 ?
280デフォルトの名無しさん
2020/09/17(木) 12:33:52.60ID:7lkKgDUb
沈黙してて草
281デフォルトの名無しさん
2020/09/17(木) 12:45:52.84ID:NHfa1bvj
関数型Elixir は、map・パイプラインばっかり

元の要素を変更しない。
新たに要素を作りながら、変換していく
282デフォルトの名無しさん
2020/09/17(木) 14:19:40.85ID:HGhOp2pI
>>279,280
関数型言語にも見られる特徴があることを関数型とは言わない

知らないなら関数型なんて書かずにパイプでつなぐスタイルとでも書いとけば恥かかずに済んだのにね
283デフォルトの名無しさん
2020/09/17(木) 14:32:15.94ID:+vk10SUH
関数型言語と同様の特徴があるなら、関数型スタイルでいいだろw
関数型言語だって言ってないんだからさぁ
284デフォルトの名無しさん
2020/09/17(木) 14:32:58.85ID:+vk10SUH
> パイプでつなぐスタイルとでも書いとけば恥かかずに済んだのにね
パイプ以外も関数型にみ見られる特徴があるので
関数型スタイルでいいだろw
285デフォルトの名無しさん
2020/09/17(木) 15:23:37.29ID:d9Y9RH6u
>>283
ダメ。
関数型は、結果を呼び出し側に戻すことに意義がある。
処理の流れも記述の形式も、むしろ何も似ていない。
もとの文で「特徴」と言っているが、カテゴリの基準にしていい意味ではない。

シェルスクリプトは、フィルタ型とかパイプライン型とか呼べばいいのでは。
286デフォルトの名無しさん
2020/09/17(木) 16:19:03.20ID:kAbaS/2M
> 関数型は、結果を呼び出し側に戻すことに意義がある。

結果を呼び出し側に戻すなんて、どの言語でも同じじゃん
正しく説明することすらできない程度なら語らないようがいいよ
墓穴掘るだけだから
287デフォルトの名無しさん
2020/09/17(木) 18:06:50.53ID:7lkKgDUb
その理屈で言うなら
C言語は「C言語型」だし
Elixirは「Elixir言語型」だし
F*は「F*言語型」だね。

言語使うたび,パラダイム増えるね♪
288デフォルトの名無しさん
2020/09/17(木) 18:20:43.06ID:d9Y9RH6u
>>286
まともに理解することすらできない程度なんだね。w

シェルスクリプトでは、関数式のように値を返すのではなく、パイプラインのように出力を流していくように考えよう、とリンク先は主張してる。
ステートレスでというほかの主張とあわせて一貫している。

うむ。
これは、たしかにわかりやすいな。
覚えておこう。
289デフォルトの名無しさん
2020/09/17(木) 18:21:07.37ID:d9Y9RH6u
>>287
アホなのかな?
290デフォルトの名無しさん
2020/09/17(木) 18:34:36.35ID:0NbLDZXP
>>288
> シェルスクリプトでは、関数式のように値を返すのではなく、パイプラインのように出力を流していくように考えよう、とリンク先は主張してる。
> ステートレスでというほかの主張とあわせて一貫している。

まさに関数型の動作だねw

初心者でよくいるんだわ。関数を使うのが関数型だって思ってるやつ
お前がそれだな
291デフォルトの名無しさん
2020/09/17(木) 19:02:35.37ID:Wtt+0SS3
シェルスクリプトは手続き型

他言語との一番の違いは処理の入力と出力が文字列に固定されていること
処理の合成を容易にした代わりに入出力に関わる部分で一般的な手続き型言語とは異なる作法が必要
その作法はプログラミングパラダイムというほど大げさなものじゃない
292デフォルトの名無しさん
2020/09/17(木) 19:31:27.99ID:d9Y9RH6u
>>290
アホには通じなかったか。。。
まあ、そんでええんちゃう。w
293デフォルトの名無しさん
2020/09/17(木) 21:33:54.93ID:0NbLDZXP
言い返せないでおしまい
294デフォルトの名無しさん
2020/09/17(木) 22:32:05.15ID:d9Y9RH6u
>>293
理解力が足りへんもん。w
ワイはおまえの先生やないからな。
しゃあない。
295デフォルトの名無しさん
2020/09/17(木) 22:33:18.53ID:0NbLDZXP
>>294
俺に説明しろって言ってないよ
他の人にわかるように説明しろと言ってる
それがないから、他の人はお前のことを○○だと思う
296デフォルトの名無しさん
2020/09/17(木) 23:57:34.63ID:7k+fww17
https://wiki-dev.bash-hackers.org/syntax/basicgrammar#shell_function_definitions
$ {x}<"$x" _=${x=<(echo moo)} <&0$(cat <&"$x" >&2)
simpleとは一体
297デフォルトの名無しさん
2020/09/18(金) 02:31:56.89ID:Mudt/vfl
>>295
ほかのひとてだれやねん。w
ま、アホの衆が集ったところで、知能が上がるわけやないからな。
通じひんもんは通じひん。
しゃあない。
298デフォルトの名無しさん
2020/09/18(金) 04:54:45.60ID:5l49iFOd
>>296
日本語での解説
https://www.ryotosaito.com/blog/?p=366
299デフォルトの名無しさん
2020/09/18(金) 21:42:27.80ID:JMG0ZHyH
pipefailってPOSIXに取り入れられるの?

https://www.mail-archive.com/[email protected]/msg01960.html
300デフォルトの名無しさん
2020/09/18(金) 21:53:19.38ID:5l49iFOd
>>299
そこに書いてること読んだ?w
301デフォルトの名無しさん
2020/09/18(金) 22:00:45.75ID:JMG0ZHyH
読んだよ?だから聞いてるんだけど
302デフォルトの名無しさん
2020/09/19(土) 14:52:56.70ID:Uw1s41Nc
シェルって普通に「副作用」があるコマンドが使われてるよね
POSIXには収録されてないとはいえ,mktempなんかはめちゃめちゃ利用されて
かつ副作用があるコマンドの一例じゃないかしら。

mktemp $$-XXXXX
とすると「ファイルが作られて」かつ「標準出力にそのファイル名が出力」される。
303デフォルトの名無しさん
2020/09/19(土) 16:37:30.78ID:1l7cqS+f
今なら、プロセス置換やcoprocを使えば、テンポラリファイルなしにできることも少なくなさそう。
304デフォルトの名無しさん
2020/09/19(土) 17:20:44.75ID:Uw1s41Nc
>>303
いや、たしかにそうかもしれないんだけど、
私が言いたかったのは「関数型」と名乗るには
副作用のある動作はできちゃだめなんでは
ということ。

言葉が足りず申し訳ない
305デフォルトの名無しさん
2020/09/19(土) 17:25:16.15ID:VJFBPJzE
標準エラー出力を画面にそのまま表示し、同時にパイプで繋いだ先にも標準出力として出力する方法ってありませんか?

色付きのエラーを画面に表示させ、さらにその内容をgrepで判定したいです
エラー出力はそのままパイプに渡せないのでgrepにかけられません
エラー出力を標準出力に渡すとgrepで判定できますが色が消えてしまいます
306デフォルトの名無しさん
2020/09/19(土) 19:23:52.66ID:1l7cqS+f
>>305
色が消えるのは、出力先がパイプだからやろ。
コマンドの--colorオプションとかで強制的に色付きにしろ。
そういうオプションがなければ残念ながら。。。
307デフォルトの名無しさん
2020/09/19(土) 19:45:10.10ID:okNEuTuK
>>304
関数型言語ではファイルを作るというような
副作用があるプログラムを作ることができないとでも?
308デフォルトの名無しさん
2020/09/19(土) 19:51:41.55ID:okNEuTuK
副作用がまったくないのは"純粋"関数型言語
純粋じゃない関数型言語は副作用を許容する

そして関数型スタイルという言い方なら
別に関数型言語である必要はない

https://docs.python.org/ja/3.6/howto/functional.html

> この文書では、関数型スタイルでプログラムを実装するのに
> ピッタリな Python の機能を見てまわることにしましょう。
309デフォルトの名無しさん
2020/09/19(土) 20:15:47.31ID:9OWUS6ol
初心者のうろ覚えですが、モナドというのは関係ない?
310デフォルトの名無しさん
2020/09/19(土) 20:37:42.24ID:Uw1s41Nc
>>307
え,ファイル作成って副作用としてしか表現できないと思ってんの?
311デフォルトの名無しさん
2020/09/19(土) 20:41:20.32ID:okNEuTuK
シェルスクリプトのファイル作成もモナドですねー
312デフォルトの名無しさん
2020/09/19(土) 20:46:22.01ID:okNEuTuK
https://qastack.jp/software/369770/do-functional-programming-languages-disallow-side-effects

その意味で、関数型プログラミング言語は実際には副作用を許容します。
外部の世界に影響を及ぼし、他の関数を呼び出し、例外を発生させ、
ファイルに書き込むなどの無数の例があるからです。
313デフォルトの名無しさん
2020/09/19(土) 20:50:25.87ID:okNEuTuK
常識で考えればわかるだろうに、関数型言語でファイルの作成ができるならそれは副作用でしか無いんだよ。
関数型言語でファイルの作成が副作用に当たらないという屁理屈を言えるなら言ってみるが良い

知ってるなら「○○で表現できる」と断定する言い方をしてみろよ
知らないから>>310のような言い方をしてごまかしている
314デフォルトの名無しさん
2020/09/19(土) 21:22:03.60ID:L0h6VTd7
>>305
scriptで実行してからtypescriptをgrepすれば?
315デフォルトの名無しさん
2020/09/19(土) 21:28:34.09ID:MdHTO1xD
また延々と恥さらしなレスがはじまった
>>304は責任取って
316デフォルトの名無しさん
2020/09/19(土) 21:42:31.36ID:YcZMzNxL
ステートレスなパイプでの受け渡しをする様が関数型的という表現に同意しない訳ではないが、関数が第一級オブジェクトじゃないので関数型言語ではないです
evalで取り扱うのはあくまで文字列です

まぁこれ以外にもないない尽くしだしその一点のみで関数型言語だと主張するのは無理があると思うよ

副作用云々に関しては副作用を明示する事を大事にする関数型言語が純粋関数型言語としてあるよねくらいで終わり
317デフォルトの名無しさん
2020/09/19(土) 21:45:34.72ID:Uw1s41Nc
>>316
同意。
318デフォルトの名無しさん
2020/09/19(土) 21:50:48.10ID:okNEuTuK
>>316
> 関数が第一級オブジェクトじゃないので関数型言語ではないです
知ってます。ってか常識です。
だから関数型スタイルって書いたんです。
考え方の話です。
319デフォルトの名無しさん
2020/09/19(土) 22:21:10.97ID:YcZMzNxL
>>318
スクリプト内でコマンド列組み立てて文字列で標準出力に投げて標準入力から受け取った側がexecやevalで解釈させてってやってるなら関数型スタイルだと納得するかな
まぁスタイルってぼかされたらこれまた気持ちの問題にしかならないのでここまで

あとファイル作成をモナドとして表現することは可能だけどシェルスクリプトのファイル作成はモナドとして表現されてないからモナドじゃないよ
320デフォルトの名無しさん
2020/09/19(土) 22:42:01.76ID:1l7cqS+f
「関数型スタイル」はいらん。

>>285
でええやん?
321デフォルトの名無しさん
2020/09/19(土) 22:50:47.80ID:VJFBPJzE
>>306
>>314
grepの--color=autoオプションでできました
ありがとうございました
322デフォルトの名無しさん
2020/09/19(土) 23:02:36.62ID:okNEuTuK
>>320
> でええやん?
だめ。既存の用語を使ってないから、何の説明にもなってない

C言語を関数呼び出し型と言ってるようなもん
323デフォルトの名無しさん
2020/09/19(土) 23:10:17.14ID:kGktsB/f
「なんちゃって関数型風味」を「関数型スタイル」て呼ぶなや

そんなん言い出したらなんでもありやぞ
Bash依存スクリプトはPOSIX準拠スタイル!(あくまでスタイル)
324デフォルトの名無しさん
2020/09/19(土) 23:11:45.95ID:kGktsB/f
標準入力/出力/エラーと常にI/Oを伴う関数型スタイル!?
325デフォルトの名無しさん
2020/09/19(土) 23:43:29.10ID:okNEuTuK
> Bash依存スクリプトはPOSIX準拠スタイル!(あくまでスタイル)
何も問題ないのでは?w

> 標準入力/出力/エラーと常にI/Oを伴う関数型スタイル!?
何も問題ないのでは?w
326デフォルトの名無しさん
2020/09/19(土) 23:44:13.39ID:okNEuTuK
C言語はオブジェクト指向言語ではないが
工夫することでオブジェクト指向スタイルのプログラミングが可能

この文章は別にどこもおかしくないしなぁ
327デフォルトの名無しさん
2020/09/19(土) 23:53:41.32ID:1l7cqS+f
>>326
そら「オブジェクト指向スタイル」を、言った本人はわかってるつもりだから。w
実際にはよくわからんというか、具体的には通じないな。
328デフォルトの名無しさん
2020/09/20(日) 00:06:05.33ID:ylbIOeZ5
>>321
Windows 10, WSL, Ubuntu 18.04 の、.bashrc には、以下のように書いてある

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"

alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
329デフォルトの名無しさん
2020/09/20(日) 00:24:20.42ID:hAWRhXL/
> 既存の用語を使ってないから、何の説明にもなってない

これに尽きる
330デフォルトの名無しさん
2020/09/20(日) 00:27:06.89ID:VssaCpFN
>>327
それな

ADTって言葉を知らずオブジェクト指向もよく理解してないから
なんとなくで「オブジェクト指向スタイル」って呼んじゃうんだよね

「オレオレ定義のオブジェクト指向」をスタイルという言葉でごまかしてわかったつもりになってるからタチが悪い
331デフォルトの名無しさん
2020/09/20(日) 00:29:04.06ID:Gp2XD0lD
じゃあ、C言語でオブジェクト指向スタイルで設計してる時
それを他の人になんて説明するのさ?

C言語でオブジェクト指向っぽい設計にしていますっていうの?
言い方を変えただけじゃんw
332デフォルトの名無しさん
2020/09/20(日) 00:38:19.98ID:0m+KJQOi
ファイルやディレクトリみたいな外部状態に依存するものはステートフル?

常駐型のサーバープロセスとかネットワークプロトコルに使う用語なのでシェルスクリプトに対してステートレスって言うのは少し違和感ある
333デフォルトの名無しさん
2020/09/20(日) 00:39:02.21ID:mlVvoUwY
>>331
ADTとは違うの?
334デフォルトの名無しさん
2020/09/20(日) 00:55:42.03ID:8zr1eESi
>>332
「状態を持たない」という意味なんだから、それでもええやん。
シェルスクリプトは、あんまり内部で状態を持たずに、ただ上から下へと処理をパイプライン状に実行していく、という流れの話やろ。
335デフォルトの名無しさん
2020/09/20(日) 01:20:17.18ID:Gp2XD0lD
パイプラインじゃなくてストリーミング処理と言ったほうが良いな
.NETでいえばLINQだ。LINQも関数型と言われてるな。
336デフォルトの名無しさん
2020/09/20(日) 01:21:00.25ID:I6IOvHiB
ステートレスなバッチプログラムと、スステートフルなバッチプログラムって言われても違和感ない?

元記事読み返したがステートレスの使い方が定まってなくていい加減
337デフォルトの名無しさん
2020/09/20(日) 01:44:09.20ID:W0vzNZm6
>>312
機械翻訳クソサイトを貼るな
338デフォルトの名無しさん
2020/09/20(日) 02:00:41.31ID:Gp2XD0lD
>>337
元の英語を読めばいいと思いますよ(笑)
339デフォルトの名無しさん
2020/09/20(日) 02:10:49.86ID:8zr1eESi
>>336
そういうふうに言うと、違和感がなくはないけど、そこはええがな。w
バッチ処理には、しょせんたいしたステートがないのだ、て言うてるだけやろ?
340デフォルトの名無しさん
2020/09/20(日) 02:17:23.54ID:8zr1eESi
>>335
「ストリーミング」のほうがいい理由は?
ニュアンスが別すぎる印象だが。

LINQの関数型的要素は、高階関数なところやろ。
メソッドチェインなところではない。
341デフォルトの名無しさん
2020/09/20(日) 02:56:29.74ID:Gp2XD0lD
> LINQの関数型的要素は、高階関数なところやろ。
シェルスクリプトの関数型的要素は、コマンドを高階関数として使うところやろ
パイプラインを複数つなげられるところではない。
342デフォルトの名無しさん
2020/09/20(日) 03:59:49.76ID:0cFAZqtZ
まだやってるのか、グルー言語だろに
本来もだしほとんどの場合も。コマンドを高級関数だって。なんかPOSIXな人は言語として扱ってるような感じだが。だがawkが主だったりしたり
パイプラインもストリームの一つだろうに、開く閉じる書く読むをほとんど意識しないからパイプラインの方が適切かなあ
変なとこの自説をぶってるなあ
343デフォルトの名無しさん
2020/09/20(日) 05:50:15.33ID:md9GHmZV
グルー言語だったら、その他は何にも当てはまらないとでも言うつもりだろうか?
グルー言語 かつ 関数型スタイルの言語ってだけだろ
344デフォルトの名無しさん
2020/09/20(日) 05:51:02.56ID:md9GHmZV
> パイプラインもストリームの一つだろうに
変なとこの自説をぶってるなあ(笑)

関数型スタイルでいいだろ
パイプラインだーって自説をぶるなよ(笑)
345デフォルトの名無しさん
2020/09/20(日) 07:53:20.99ID:qcN7Nyvi
関数型スタイルという表現すらも自説のぶん回しだと気づいていらっしゃらない……?

コマンドが高階関数なら >>319 にあるように受け取ったコマンド列文字列を適用するとかそういう扱い方をすることになるんだけど本当に意味分かってて使ってる?

もし本当なら書いてるシェルスクリプトなり任意の関数型言語のコードを見てみたいものだ
346デフォルトの名無しさん
2020/09/20(日) 07:55:14.75ID:gYz9ZwfZ
シェルスクリプト総合 その33
http://2chb.net/r/tech/1584893550/
なんで埋まってないのにここ使ってるの?
347デフォルトの名無しさん
2020/09/20(日) 08:01:49.26ID:1uipuJDZ
ろくろ回し好きそう
348デフォルトの名無しさん
2020/09/20(日) 08:39:31.58ID:OYShpTRx
ストリーミング君はいろいろ詳しくは知らない漠然とした知識と他は妄想からの思い込みで言っているだけだな
初歩的なコンピュータサイエンスの知識さえ怪しい。端々にポロポロ出てるのに自覚ないからな
349デフォルトの名無しさん
2020/09/20(日) 09:14:06.85ID:I6IOvHiB
高階関数すら理解してなかったかぁ

>もちろんちゃんとシェルスクリプトのスタイル(関数型)でコーディングするのは大前提

それでよくこんなこと言えたねぇ
シェルスクリプトのスタイルは関数型ww
大前提www
350デフォルトの名無しさん
2020/09/20(日) 11:23:53.54ID:55J7R452
>>349
ほらね、反論なしだね
それが答えだよ
結局、違う気がするけど言い返せないと
お前は言ってるんだよ
351デフォルトの名無しさん
2020/09/20(日) 11:24:41.19ID:55J7R452
>>345
> 関数型スタイルという表現すらも自説のぶん回しだと気づいていらっしゃらない……?

自説のぶん回しで何が悪いのか?
自説のぶん回しで何が悪いといい出したのはお前じゃん
しかも理由もなしで
352デフォルトの名無しさん
2020/09/20(日) 11:25:23.93ID:55J7R452
自説のぶん回しにたいして、自説のぶん回しを持ってきても何の反論にもなってないし
反論せずに、wwwだけ並べても反論にはならない
353デフォルトの名無しさん
2020/09/20(日) 11:57:32.48ID:qcN7Nyvi
>>351
あらごめんこれは私が読み間違えてた
そこに関しては自分の言葉だと分かった上で発言してるようだし、撤回するし謝るわ

ただ私は >>342 ではないので後半には答えようがない

敢えて答えるならその定義を認めるか認めないかの話になってしまっているので、不毛な議論である点は問題かなぁ
悪であるとか間違いであるという意味の問題ではなく、理解を得る納得してもらう認めさせるという目標に対して困難さがあるという意味での問題ね
354デフォルトの名無しさん
2020/09/20(日) 12:03:08.73ID:55J7R452
これが結論

https://qiita.com/piroor/items/77233173707a0baa6360

ところで、「流入してくるデータを加工して返却する」「ステートレスな」処理が得意で、
「内部で複雑な状態を持つ必要のある」「ステートフルな」処理が苦手だというのは、
関数型言語にも見られる特徴です。14

そう考えると、シェルスクリプトで凝った事をしようとする人があまり多くないのも頷けます。
「関数型言語は難しい」と言われる事が多いですが、他の言語とパラダイムが違う言語だと思えば、
これまでのプログラミングのパラダイムに囚われたままでは理解が進まないのも当然です。


14. 実際、関数型言語が得意な人にこの説を披露してみた所、
「関数型言語というのはストリーム型のデータを処理するという所が
キモ(なので、解釈としてそう外してはいない)」という感じの感想を頂きました。 ?
355デフォルトの名無しさん
2020/09/20(日) 12:43:51.66ID:8zr1eESi
>>352
そういうときは、広く通じたり受け入れられたりしたもののほうが、そうでないものよりも正しいんやで。
声がでかくしつこいほうの勝ちではない。
356デフォルトの名無しさん
2020/09/20(日) 12:53:30.22ID:55J7R452
>>355
「〇〇じゃないかもしれない」は反論じゃないんやで
「○○じゃないと思ってるが反論できない(じゃあ正解なのでは?)」という意味なんやでw
357デフォルトの名無しさん
2020/09/20(日) 13:59:08.57ID:5WkIzV16
>シェルスクリプトに適しているのは〜 フィルタ的な働きが求められる種類の仕事にも適しています
ってあるじゃん、そもそもそういうものでしかなく(それを実現してるのはパイプ=シンプルなプロセス間通信というUNIXらしいシことで実現)、関数型言語として作られてもいないし発展も変化もしてない
シェルスクリプトに適しているのはフィルタ以外のは単なるジョブらしいぞ

似てる部分があるだけで関数型とするのは無理がありすぎ
単にフィルタの段々ができるってだけでいいのに、なんで関数型と言いたいのか
今までのコメからはなんかそれで一人悦に入りたいらしいけど目的がわからんな
358デフォルトの名無しさん
2020/09/20(日) 14:30:46.33ID:V1UjDwA2
>>357
>なんで関数型と言いたいの
これは自分が使ってる道具が古臭くないぞ、最近流行してる機能を昔から実現してるんだぞと主張することで
自分自身が古臭い老害じゃないぞ、新しい技術だって知ってるんだぞ、優秀なんだぞと暗に主張したいから

老害多めのレガシーな言語スレでよく見られる現象
359デフォルトの名無しさん
2020/09/20(日) 14:36:18.77ID:55J7R452
>>357
> 関数型言語として作られてもいないし

まーた「関数型言語」って妄想してる
だーれもシェルスクリプトが「関数型言語」なんていってない
「関数型スタイル」って言ってんの

何回言えばお前が戦ってる相手が
お前の妄想の中の架空の人物だって理解すんの?
360デフォルトの名無しさん
2020/09/20(日) 14:36:32.46ID:5WkIzV16
シングルタスク、プログラムを一つ起動して終わって次なしかできない環境では、
command1 > foo.txt
command2 < foo.txt > bar.txt
command3 < bar.txt > foo.txt
command4 < foo.txt
とか、一時ファイルに逐次書いて読んでだろうが。もちろん、面倒くさがりが多いこの業界ではこんなのやってられない繋げてしまえと思うのはいたって普通

関数型なんて関係ない、ただそれだけだろな
前プロセスの標準出力を次(フィルタ)プロセスの標準入力に繋げるというシンプルな仕組みだからスクリプト内でも他の形態でも使えるが、ベースは同じ

確かMS-DOSはパイプもどきを実現してるが(一時ファイルに書き出してって上記のを逐一ってのを実際はやって実現してたはず)、
表記的表記的には同じようにステートレスとやらになるが MS-DOS batch fileも関数型の親戚か?


>>358
そうはっきり言わなくてもw
そんなの透けて見えてるけど、自問させてみようかなと
逆に全然優秀に見えないのはなんでだろうなあ
361デフォルトの名無しさん
2020/09/20(日) 14:37:24.66ID:55J7R452
>>358
え?関数型って新しいんでしたっけ?w
シェルスクリプトと同じぐらい古いものだと思ってるんですがー?
362デフォルトの名無しさん
2020/09/20(日) 14:38:40.31ID:5WkIzV16
>>359
関数型スタイルでもない、「関数型」なんて意識してないのが明らか
勝手に間違った造語作って偉そうにされても困る
363デフォルトの名無しさん
2020/09/20(日) 14:41:37.03ID:5WkIzV16
>>361
古くからあるらしいが、そんなの世間に出てもてはやされたのは最近って話だろうに
それはあんなサイトを貼ってるので証明してる

優秀なんだぞと暗に主張したいんだったら、少しは他社の目ももとうな
364デフォルトの名無しさん
2020/09/20(日) 14:41:52.86ID:55J7R452
ふむ。あってるよな

https://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E
最初の関数型言語といわれてるLISPは1958年、Haskellは1990年

https://en.wikipedia.org/wiki/Bourne_shell
Bourne shellは1976年、POSIX shellはksh88として1988年

関数型が新しい技術???
365デフォルトの名無しさん
2020/09/20(日) 14:42:43.83ID:55J7R452
>>363
お前は世間のブームが基準なのかよw
366デフォルトの名無しさん
2020/09/20(日) 14:47:03.43ID:5WkIzV16
自分であんなサイトを自慢げに貼って何を言っているのかな?
そんな古く周知されてるなら、あんなサイトを持ち出さなくてもいいし、一人延々と自説を唱えることはないわな

表記的表記的には同じようにステートレスとやらになるが MS-DOS batch fileも関数型の親戚か?
で結論は出ているから、もうおしまい
367デフォルトの名無しさん
2020/09/20(日) 14:47:47.68ID:55J7R452
自分であんなサイトを自慢げってなんのこと?w
ググって出てきたものを貼ってるだけなんだけど

記事の内容じゃなくて、サイトを批判してるようじゃぁ
説得力ゼロですなぁ
368デフォルトの名無しさん
2020/09/20(日) 14:51:24.36ID:55J7R452
>>366
> MS-DOS batch fileも関数型の親戚か?
ぜんぜん違う

コマンドを実行してみりゃわかることだがWindowsのコマンドは対話型
実行したら「○○を処理しました。」とか標準出力に表示されたりして
ストリーミング処理できるように設計されていない

もちろん並列処理が行われないなどという点もあるがそれ以前の問題
お前はパイプラインの有無で判断しているからバッチファイルも同じだと
考えているようだが、パイプラインは関係ないと最初から言っている
369デフォルトの名無しさん
2020/09/20(日) 14:56:03.76ID:5WkIzV16
ググる必要もないだろうにって話だが?>>361の反論からは
あんなサイトっていうのは別に書いたのがあなたというわけではないよ

というか>>361以下の反論が反論になってないな、散々反論反論言っていたんだから、自分でちゃんとした反論をしなさいよ

>>368
全然読めてないな、あのサイトも>>360
あなたがシェルスクリプトを関数型と根拠にしたのはパイプで繋げるだからな、あのサイトの抽出したのもそこだろう、MS-DOSでもそこは表記的表面的には同じ
370デフォルトの名無しさん
2020/09/20(日) 14:59:06.57ID:55J7R452
> あなたがシェルスクリプトを関数型と根拠にしたのはパイプで繋げるだからな
別の人と勘違いしてるねw

パイプラインとか言い出したのはこいつ(>>285
> シェルスクリプトは、フィルタ型とかパイプライン型とか呼べばいいのでは。
371デフォルトの名無しさん
2020/09/20(日) 15:00:06.11ID:55J7R452
重要なのはパイプラインではなく、ストリーミングであるという所だ。
つまり1行1データになってないといけない
MS-DOSはそうなってないので全く的外れ
372デフォルトの名無しさん
2020/09/20(日) 15:10:50.29ID:5WkIzV16
>>354 って自分で書いたくせに何をおっしゃってるのだが
まさかググっただけ中はよく読んでない、都合の良さげの文があったのでというのか?
ちゃんと自分で改めてあのサイトの内容を見てから言いなさいな、まさしくパイプで繋げることしか書いてないから=それが関数型に似てるだけだから

なんだか知らんが俺が決める仕様なのか、関数型とやらは。誰も納得しないだろうな、その俺が決める仕様なら
373デフォルトの名無しさん
2020/09/20(日) 15:29:06.24ID:55J7R452
> >>354 って自分で書いたくせに何をおっしゃってるのだが

354にはパイプラインなんて出てきてませんねぇw

> ところで、「流入してくるデータを加工して返却する」「ステートレスな」処理が得意で、
> 「内部で複雑な状態を持つ必要のある」「ステートフルな」処理が苦手だというのは、
> 関数型言語にも見られる特徴です。14
374デフォルトの名無しさん
2020/09/20(日) 15:30:01.00ID:55J7R452
なんつーか、設計方針を理解してないみたいだな
「パイプ」があれば、設計が同じだと思ってしまう
その程度の理解力なんでしょうね
375デフォルトの名無しさん
2020/09/20(日) 15:38:04.31ID:5WkIzV16
自分では「パイプ」とは書いてない、抽出した先で抽出した文がパイプだけのことをを指してあっても、自分は書いてないからかあ
どういう思考してるのか理解できないな

>>374
ますます自分の都合の良い捻じ曲げ方してますねえ
自分で抽出した先でそのことだけを言及して、それを自分で開陳してるなら、抽出した先でパイプで繋げることしかなら同じだろうという、いたって単純な結論になるのは当たり前

しかも「これが結論」って自分で書いてらっしゃるんですけど
ちなみに、よく読めばわかるだろうと思うのだが、あれを書いた人もそんな設計方針が必要なほどのことはシェルスクリプトで書かないよ、そう書いてあるでしょう
376デフォルトの名無しさん
2020/09/20(日) 16:04:51.92ID:8zr1eESi
ストリーミンガーには、まず「関数型スタイル」というものをあきらかにしてほしい。今さらだけど。

ところで、あのWebページのひと、なんかかわいそう。。。
シェルスクリプトには関数型的な特徴がある、ふつうのスクリプト言語とはちょっと違うような、と言っただけなのに、針小棒大にネタにされて。
377デフォルトの名無しさん
2020/09/20(日) 17:23:12.71ID:55J7R452
> 抽出した先で抽出した文がパイプだけのことをを指してあっても
ストリーミングと書いてますが?
378デフォルトの名無しさん
2020/09/20(日) 17:24:34.33ID:55J7R452
シェルスクリプトには関数型的な特徴がある、
シェルスクリプトには関数型スタイルである、

同じことを言ってますねw
379デフォルトの名無しさん
2020/09/20(日) 18:33:36.30ID:8zr1eESi
>>378
なるほど、話が通じない理由がわかった。
それが同じことだと本当に思っているなら、コンピュータのこと以前に、まず国語を勉強する必要がある。

たまたま似た特徴があるとしても、全体がかなり違っていれば、ふつうは同じものと見なさない。
「スタイル」という言葉は、一部に似た特徴がある程度のものを統合しない。
380デフォルトの名無しさん
2020/09/20(日) 18:47:56.61ID:55J7R452
> 「スタイル」という言葉は、一部に似た特徴がある程度のものを統合しない。

それはどこの誰の定義ですか?


https://docs.python.org/ja/3/howto/functional.html
この文書では、関数型スタイルでプログラムを実装するのにピッタリな Python の機能を見てまわることにしましょう。
関数型スタイルにおいては、内部状態を変えてしまったり、返り値に現れない変更をしたりといった副作用のある関数はやめるように言われています。
関数型スタイルで書いた Python プログラムはふつう、I/O や代入を完全になくすといった極端なところまでは行かずに、
関数型っぽく見えるインタフェースを提供しつつも内部では非関数型の機能を使います。
まずは関数型スタイルのプログラムを書く際の基礎となる重要な Python 機能から見ていきましょう: イテレータです。
これらの章内の多くのデザインアプローチは関数スタイルな Python コードにも適用できます。
381デフォルトの名無しさん
2020/09/20(日) 19:17:05.28ID:77Xtdks6
こいつって前からいるけど致命的に日本語を読めないな
382デフォルトの名無しさん
2020/09/20(日) 19:28:01.14ID:55J7R452
とまあ、こういうふうに悪口しか言えないわけでw
383デフォルトの名無しさん
2020/09/20(日) 19:36:37.16ID:77Xtdks6
今までので何も読めてないのは確かだな。誰もお前と話が通じてないからな
>>380も読めてないお前にしか見えない何かがお前にだけ見えるだけ
384デフォルトの名無しさん
2020/09/20(日) 19:41:15.67ID:8zr1eESi
>>380
その引用文はどこもおかしくない。
だが、おまえの話はおかしい。
全然関係ない文をもってくるな。

あのね、たとえ話をするね。

カタコトの日本語をしゃべる人がいたとしても、その人が日本人かどうかはわからないのね。
まったく別のところから、きれいな日本語をしゃべる人を連れてきたとしても、カタコトの日本語をしゃべる人とはあくまで他人なので、なにかがわかるわけではないのね。
そして、きれいな日本語をしゃべる人も、結局、日本人かどうかはわからないのね。

要するに、しっかり理屈でしゃべれ!
385デフォルトの名無しさん
2020/09/20(日) 20:50:37.14ID:55J7R452
おや?またシェルスクリプトとは関係ない話で終りですか?(笑)
内容に対してのコメントはないのに、レスだけはしたいんですね。
386デフォルトの名無しさん
2020/09/20(日) 21:11:26.77ID:i6/MN77q
コミュニケーションに問題があるということを言うことは
コミュニケーションの場で言うことには何も問題ではない
内容以前の話。内容が無茶振りな理屈でこいつの頭の中でしか通らないからな
そしてすぐにくだらない言い逃れに走るしなw
387デフォルトの名無しさん
2020/09/20(日) 21:34:50.84ID:qcN7Nyvi
ここが匿名の場なので仕方ないんだけど、シェルスクリプトのファイル作成はモナドって言う人やコマンドは高階関数って言う人が、シェルスクリプトは関数型ないし関数型スタイルだと言いがち(だし他には散々レスがなされているのに、そこの指摘に対して何の反論もなく、意図的にスルーしていると言われても仕方がないような立ち回りをしている)ので信用が得られていないというのはあるかもね

認めようとさせるなら、例えば「awkやsedの文字列でコマンドを渡すのが無名リテラルとしてのラムダ式に相当してる」とか、「while readによる標準入力受け取りイディオムによってスクリプトがfunctor/mappableになるのだ」とか言いくるめないと
388デフォルトの名無しさん
2020/09/20(日) 21:38:30.85ID:8zr1eESi
>>385
内容にコメントしたら、話が通じないからね。w
シェルスクリプトが「関数型スタイル」だとか、意味不明な発言をしているうちはムリムリ。
389デフォルトの名無しさん
2020/09/20(日) 21:48:53.60ID:55J7R452
だから意味不明な理由を言えばいいだろw
言い訳ばっかりだな
390デフォルトの名無しさん
2020/09/20(日) 22:04:58.48ID:GOdQy7G8
そろそろ次スレ立てましょうか?
391デフォルトの名無しさん
2020/09/20(日) 22:41:23.61ID:8zr1eESi
>>389
>>376
無限ループかな?w

ま、まともな会話はもう期待してないから、どうでもええで。
人語を理解しないのだからしゃあない。
392デフォルトの名無しさん
2020/09/20(日) 22:50:20.84ID:55J7R452
はいまたシェルスクリプトと関係ないレスをしました
393デフォルトの名無しさん
2020/09/20(日) 23:41:44.50ID:8zr1eESi
>>392
シェルスクリプトに関係ない話を始めたのはそっちやで。

シェルスクリプトはもちろん、関数型言語にも関係のない、独自スタイルの話をえんえんぶちあげられたんやから。
「関数型スタイル」て。w

人語がしゃべれないのに長々と相手してもらったことを感謝するべき。


そして、>>304はこのことを深く記憶して、これからは相手をよく見て話してほしい。
頼むで!
394デフォルトの名無しさん
2020/09/21(月) 08:20:34.71ID:0WrTUa3Q
もう少し推敲しなよお客さん
395デフォルトの名無しさん
2020/09/21(月) 11:57:46.54ID:249hXDDO
>>394
シェルスクリプトと関係ないレス。w
396デフォルトの名無しさん
2020/09/21(月) 19:00:59.34ID:OB+sYWJW
あの〜。なんでみなさん「個人の感性」を根拠にできるんですかね。
この世界では学者はそんなに重要じゃないのかな。
そんなことないと思うけど……。
397デフォルトの名無しさん
2020/09/21(月) 19:36:50.17ID:dSuXtJgv
個人の感性以上でも以下でもない話題だからじゃないですかね
398デフォルトの名無しさん
2020/09/21(月) 19:55:48.18ID:GxzcHgtD
個人の感性ですかねぇ?

シェルスクリプトはreturnで数字以外返せない。返すには標準出力を使う。
つまり a=$(hoge) とか hoge | other_command とかするしか無い。

そうすると前者はサブシェルになるから変数、つまり状態を書き換えられない。
正確には書き換えられるけど破棄される。後者もサブシェルだから同様。

前者はストリーミング処理ではないが、大量のデータを扱う場合は遅くなるので推奨されない
しかしこれを改善するつもりはないだろう。なぜなら大量のデータを扱う場合は後者の書き方を使えばいいからだ。
後者の書き方は関数型が得意とするストリーミング処理。

シェルスクリプトで遅くならない書き方をすると自然とストリーミング処理になり
変数が書き換わることもない。そしてパイプラインは並列処理が行われる。
ここも並列処理が得意な関数型の特徴と似ている。

これらの事実はシェルスクリプトが関数型として設計されているとみなすには十分な理由だろう。
399デフォルトの名無しさん
2020/09/21(月) 20:28:55.67ID:249hXDDO
またアホが出るのか。。。
たまたま見えた特徴だけから同一視しちゃうとか。w

>>396は、ちゃんと後片付けしていけよ。
頼むで!
400デフォルトの名無しさん
2020/09/21(月) 20:43:06.20ID:GxzcHgtD
な?ちゃんと書いた所でまともな反論が返ってこないんだもんな。

自分で「シェルスクリプトと関係ないレス。w」と言っておきながら
それをすぐ自分でやっちゃうわけだ。
そういうことを自分がしているという自覚がない証拠。
401デフォルトの名無しさん
2020/09/21(月) 20:54:42.96ID:249hXDDO
>>400
アホな認識でアホなことを書いてるからな。
事実と関係のない妄想はいらん。
402デフォルトの名無しさん
2020/09/21(月) 20:59:40.48ID:GxzcHgtD
アホなことであるという根拠がないから
>>401がアホだと思ってるだけ←イマココ。そしてココで終り
403デフォルトの名無しさん
2020/09/21(月) 21:26:24.47ID:dSuXtJgv
このページで[機能の/機能する]の意でない(つまり関数型を示唆する意味での)functionalを探してみ
余裕があればshellで扱われている文字通りのfunctionとC言語のfunctionと[機能/働き]のfunctionを除く(つまり関数型言語で扱われる関数の意味を示す)functionも探してみるといい
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html

まぁそもそもBourne Shellの作者がC言語の文法をALGOL68に寄せるためのマクロを書くしBourne Shellソースがそれで書かれてるくらいALGOL人間で、シェルの文法もそっちに寄ってる訳だ
cshのようにUNIX本体に使われてるC言語の影響を受けるとか、動的型の点でLispの影響を受けるならまだしも、MLの影響を受ける余地があるかなぁホントかなぁという気持ちになるよ
404デフォルトの名無しさん
2020/09/21(月) 21:41:21.38ID:psQWnHmR
いや、お前こそ探してみ?

探してみといって、何になるのか?
405デフォルトの名無しさん
2020/09/21(月) 21:41:57.64ID:dSuXtJgv
俺が読んだ限りではなかったけど君は信用しないでしょ?
406デフォルトの名無しさん
2020/09/21(月) 22:01:29.40ID:249hXDDO
>>402
事実であることを示すほうが先やで。
でなければ妄想に基づく妄想。

自分の考えはみんなの考え。
相手の考えは相手だけの考え。
というのは、アホの理屈。

といっても、わからんのやろが。
407デフォルトの名無しさん
2020/09/22(火) 03:08:07.81ID:bItwwpmo
事実は>>398に書いてある。

あとは、>>398が言ってることは正しい、かつ関数型スタイルの設計だねというか
>>398が言ってることは正しいが、関数型スタイルとは認めない。なぜなら〜という感じで
お前が答えるかだろ
408デフォルトの名無しさん
2020/09/22(火) 05:40:42.36ID:jDsJ+rCA
関数型スタイルwに拘るのがさっぱりわからん
単に名称に拘ってるのか?そうでないなら、今までと違う関数型スタイルやらをコードで書いてみせれば?もちろん今までと違って読みやすいとかで
409デフォルトの名無しさん
2020/09/22(火) 11:58:28.88ID:cIkntQZr
>>407
>>398が、シェルスクリプトを実行したときの特徴の一部を指摘しているのはそのとおり。事実として認められる。
今までも、そこを否定したコメはないはず。

しかし、次の文は根拠がない。論理の飛躍というか、「個人の感性」というよりも、個人の妄想。

> これらの事実はシェルスクリプトが関数型として設計されているとみなすには十分な理由だろう。

たまたま一致する特徴だけで、そうなるように「設計」されたとは言えない。
# >>403の指摘も、そこに対する疑問であろう。
副作用がもれないこと、並列動作が期待できることは、あくまで特徴。

ふつうに考えれば、別プロセスで実行する都合、そうなることは必然の結果でしかない。
因果関係を逆転させるには、別の充分な根拠が必要。

また、一般的に「スタイル」は、主でない特徴がたまたま似ているだけのもののグループを統合する言葉として使われない。
410デフォルトの名無しさん
2020/09/22(火) 13:00:12.76ID:qKy/ayU4
たぶん読めない伝わらないだろうなせっかく長文書いたのにw
411デフォルトの名無しさん
2020/09/22(火) 13:18:38.89ID:UY6+hZuP
>>409
> また、一般的に「スタイル」は、主でない特徴がたまたま似ているだけのもののグループを統合する言葉として使われない。

Pythonが関数型スタイルと書かれていることとの違いは?
なぜPythonはOKでシェルスクリプトは駄目なのか

https://docs.python.org/ja/3/howto/functional.html
> この文書では、関数型スタイルでプログラムを実装するのにピッタリな Python の機能を見てまわることにしましょう。
412デフォルトの名無しさん
2020/09/22(火) 14:22:37.92ID:cIkntQZr
>>411
ぜんぜんちがうことだから。
関係のないことを持ち出しても、しょせん関係のないこと。

また、「スタイル」以前に、「設計」の話は?
413デフォルトの名無しさん
2020/09/22(火) 14:23:19.49ID:cIkntQZr
>>410
こっちも意地になってるからね。
しかたないね。
414デフォルトの名無しさん
2020/09/22(火) 14:45:04.78ID:KrrXHwz7
>>411
Pythonは根本的に関数がOOP的オブジェクトで自然と第一級オブジェクトなので高階関数が扱えるし、対象ページにある通りラムダ式も扱える(もっというとcallableオブジェクトもその類だが)
カリー化こそないけど部分適用も扱えるし、OOP的イテレータパターンを利用して複数の値に対する個別の適用をmap,reduce,filter,zip,product関数のように一般化した高階関数で扱える

定数名前束縛がサポートされてないのは個人的には理解に苦しむんだけどw閑話休題、集合・辞書・リスト内包表記は数学的内包に由来するだけでなく、実はモナド内包表記の具象化で(つまりこれらの内包表記は対象をモナドまで一般化した上でモナド内包表記として扱われることもある)手続きによる個別の変数や領域確保なしに目的のオブジェクトを表現できる

ジェネレータ/コルーチンそれ自身はスタックフル/スタックレス問わずステートフルなものなんだけど、わざわざ事前に領域を確保しなくても逐次計算して要求された値を返す事ができるオブジェクトとしてのイテレータを扱えるという点で先に記述した面々と相性がよく、嬉しい
415デフォルトの名無しさん
2020/09/22(火) 14:47:50.51ID:6o8of7S0
>>412
> ぜんぜんちがうことだから。
だからぜんぜん違う理由を言えとw
416デフォルトの名無しさん
2020/09/22(火) 14:48:54.36ID:6o8of7S0
>>414

> Pythonは根本的に関数がOOP的オブジェクトで

func="echo"
$func 1 2 3

これ、動きます。evalいりません
417デフォルトの名無しさん
2020/09/22(火) 15:34:54.52ID:KrrXHwz7
>>416
それはそれで別に良いんだ
途中で勝手に切らないで全部読んでくれ

追加で説明するとPythonはそれらの特徴から
・関数を受け取って別の関数にして返す関数(この時点では引数の受け取りと評価はしていない)
 (ex.関数に必要な引数を部分的に与えて残り必要な分の引数を受け取る別の関数にして返す関数)
・関数を受け取って複数の値が纏まったiterableオブジェクトに個別に適用し、複数の値が纏まった別のiterableオブジェクトないし2引数演算子によって纏められた単一の値を返す関数

っていう関数に帰着させられるし、何よりmapのようにあくまで受け取るのはcallableとiterableでしかないし、partialのようにcallableと対象になる値でしかないという所まで一般化されてるのが重点なんだ(静的型付きの言語なら更にそれの妥当性も検証できて嬉しいんだけどPythonも実行時には最低限型やメソッドのレベルで整合性見てエラー吐いてくれるけど)
一方シェルスクリプト、そのレベルまで一般化されたコマンドはそう多くないし、自分で書く分にはむしろ1つのことを上手くやるように具体的なコマンドをゴリゴリ書くと思うんだ
扱う対象に関してシェルスクリプトだって文字列として一般化されてるじゃないか、という意見もあると思うけど、表現能力が貧弱で一緒になってしまったものと、意味表現された上でこの基準に合えば同じものとみなせるっていうのは違うよね、違わない?
418デフォルトの名無しさん
2020/09/22(火) 17:48:16.01ID:cIkntQZr
>>415
逆。
同じであることの理由を言うのが先。
理由もなく、全然関係ないことを持ち出してもダメ。

https://ja.wikipedia.org/wiki/%E8%A9%AD%E5%BC%81
おまえの理屈は、詭弁の話しかたのいくつかにあてはまる。
それを説明するのはさすがにイヤなので、このままであればそろそろ相手を放棄する。

ま、がんばれや。
とりあえず国語からな。
419デフォルトの名無しさん
2020/09/22(火) 18:17:27.25ID:J3IrN4Ey
functional-styleは日本語に訳すと「関数型風」
関数型と関数型風の違いは中華料理と中華風の料理の違いと同じ

中華風と呼ぶには作り手が意図的に中華料理に寄せる必要がある
意図せず結果的に中華料理に似た特徴をもったものを中華風の料理とは言わない
それは中華っぽい(見た目の/味がする)料理

もちろんどんな料理でも中華風と主張するのは作り手の自由だが
中華風として受け入れられるかどうかは別の問題

関数型風はPythonはコミュニティに受け入れられたけど
シェルスクリプトのコミュニティには受け入れられていない(受け入れられそうにもない)
理由が知りたければ受け入れられている関数型風との違いを知る必要がある
420デフォルトの名無しさん
2020/09/22(火) 18:19:34.74ID:6o8of7S0
>>419
「○○風」の定義の話ですか?
それはお前の定義ですよねw
421デフォルトの名無しさん
2020/09/22(火) 18:20:37.37ID:6o8of7S0
>>417
質問に答えてないね。
なぜPythonのドキュメンは「関数型スタイル」と書いてあるのでしょうか?
422デフォルトの名無しさん
2020/09/22(火) 18:24:13.02ID:6o8of7S0
Pythonは関数型として作られたのではありませんね。
使う側が工夫することで関数型スタイルにできるという話です。

ハンバーグは和食ではありません。和食として作られたわけではありません。
工夫することで和風にすることができるのです。
それが和風ハンバーグです。

シェルスクリプトも関数型スタイルにできるのです。
423デフォルトの名無しさん
2020/09/22(火) 18:33:53.89ID:OaSKQeOx
内容のないレス連投
424デフォルトの名無しさん
2020/09/22(火) 19:46:26.11ID:KrrXHwz7
>>421
それは読めて欲しかったな
結論だけ先に言うと「関数型言語では先に述べたような関数とデータの扱いが基本なのでそれをPythonにおいて多用する事を関数型スタイルだと述べても批判は少ないが、シェルスクリプトにおいてコマンドを関数と見立ててデータの1in1outの形態の類似性を見ても、それ以外の先の2つに見られる関数合成・部分適用・一般化された高階関数の取り扱いが多用されていない(し多用するには苦痛を伴う)ので関数型スタイルだと述べて批判が来ることが多い」

まず関数型言語っていう言葉がnot well-definedなんだ
関数が第一級オブジェクトであるとこは必要条件であって十分条件でない
一般的にPythonもC++もマルチパラダイムであって大手を振って関数型言語とは呼ばれないと思う
じゃあ関数型言語ないし関数型スタイル、関数型風他類似の名称が何を指してるのか
スタイルは言語のデザイン方針に依存せず自身の書き方で決まるだとか風は更にふわっと雰囲気だけとか細かい部分はあれども結局言語機能の方針やコミュニティのお気持ちで決まってるんだ
ただより豊かに、つまり制約を多く持たせる事には当然批判は少ないと思う
それは既存の言語を参照して帰納的に(ここお気持ちポインツ)考えられる訳で、MLとHaskell(と少なからずLisp)を見た上で出てきたのが、ラムダ式だったり関数合成であったり部分適用だったり一般化された高階関数だったり、Pythonにないものだとデフォルトイミュータブルだったりカリー化だったり静的型付けだったりHM型推論だったりパターンマッチ(正規表現のそれではない)他リッチな型機能だったりモナドだったりするんだ

(続く、長文ごめんね)
425デフォルトの名無しさん
2020/09/22(火) 19:47:21.14ID:KrrXHwz7
>>424
じゃあその増えた制約のうちどれだけを持っていれば関数型風なのか、どれだけを使って書いていれば関数型スタイルなのか、全くなーんにも決まっていない

その中で君が言っている「シェルスクリプトはいい感じに書くと自然に関数型スタイルになる」というのは「1in1out形式のステートレスなインターフェース(1スクリプトだけ見た時内部的に状態を持っていたとしてもinとoutだけ見るとそれらの関係は一意に定まる)を持っている」がベースなんだと私は読んでいる
次いでコマンドを受け取るコマンドの存在と、文字列をコマンドとして解釈させる事が可能である事くらいか(この辺はむしろ反論に対するアンサーとして出てきた側面が強いが)

これと比較するとPythonがどうかというと、より豊かで多い制約を満たす関数型の要素を持っていて、それらを活用して書くことができる
その多さがどのくらいなら関数型スタイルで書けるのだと喧伝していいのか私も知った事ではないし、全人類に検証可能な必要十分な定義はない
少なくともこんだけ続くくらい批判は来てるし、私は関数を引数と戻り値で(つまりシェルスクリプトなら標準入出力で)引き回してもないのに何が関数型スタイルだという気持ちになっている

これは蛇足だけど標準入出力と引数が切り分けられてるのも実用上は理解するけど、カリー化を導入するくらいの数学や関数型の一般化してく文化とは噛み合わせが悪いなぁと思ってるよ

ね、個人の感性だし気持ちの問題でしょ?
426デフォルトの名無しさん
2020/09/22(火) 19:58:05.93ID:aoFeMTcw
だから、関数型スタイルと言っていいわけですね。Pythonも関数型スタイルと言ってますからね。
427デフォルトの名無しさん
2020/09/22(火) 20:11:05.91ID:KrrXHwz7
分かってて言う分には誰が何を言ってもしゃーないしそもそも君の自由でもあるしそれでいいんじゃない?
知らんけど
428デフォルトの名無しさん
2020/09/22(火) 20:40:23.93ID:cIkntQZr
>>426
Pythonに頼んな。w
Pythonのほうはきっと困ってるから。
だいたい、Pythonのドキュメントが一般に通用するかも定かでないのに。

自分の言葉で、自力で頑張れよ。
429デフォルトの名無しさん
2020/09/22(火) 20:40:40.82ID:cIkntQZr
>>427
とつぜんあきらめんな。w
430デフォルトの名無しさん
2020/09/22(火) 22:14:39.02ID:J3IrN4Ey
>>422
>工夫することで和風にすることができるのです。

和風にするためにどういう工夫をしたの?
和風と名乗るのは自由だけど食べる側がそれを和風料理として受け入れるかどうかは別問題

シェルスクリプトを関数型風にするのにどういう工夫したの?
関数型風シェルスクリプトを謳ってるけどそれは今のところ受け入れられてないよね
なんでかな?
431デフォルトの名無しさん
2020/09/22(火) 22:54:40.10ID:TWSwG1ae
> シェルスクリプトを関数型風にするのにどういう工夫したの?
関数からの戻り値を標準出力への出力にした
これにより別の関数に流れるようにデータを渡せるようになった
432デフォルトの名無しさん
2020/09/23(水) 01:38:09.58ID:ekwcF8Ey
>>431
シェルスクリプトを語る前に、ふつうのシェルでコマンドラインを実行してこい!
433デフォルトの名無しさん
2020/09/23(水) 02:07:45.81ID:2ZA3ZE+E
無駄だぞ、そのレスで意図してることも多分わからないだろから
434デフォルトの名無しさん
2020/09/23(水) 13:32:17.22ID:BgUeNus/
lsコマンドをシェルスクリプトの中で使う場合ってなにかある?
ファイルの列挙に関してはfindコマンドや,もっと簡単にグロブとかを使った方が
余計な書式を含まずに処理しやすいし,
ファイルの情報に関してはtestコマンドの方が一発で分かる
(例えばディレクトリかどうかはlsコマンドの場合権限欄の情報を文字列として
解析しなくてはいけない(先頭にdがあるかどうか)が,
testコマンドの場合はtest -e && test -dで完結する)

lsコマンドを使わないとできないシェルスクリプトでの処理ってなにかあるかな。
興味本位でききたい(言わずもがなだけどlsコマンドが不要!とかそういう話ではなく)。
435デフォルトの名無しさん
2020/09/23(水) 13:37:39.50ID:ekwcF8Ey
findの困るところ :
ディレクトリをもぐる。
ドットファイルを避けない。

ふつうに見えてるファイルだけを列挙するときはls -1がもっとも便利。
436デフォルトの名無しさん
2020/09/23(水) 14:50:49.40ID:vSGAtuQW
シェルスクリプトの中でlsを使うメリットとしては
可読性が高くなるというのはある
findとかだとごちゃごちゃして見にくい
\が必要になることも多いし
437デフォルトの名無しさん
2020/09/23(水) 16:13:40.06ID:9Qi89m1Q
>>434
lsはPOSIX準拠。POSIX準拠でファイルの属性を取得する場合、lsコマンド一択となる
438デフォルトの名無しさん
2020/09/23(水) 16:14:33.84ID:9Qi89m1Q
ファイルの属性とは例えばパーミッションやファイルサイズなど
これらを取得するコマンドがls
439デフォルトの名無しさん
2020/09/23(水) 16:16:36.13ID:9Qi89m1Q
> ファイルの情報に関してはtestコマンドの方が一発で分かる
testでわかるのは、自分が何をできるか?(書き込み等)だけ
他のユーザーのことはわからない
440デフォルトの名無しさん
2020/09/23(水) 16:18:45.57ID:9Qi89m1Q
.sshディレクトリは自分は読み書きできるが
他の人は読み書きできてはいけない
ということを、testコマンドでは確認することができない
441デフォルトの名無しさん
2020/09/23(水) 16:29:52.08ID:A5kzXZmA
これだけの文章を纏められない奴
442デフォルトの名無しさん
2020/09/23(水) 16:40:38.03ID:BgUeNus/
>>435
それは対話的な使用での話で,
シェルスクリプトの話じゃないです。
443デフォルトの名無しさん
2020/09/23(水) 16:43:09.16ID:BgUeNus/
>>439
あーこれはあるな。
thx
444デフォルトの名無しさん
2020/09/23(水) 16:47:01.90ID:ekwcF8Ey
>>434
> testコマンドの場合はtest -e && test -d
ちなみに、test -eはイランで。
-dに含まれとる。-fとかも同様。
445デフォルトの名無しさん
2020/09/23(水) 16:49:53.24ID:ekwcF8Ey
>>442
いや、シェルスクリプトでもやけど?
-excludeとかいちいち書くの面倒。
446デフォルトの名無しさん
2020/09/23(水) 16:53:59.75ID:YMosw178
>>440
ちなみにそれをlsを使ったスクリプトで書くとどうなるんでしょう。
447デフォルトの名無しさん
2020/09/23(水) 17:12:18.91ID:9Qi89m1Q
>>446
ちゃんと確認してないけどこんな感じ

case $(ls -dl -- "$file") in
????------*) echo 他の人は読み書きできない
esac
448デフォルトの名無しさん
2020/09/23(水) 17:16:04.24ID:9Qi89m1Q
ファイルサイズなんかもstatだとLinuxとmacでオプションが違うからな
449デフォルトの名無しさん
2020/09/23(水) 19:03:55.60ID:ORLEAcPg
自分で読み書きできるのかだったらtestの方が簡単だわな
rootで他のユーザではだったら素直にsudo使えばだしな、自分でごちゃごちゃ書く必要もなく
450デフォルトの名無しさん
2020/09/23(水) 19:12:36.11ID:ekwcF8Ey
>>447
SELinuxだとダメなときがあるな。
頭にドットがついたりしよる。
451デフォルトの名無しさん
2020/09/23(水) 19:17:09.45ID:9Qi89m1Q
>>449
testではだめな場合があるって話をしてるのに、話を元に戻すな

それからパーミッションと実際に読み書きできるかは厳密には異なる
お前が持ってきた、そのrootがその一例だな

所有者rootでパーミッションが000。パーミッションを見れば
読み書きできないが、実際にはrootで読み書きできる
452デフォルトの名無しさん
2020/09/23(水) 19:22:23.40ID:9Qi89m1Q
>>450
lsの出力は(基本的なものは)POSIXで決まってるはずだがSELinuxはドットがつくんか?
SELinuxがPOSIXを歪めてるってことになるんだがそれは本当なのか?
画面でそう出力されているからって、シェルスクリプト(出力先がttyでないとき)でも同じとは限らんぞ

例えばGNUのlsはファイル名に改行などが含まれている時、
画面に表示した時はエスケープされていてこれはPOSIXの仕様を逸脱してる。
しかし出力がttyでないときはPOSIX準拠の動作をするので互換性は保たれている。

まあ本当にドットが付いていたりするなら、それを取り除けばいいだけだが
453デフォルトの名無しさん
2020/09/23(水) 19:24:51.56ID:9Qi89m1Q
>>450
軽くググったがドットがつくのは頭じゃなくて後ろじゃないのか?
パーミッションの後ろであれば、追加で何かをくっつけてもPOSIX的にはOK
macOSでも何かくっついてたはずだな
それもちゃんと考慮しての ????------*) アスタリスクだ
454デフォルトの名無しさん
2020/09/23(水) 19:29:08.48ID:ORLEAcPg
>>451
なに当たり前のこと言っているのだか
rootも自分が読み書きできるのかなんだから当然だろ、そう言う権限があるんだから
なに必要もないことしてんだかなってとこだな
455デフォルトの名無しさん
2020/09/23(水) 19:30:24.99ID:9Qi89m1Q
>>454
人の話聞こうか?
.sshのように、他の人が読み書きできないことを
チェックするときにtestは使えないって話をしてるの
だから戻すなと言ってるの
456デフォルトの名無しさん
2020/09/23(水) 19:31:28.98ID:9Qi89m1Q
testでできることの話はもうしてないの。終わった話なの。
今はtestでできないことの話をしてるの。だから話を戻すなと言ってるの。
457デフォルトの名無しさん
2020/09/23(水) 19:36:03.39ID:ORLEAcPg
>>455
ちゃんとレスを読もうか?>>449って書いてるだろ
rootで他のユーザでは

rootで他のユーザの場合ではをチェックする場合では
な。「rootで」って付けたのは余分だがそんなのするのはrootでしかないだろうという
458デフォルトの名無しさん
2020/09/23(水) 19:46:19.51ID:9Qi89m1Q
>>457
あ、もしかしてお前、「自分以外には見れない」ことを
(シェルスクリプトで)チェックすることはありえないと思ってんの?w
sshがやってるんですが?
459デフォルトの名無しさん
2020/09/23(水) 19:52:36.32ID:ORLEAcPg
なに言ってるの?sshのシェルスクリプトでやってるってどのシェルスクリプト?
460デフォルトの名無しさん
2020/09/23(水) 19:55:44.26ID:9Qi89m1Q
>>459
どうもお前は話が理解できないようだから
数字で答えてくれ

あるファイルが「自分以外のユーザーから読み書きできるかどうか」を
確認したいことは

1. ありえる
2. ありえない
3. 想像力がない
4. 言ってることが難しすぎてわからない(笑)

レスするのは数字だけな。それ以外の言葉はいらんから(全部言い訳としてみなす)
461デフォルトの名無しさん
2020/09/23(水) 20:04:40.84ID:ORLEAcPg
はあ...
答えるのもアホくさいが、>>449って書いてんだから 1 に決まってるだろ

>>449、また、読めなさそうなお前のために>>457って書いてんだろに
読めればそんなアホくさい問題を出さないだろうに(わざわざそんな何行もかけてw)

実はお前のなんか知らんが偉そうなw自説はダメなはずだぞ。なんででしょう?

(sshのシェルスクリプトでやってるってどのシェルスクリプト?ってのも答えてな、そのアホな質問にこんだけ答えてやったんだからw)>>459
>sshのシェルスクリプトでやってるってどのシェルスクリプト?

なんか制限を勝手に付けたが、いつもの自分の都合の良いように反論押さえ込むだけの馬鹿な言葉なので無視
462デフォルトの名無しさん
2020/09/23(水) 20:09:20.35ID:ORLEAcPg
ああ、
あるユーザ=管理者権限がある=sudoが使える

一般ユーザはそんなことする必要もないしするべきでもないから、2 な
463デフォルトの名無しさん
2020/09/23(水) 20:16:59.78ID:9Qi89m1Q
>>461
言い訳するな。数字だけ答えろ

「自分以外のユーザーから読み書きできるかどうか」をtestでは調べることができない

1. YES
2. NO
464デフォルトの名無しさん
2020/09/23(水) 20:18:16.77ID:9Qi89m1Q
> 一般ユーザはそんなことする必要もないしするべきでもないから、2 な

うわーw

一般ユーザーが、自分以外はファイルにアクセスできないような
パーミッションになってるかを確認する必要はないって
いっちゃったよこいつwww
465デフォルトの名無しさん
2020/09/23(水) 20:20:56.17ID:ORLEAcPg
答えたぞ。読めない読まないのは知らない
質問するのはいいが馬鹿な偉そうな素人のような態度での質問のしかたは辞めなさいw

言い訳でもなんでもいいから俺の質問にも応えてねw
sshのシェルスクリプトでやってるってどのシェルスクリプト?
実はお前のなんか知らんが偉そうなw自説はダメなはずだぞ。なんででしょう?
466デフォルトの名無しさん
2020/09/23(水) 20:22:26.95ID:ORLEAcPg
>>464
逆にある場合を具体的に言ってみてほしいな
俺の言うことはあり得ないとそんなアホのように馬鹿にした表現するなら
467デフォルトの名無しさん
2020/09/23(水) 20:22:42.48ID:9Qi89m1Q
> sshのシェルスクリプトでやってるってどのシェルスクリプト?

sshのシェルスクリプトでやってるなんて一言も言っていません。
自分の都合のいいように読み替えるのはやめろ
468デフォルトの名無しさん
2020/09/23(水) 20:24:26.32ID:9Qi89m1Q
>>466
> 逆にある場合を具体的に言ってみてほしいな

こいつヤバイなぁw

ファイルに他人には秘密にして置かなければいけないような
パスワード等を保存したとしても、パーミッションが
問題ないかを確認したりしないって言っちゃってるよw

ドコモ口座とかこういうやつが原因なんだろうな
469デフォルトの名無しさん
2020/09/23(水) 20:31:55.84ID:ORLEAcPg
>>467
なんだ
>あ、もしかしてお前、「自分以外には見れない」ことを
>(シェルスクリプトで)チェックすることはありえないと思ってんの?w
>sshがやってるんですが?
って、括弧付きでわざわざ シェルスクリプト って書いていて、続いて、sshって書いてるから、そんなのあるかと思った
sshが〜なんて、sshって別次元のある意味当たり前の話だからな

sshも作るときはパーミッションを設定するが、読み書きは読み書きできるかどうか(単なるopenできるかどうか)じゃないのかなあ、知らんけど

ともあれ、すっきりしたwから、どうも
470デフォルトの名無しさん
2020/09/23(水) 20:34:44.76ID:ORLEAcPg
>>468
>ファイルに他人には秘密にして置かなければいけないような
>パスワード等を保存したとしても、パーミッションが
>問題ないかを確認したりしないって言っちゃってるよw

イミフすぎw
何でそれを管理者権限もない一般ユーザが他のユーザのそれをしなきゃならん??のだか?
何言ってるの??

なんか管理がむちゃくちゃなシステムを作ってそうなお前がやりそうだけどw
471デフォルトの名無しさん
2020/09/23(水) 20:38:37.12ID:9Qi89m1Q
> 何でそれを管理者権限もない一般ユーザが他のユーザのそれをしなきゃならん??のだか?

こいつ理解力ゼロじゃねw
管理者(root)の話を持ってきたのはこいつだけど、
俺の話には管理者という登場人物は出てきていない

くり返し言うね。

「自分(=一般ユーザー)以外のユーザーから読み書きできるかどうか」を
(自分=一般ユーザーが)testでは調べることができない

この話をしていたという理解力はありますか?
472デフォルトの名無しさん
2020/09/23(水) 20:39:34.10ID:9Qi89m1Q
もちろん俺は
「管理者権限もない一般ユーザが他のユーザのそれをしなきゃならん」
などと一言も言ってません。

こいつはいつも、自分の思い込みで発言を改ざんしています。
473デフォルトの名無しさん
2020/09/23(水) 20:43:15.10ID:ORLEAcPg
だから既に答えたことを質問すんなって
ちゃんと管理してる(てかいたって当たり前の)環境では、「必要ない/すんな/あり得ない」よ、当たり前に

同じ質問繰り返してばかり堂々めぐりではなくて「逆にある場合を具体的に言ってみてほしいな」に応えた方が話は進むと思うぞw

あと、悪いが、
実はお前のなんか知らんが偉そうなw自説はダメなはずだぞ。なんででしょう?
も、よろしくw
474デフォルトの名無しさん
2020/09/23(水) 20:43:52.75ID:9Qi89m1Q
>>469
こいつには、かっこの使い方も説明しないといかんのか(呆)

丸括弧
https://kotobank.jp/word/%E4%B8%B8%E6%8B%AC%E5%BC%A7-636089
文章表記中などで用いる( )の記号。補足説明や省略可能などを表すのに用いる。

「(シェルスクリプト)」は補足説明であり省略可能なんだから
重要な言葉じゃねーんだよ。はー、こいつ日本人じゃないだろw
475デフォルトの名無しさん
2020/09/23(水) 20:45:12.45ID:9Qi89m1Q
>>473
お前に言っておく。

自分で作ったファイルに他人には見られてはいけないパスワードなどを入れるなら
パーミッションに問題がないか必ず確認しろ

このように「自分以外が見れないことを確認する必要」はあるんだからな
476デフォルトの名無しさん
2020/09/23(水) 20:47:29.66ID:ORLEAcPg
>>474
お前はいつも指摘の仕方が異常
お前自身ががその程度なのかもしれないがという話にかならんぞ

なに当たり前のことを言っているねん
それに、逆に補足するということはそれもある意味重要ということだぞ?別にどうでもいいなら補足もしないからな
477デフォルトの名無しさん
2020/09/23(水) 20:51:39.81ID:9Qi89m1Q
重要なときには ”ダブルクォートで” とか「かぎかっこ」でくくるんだよアホw
478デフォルトの名無しさん
2020/09/23(水) 20:52:38.90ID:ORLEAcPg
>>475
>自分で作ったファイルに他人には見られてはいけないパスワードなどを入れるなら
パーミッションに問題がないか必ず確認しろ

なるほど、むちゃくちゃなシステムなんだな
自分では確認できない、他人になり変わらないとわからないってかw
大丈夫、お前の使ってるようなお前が作った変な環境なのは使ってない作ってないから

てか、lsで確認できる程度なら全然関係ない話だろうがっ。それも自分のではなくて他人のって話だろうが、お前のは(一般ユーザがすることではないな)
無理がありすぎな設定だな。また妄想の世界に入ってるのか

>lsで確認できる程度
ここのヒントがあります(ナゾw)
479デフォルトの名無しさん
2020/09/23(水) 20:54:09.45ID:9Qi89m1Q
>>478
もう「testでは自分以外が見れないことを確認することができない」って話をしてること忘れちゃったの?
480デフォルトの名無しさん
2020/09/23(水) 20:54:47.00ID:ORLEAcPg
>>477
括弧付きでも保続で書くのは「[ある意味]重要」な
本当にお前は読めないヤツだな

だからそんな当たり前のようなことを書くのは、お前自身が〜だってw
481デフォルトの名無しさん
2020/09/23(水) 20:56:27.40ID:9Qi89m1Q
>>469で自分から括弧の話題を初めたのに↓

> って、括弧付きでわざわざ シェルスクリプト って書いていて、

何を言ってるんだろうこいつはw
482デフォルトの名無しさん
2020/09/23(水) 21:17:39.64ID:ORLEAcPg
>>479
わかった、話が通じないのは

test なんて自分で読み書きできるかどうかだけの話、それを他のユーザが読めるか確認するために使おうとする奴なんていない
ls(他)使うのは当たり前(ていうか普通コマンドなどで確認するよなw)

お前のいうtestをそんなので使うシチュエーションなんてハナからあり得ないから俺の頭に入ってこなかった
あくまでも、ファイル読みたい書きたいの話でしかしてない、俺は

なんか悪かったなw
悪かった答えの一つとしてACLを調べればいいよ。lsで確認できない、ACLはパーミッション無視してACLでのになるシステムもあったず
(めんどくさいからお前のいう目的でもsudo+test使った方が簡単だと思うぞw ダミーユーザ作ってもな、コマンドで確認しても後で変わるような変なシステム使ってるなら)
483デフォルトの名無しさん
2020/09/23(水) 21:19:44.43ID:ORLEAcPg
>>481
あああぁ
「で」は「だが」のつもりだったんだが、なんでか「で」と打っていた
そりゃお前が噛み付くのも仕方がないな、そこはスマン
484デフォルトの名無しさん
2020/09/23(水) 21:20:01.69ID:9Qi89m1Q
>>434の質問に対して、>>482という答えを言うバカでしたね(笑)

434 名前:デフォルトの名無しさん[sage] 投稿日:2020/09/23(水) 13:32:17.22 ID:BgUeNus/ [1/3]
lsコマンドをシェルスクリプトの中で使う場合ってなにかある?
ファイルの列挙に関してはfindコマンドや,もっと簡単にグロブとかを使った方が
余計な書式を含まずに処理しやすいし,
ファイルの情報に関してはtestコマンドの方が一発で分かる
(例えばディレクトリかどうかはlsコマンドの場合権限欄の情報を文字列として
解析しなくてはいけない(先頭にdがあるかどうか)が,
testコマンドの場合はtest -e && test -dで完結する)

lsコマンドを使わないとできないシェルスクリプトでの処理ってなにかあるかな。
興味本位でききたい(言わずもがなだけどlsコマンドが不要!とかそういう話ではなく)。
485デフォルトの名無しさん
2020/09/23(水) 21:22:05.00ID:ORLEAcPg
お前が質問とは関係ないシチュエーションの話をいきなりしだしたのがだな
質問者もそんな目的でtest使おうとは思ってないだろうw
486デフォルトの名無しさん
2020/09/23(水) 21:24:49.53ID:9Qi89m1Q
質問と関係ないシチュエーション?
自分以外から読み書きできないことを確かめるというシチュエーションは
testではできずlsではできるので、質問と関係ありますが?

> 質問者もそんな目的でtest使おうとは思ってないだろうw
すでに、礼を貰ってるんだがw

> 443 名前:デフォルトの名無しさん[sage] 投稿日:2020/09/23(水) 16:43:09.16 ID:BgUeNus/ [3/3]
> >>439
> あーこれはあるな。
> thx



な?こいつ色々やばいだろ?w
487デフォルトの名無しさん
2020/09/23(水) 21:29:24.56ID:ORLEAcPg
だから、それもそのユーザがという話だろう。それが俺の言う
質問者がどっちかというのは知らんけど、さすがにtestを使ってるならお前の言うようなシチュエーションはないなっていう、そう書いてるだろ
488デフォルトの名無しさん
2020/09/23(水) 21:33:26.77ID:ORLEAcPg
>>487
>そう書いてるだろ
俺がな。いちおうw

>>486
しつこく自説を書き偉ぶりたいなら、お前のは重大なミスw(なんか急にドモモが〜とか言い出すんだから重大なんだろうw)があると思うからちゃんと調べてから書いてね、せっかく「教えてやったw」んだから
489デフォルトの名無しさん
2020/09/23(水) 21:38:54.36ID:9Qi89m1Q
>>487
俺のシチュエーションは質問者が「あーこれはあるな。」と言いました。
それとは関係ないお前のが考えたシチュエーションの話を始めないでください(笑)
490デフォルトの名無しさん
2020/09/23(水) 21:40:57.92ID:9Qi89m1Q
ドコモ口座のくだりは「自分以外が見れないことを確認するというシチュエーション」を
あなたが思いつかなかったからですねw
491デフォルトの名無しさん
2020/09/23(水) 21:45:02.67ID:9Qi89m1Q
質問者「lsコマンドをシェルスクリプトの中で使う場合ってなにかある?」
ORLEAcPg「testを使ってるならお前の言うようなシチュエーションはない」

な?会話になってない
492デフォルトの名無しさん
2020/09/23(水) 21:46:06.17ID:ORLEAcPg
シチュエーションは書いてないね
だから、それも その別のユーザが読み書きしたいときにできるか確認=読み書きできないのかではなくて読み書きしたいができるのか という話も全然ありえるね

多分、>>446もそうだと思うよ「スクリプトで書くと」と書いてるしね
質問者も。理由を書いてるように

お前のようにはなりたくないけどw、多分俺の方じゃないかなあどうかなああ

お前はそのシチュエーションに当たった想像した時にtestを使おうと思ったの?そんなに自説に拘るとは
493デフォルトの名無しさん
2020/09/23(水) 21:49:21.84ID:9Qi89m1Q
> だから、それも その別のユーザが読み書きしたいときにできるか確認=読み書きできないのかではなくて読み書きしたいができるのか という話も全然ありえるね

質問者「lsコマンドをシェルスクリプトの中で使う場合ってなにかある?」
俺「他のユーザーが読み書きでないこと確認したいときはls使うしか無いよ」
質問者「 あーこれはあるな。tkx」

ORLEAcPg「読み書きしたいができるのかというシチュエーションがー」


意味不明w
494デフォルトの名無しさん
2020/09/23(水) 21:50:10.12ID:ORLEAcPg
>>492
>理由を書いてるように
俺がな。いちおうw

大げさに急にドコモが〜とか騒ぎだしたくせに、責任転嫁か、意味不明すぎ
脊髄反射のような内容のない連投は辞めろよw
495デフォルトの名無しさん
2020/09/23(水) 21:52:19.69ID:ORLEAcPg
自説は一歩も引きません、俺の頭の中で思ったことは全て正解ですそれしかありません
モードに入ったか

すでにそれだけじゃないと書いたので ちゃんとそれに対して 反論してね(なんて言いたくはないが誰かの常套句なのでw)
496デフォルトの名無しさん
2020/09/23(水) 21:53:09.37ID:9Qi89m1Q
会話のキャッチボールができてないんだろうね
俺は質問者の質問に対して、testではできずにlsでしかできないという一例を
言ったのにこいつは何が言いたいんだろうかw

ORLEAcPg「testを使ってるならお前の言うようなシチュエーションはない」
497デフォルトの名無しさん
2020/09/23(水) 21:54:32.42ID:ORLEAcPg
うん、お前がな
明らかに堂々巡りしてるのはお前w
498デフォルトの名無しさん
2020/09/23(水) 21:54:33.12ID:9Qi89m1Q
>>495
お前は質問者の質問に対して何を言いたいのか
それだけを書いてみてよw

無理だろ?お前は質問者を置いてきぼりにしてるからね
499デフォルトの名無しさん
2020/09/23(水) 21:55:07.75ID:9Qi89m1Q
>>497
だから質問者の質問に答えろってw
2回目
500デフォルトの名無しさん
2020/09/23(水) 21:58:26.51ID:ORLEAcPg
すでに書いてる。堂々巡りだな、それでよくキャッチボールとかw

そして ls はお前の言うようなのでも俺の言うようなシチュエーションでも不備があるともなw
501デフォルトの名無しさん
2020/09/23(水) 21:59:35.70ID:9Qi89m1Q
> すでに書いてる。
聞いてるのは質問者への答えだが?どのレス?

言えないはず
502デフォルトの名無しさん
2020/09/23(水) 22:01:18.13ID:ORLEAcPg
>>499
イミフ
ls は使うよ。使う場合はお前じゃない人が書いてる場合とか
あえて言うなら、お前のそれだけじゃ使えない場合もあるよってことかな

てか、なんでお前がそんなレスするのかイミフすぎw
503デフォルトの名無しさん
2020/09/23(水) 22:01:22.69ID:9Qi89m1Q
> そして ls はお前の言うようなのでも俺の言うようなシチュエーションでも不備があるともなw

質問者にlsを使う場合を聞かれたから、その答えである「lsを使わなければいけない場合」を俺が言ったのに、
なぜか「lsでは駄目な場合もある!」と言い出してけんかを売ってくるアホw
504デフォルトの名無しさん
2020/09/23(水) 22:01:51.35ID:9Qi89m1Q
>>502
だから俺じゃなくて質問者の質問に答えろってw
3回目
505デフォルトの名無しさん
2020/09/23(水) 22:02:18.95ID:ORLEAcPg
>>501
お前の頭の構造は計り知れない。わかるかっw
そしてイミフなことを急に言われても困惑するだけ
506デフォルトの名無しさん
2020/09/23(水) 22:02:57.86ID:9Qi89m1Q
「質問者の質問に答えろ」の意味がわからないらしいw
507デフォルトの名無しさん
2020/09/23(水) 22:04:23.38ID:ORLEAcPg
>>503
補足だよw
ホントにお前は自分のミス/抜けなりを絶対に認めないマンだなw

>>504
堂々巡りw キャッチボールとはなんなのか。お前のは壁当て(?)だ
508デフォルトの名無しさん
2020/09/23(水) 22:04:56.57ID:9Qi89m1Q
質問者の質問に答えてみろっていっても、やっぱり俺にレスをするw
4回目
509デフォルトの名無しさん
2020/09/23(水) 22:05:31.69ID:ORLEAcPg
>>506
なんで「お前が」「俺に」命令してるのか、全くわからんな
真っ当な根拠をちょっと言うてみ
510デフォルトの名無しさん
2020/09/23(水) 22:06:09.41ID:9Qi89m1Q
質問者の質問に答えたらねw
5回目
511デフォルトの名無しさん
2020/09/23(水) 22:06:23.28ID:ORLEAcPg
>>508
>質問者の質問に答えてみろっていっても、やっぱり俺にレスをする

>質問者の質問に答えてみろっていっても、
>やっぱり俺にレスをする

超絶イミフすぎw
512デフォルトの名無しさん
2020/09/23(水) 22:07:14.53ID:9Qi89m1Q
イミフという言葉でごまかして
質問者の質問に答えないw
6回目
513デフォルトの名無しさん
2020/09/23(水) 22:07:34.39ID:ORLEAcPg
しょもな。さすが自称キャッチボールできるが実はしたことがない人だなあ
ショーーーもなっ
514デフォルトの名無しさん
2020/09/23(水) 22:08:30.66ID:9Qi89m1Q
質問者の質問に答えないからキャッチボールできてない
7回目
515デフォルトの名無しさん
2020/09/23(水) 22:09:15.87ID:BgUeNus/
なんかすいません。
516デフォルトの名無しさん
2020/09/23(水) 22:09:23.19ID:ORLEAcPg
>>512

>>509
以下のレスに対しても
てか同じレス繰り返してるだけだと 荒らし だよ
517デフォルトの名無しさん
2020/09/23(水) 22:09:27.29ID:9Qi89m1Q
いいえいいえ、いつもの人ですからw
518デフォルトの名無しさん
2020/09/23(水) 22:10:15.53ID:9Qi89m1Q
>>515
心当たりないと思うけど、 ID:ORLEAcPgはレスを返したつもりらしいよw
519デフォルトの名無しさん
2020/09/23(水) 22:11:59.79ID:ORLEAcPg
>>515
こいつ とは 誰もが こんな風になる何度も繰り返してるパターンだから気にすることないよ

>>517,518
よく言うよww何言ってんだか
520434
2020/09/23(水) 22:20:56.68ID:BgUeNus/
どっちの味方をする訳でもないんですけど,
私の質問を別の言い方で表わすなら
「(対話的でない)シェルスクリプトにおいて
私はlsコマンドを使う意義をあまり感じないんだけれど
(なぜならlsコマンドを使うほぼ全ての状況において
やりたいことをもっと簡単に実現できる
コマンドが用意されてるから。例: find, test),
lsコマンドを積極的に使わないといけない場合はありますか」
ということで,それに対して
「ある。lsコマンドでないと他人の権限を確認できない。
(testコマンドは自分の権限のみ)」
という解答を頂いたので,それで十分です。
ありがとうございました。
521デフォルトの名無しさん
2020/09/23(水) 22:53:35.65ID:9Qi89m1Q
どういたしましてw

lsは対話型で使うようなイメージだけど
POSIX準拠コマンドは最低限だが必要なコマンドを網羅しているはずという観点から見ると、
もっと簡単に実現できるコマンド(findやtestじゃなくてstatなどね)の多くは
POSIX準拠ではないので、じゃあどうやって実現するんだ?と考えると
lsコマンドでできるじゃんという結論に達するんだよ

その結論を前提としてlsコマンドの仕様を再確認すると
lsコマンドの出力形式はちゃんと決まっており
(対話的でない)シェルスクリプトから使うことも
想定されてることに気づく

lsコマンドは一覧表示だけではなくファイルの属性を
取得するためのコマンドでもあるんだよ
522デフォルトの名無しさん
2020/09/24(木) 23:24:13.87ID:92vN9a+2
>>434
何万ファイルもあるディレクトリ以下の実際のファイル数をカウントしたい時とか。
ls -U ディレクトリ | wc -l
が速くて良いかな。
これじゃディレクトリも一緒にカウントしちゃうか・・・
523デフォルトの名無しさん
2020/09/24(木) 23:25:44.41ID:92vN9a+2
うう。リロード忘れてとっくの昔に終わった話にレスを・・・orz
524デフォルトの名無しさん
2020/09/24(木) 23:27:34.11ID:92vN9a+2
あ、まだ終わってなかったかな?
まあでもたいした事書いてないからどうでもいいや。俺のことは忘れてくれ。
525デフォルトの名無しさん
2020/09/25(金) 18:57:33.19ID:zTEUyLd9
スクリプト中でlsはしょっちゅう使うな、俺。
526デフォルトの名無しさん
2020/09/25(金) 19:30:49.67ID:mj+ujYgo
普通に使うな。逆になんで使わないと思うのか不思議
lsで問題があるようなら言うような別のをにするけど
527デフォルトの名無しさん
2020/09/25(金) 20:48:34.96ID:3RZRIqWS
いろんなコマンドを臨機応変に使うことが気になる質だったんやろ。
好き好きとしか。
528デフォルトの名無しさん
2020/09/25(金) 21:48:25.44ID:jsxvfqFg
>>526
POSIX限定コマンドじゃないなら
ls以外でほとんどのことができるからでしょ
macOSがオプション違っていて面倒くさすぎるってのを除けば
パーミッションとかもstatコマンドで取得できるし

それにしてもWindowsはLinuxに対応したから楽になったけど
macOSはBSD系だからローカルでテストして
そのままサーバーに持っていくってのが難しくなってるなw
529デフォルトの名無しさん
2020/09/25(金) 21:49:09.32ID:jsxvfqFg
訂正
POSIX準拠コマンドに限定しないなら
ls以外でほとんどのことができるからでしょ
530デフォルトの名無しさん
2020/09/26(土) 00:48:11.88ID:dttQ22N8
>>527
ls使わないだからな、臨機応変ではなさげ
好き好きにとしかは同意
531デフォルトの名無しさん
2020/09/26(土) 00:51:51.88ID:QU/lr7ZN
>>530,527
ああ、
>コマンドを臨機応変に使うことが気になる質
は、他の人を指してるとも読めるな。そっちのつもりならすまん
532デフォルトの名無しさん
2020/09/26(土) 02:08:03.67ID:4T/mBKG7
>>531
使うことが気になる(から使いたくない)質
533デフォルトの名無しさん
2020/09/26(土) 02:34:50.07ID:QU/lr7ZN
>>532
>>531の、
>コマンドを臨機応変に使うことが気になる質
は「ことが気になる質」余分だった「コマンドを臨機応変に使う」だなと書き込んだ後で気がついた。まあいいかとほっといた(真逆(?)なんだが)。すまん

なんとなくw理解。どうも&重ね重ねすまん
534デフォルトの名無しさん
2020/09/28(月) 21:25:26.80ID:iGYBTUav
誰とは言わんけどツイッターで永遠と古い記事繰り返し流してるボットいるよね
リンク切れてるし邪魔なだけなんだけどああいうの消し去りたい
535デフォルトの名無しさん
2020/09/30(水) 23:58:17.77ID:QG8+TwCh
https://zenn.dev/mattn/books/bb181f3f4731920f29a5/viewer/5

> 既にシェルスクリプトのみでやる領域を超えてきています。
> 本来ならば正しいプログラミング言語を選んで正しくフィルタリングすべきだと思います。

と書いてありますが、これを「正しいプログラミング言語」で書くとどうなりますか?
シェルスクリプトだけでやるより分かりやすくなりますか?
536デフォルトの名無しさん
2020/10/01(木) 00:02:53.15ID:5ZG2Vz6Q
あげー
537デフォルトの名無しさん
2020/10/01(木) 07:52:50.34ID:theiHz1p
>>535
Windows のRuby で、JSON ファイルをダウンロードして保存する、部分だけを作ったが、
85KB のファイルの中身には、日本語は無く、
ほとんど、\u6708 みたいなユニコード・コードポイントの表示ばかりで読めない。
{{\u30ab\u30ec\u30f3\u30c0\u30fc 10\u6708}}

ダウンロードする際の、オプションでも間違ったのかな?

download_file = "wikipedia.json"

# ファイルが存在しない時だけ、ダウンロードして保存する
unless FileTest.exist? download_file
require 'open-uri'
require 'cgi'
require 'date'

today = Date.today.strftime( "%-m月%-d日" ) # 今日の日付。1桁表示。例、10月1日
url = "https://ja.wikipedia.org/w/api.php?format=json&;action=query&prop=revisions&rvprop=content&exintro&explaintext&redirects=1&titles=" +
CGI.escape( today ) # URL encode

# ダウンロードしたファイルを保存する
open( url ) do |file|
open( download_file, "w" ) do |out|
out.write( file.read ) # 書き込み
end
end
end
538デフォルトの名無しさん
2020/10/01(木) 07:56:51.16ID:eBr+ViBh
>>537
やっぱり逆に長くなってるし分かりやすくなってないですよね?
539537
2020/10/01(木) 08:27:48.51ID:theiHz1p
Ruby の方が、一般的な関数を使っているから、分かりやすい。
例えば、CGI.escape で、URL encode してる

元のサイトだと、date +%-m月%-d日
の部分を、何かでエンコードして、以下のようにして、
date +%-m%%E6%%9C%%88%-d%%E6%%97%%A5

それを、titles の所に書いている。
titles=$(date +%-m%%E6%%9C%%88%-d%%E6%%97%%A5)
540デフォルトの名無しさん
2020/10/01(木) 23:43:56.76ID:GxyRQFaD
> Ruby の方が、一般的な関数を使っているから、分かりやすい。
その理屈だとシェルスクリプトにもそのような関数(コマンド)があればいいって話になるよね?
541デフォルトの名無しさん
2020/10/02(金) 00:24:23.57ID:DKz3pZcY
シェルスクリプトの場合はJSONからデータ取るのにjqのミニ言語を覚えなきゃいけないというのはあるけど
Wikipediaのように構造化しにくいデータをテキストのまま加工するならそこまで大きな差はないよね

便利な関数が用意されてるかどうかやエラーハンドリングがやりやすいかどうかくらいの違い
Wikipediaのデータ用のパーサー使ってテキストじゃなく構造化したデータを扱えるなら差が出てくる
542デフォルトの名無しさん
2020/10/02(金) 01:31:17.04ID:yAc5FveJ
jqのミニ言語 vs 言語のパーサー?とかだろうけど
結局、jqのミニ言語の方が小さくならね?

それでも言語のパーサー使うってことは
大きくなったら、さくっと複雑な正規表現一発よりもも
愚直に文字や単語を検索していって処理を書いたほうが
分かりやすいと言ってるのと同じようなことなんかな?
543デフォルトの名無しさん
2020/10/02(金) 01:39:10.41ID:ChxT/cO/
答えを教えてくれという質問に答える必要があるのか?
544デフォルトの名無しさん
2020/10/02(金) 01:40:52.28ID:ChxT/cO/
なんでRubyなのか。初心者ならどのプラットフォームでも動くPythonを勧めておけよ。
545デフォルトの名無しさん
2020/10/02(金) 01:59:11.44ID:yAc5FveJ
>>543
答えたくないなら何も話さなくていいのに
そのような質問をする必要があるのか?w
546デフォルトの名無しさん
2020/10/02(金) 02:02:36.55ID:ChxT/cO/
シェルスクリプトの話ではないならな
547デフォルトの名無しさん
2020/10/02(金) 02:07:55.41ID:3z5rsnx9
いつもの
548デフォルトの名無しさん
2020/10/02(金) 02:09:25.19ID:yAc5FveJ
なるほどw
549デフォルトの名無しさん
2020/10/02(金) 03:39:17.87ID:b+gARvx0
macOSがzshに変わっても/bin/shはbashなんだしzshでコード書くやつなんておらんだろと
思っていたけどzshrcとかで書くことはあるんだな
550デフォルトの名無しさん
2020/10/02(金) 04:11:27.42ID:3z5rsnx9
何言ってるのかと思ったら、zsh固有のを使ってことか
誰も好き好んでそうシェルはそう変えないけど、デフォがzshになったらそれなりに出てくるんじゃね
だいたいがデフォだからそのシェルを使ってるって理由にならない理由wだからな

>zshに変わっても/bin/shはbashなんだし
bashismに慣れているんだったら脱却した方がいいぞ。あくまでも過渡期(変えた直後)だからそうしてるだけで、そのうち無くなるぞ。絶対何かに変わる。dashとか(dashとは言ってない)
551デフォルトの名無しさん
2020/10/02(金) 04:20:08.62ID:Kgg5xh5c
なくならないほうに賭けるぜ!
Bashはもうなくせんやろ。w
552デフォルトの名無しさん
2020/10/02(金) 04:27:45.79ID:b+gARvx0
bashはなくならないが、インタラクティブシェル
/bin/shはdash、もしくはPOSIX準拠のシェルだろ

dashよりも速いシェルって作れる気がするんだよな
JITとか取り入れてさ
553デフォルトの名無しさん
2020/10/02(金) 04:58:29.55ID:3z5rsnx9
メンテするのめんどくさくなって消してしまうのが定番だからなあ
必要なら自分で入れろになると思うよ。いつも通りならw
554デフォルトの名無しさん
2020/10/02(金) 08:31:08.24ID:Ym6Y+dmB
dash dash dash
bash and dash
555デフォルトの名無しさん
2020/10/02(金) 09:54:23.17ID:b+gARvx0
bashismは嫌いだから/bin/shはdashにしてbashをオプショナルにするか
POSIXで標準化して欲しい
556デフォルトの名無しさん
2020/10/02(金) 12:30:02.56ID:Kgg5xh5c
>>553
既存シェルスクリプトの動作検証よりはマシやろ。w
BashとかPerl5とかはすでにインフラみたいなもんだし。

まあ、Python2も消せないやろ、と思ってたら、意外と3のみになったもよう。
557デフォルトの名無しさん
2020/10/02(金) 12:40:10.03ID:kBx+3rAk
>>556
何を言っているのかイマイチわからん
現在の bash 3.2 ですら時代遅れだし、Apple自身でメンテしなくてはならない
macOS内でApple製のスクリプトがあるんだったらもちろん代替になるので問題なく書き換えられるだろう
今まで通りならmacOSバンドルとしてはインストールされなくなるのは当然のような帰結
558デフォルトの名無しさん
2020/10/02(金) 12:52:27.29ID:sGznlVtc
macOSの/bin/shのbash3.2はもう負債だよねw
これからAppleはどうするつもりなんだろ
zshは互換性ないし、dashにしたら機能低下だしw
559デフォルトの名無しさん
2020/10/02(金) 16:49:14.59ID:Kgg5xh5c
>>557
あー、アポーの話だったか。。。
まあ、今までも互換を壊すときには平然とぶち壊してきたし、マジメに考えてもしょうがないのでは。w
560デフォルトの名無しさん
2020/10/02(金) 18:28:44.86ID:bqQ3ZGOC
いつ無くなってもいいように今からしとこというマジメに考えたらの話だけど
マジメってどういう意味なのか知らんけど
561デフォルトの名無しさん
2020/10/02(金) 21:23:42.67ID:VhuuBVU8
Appleは突然Swift出してきたりMetal出してきたりArm出してきたりであらゆる分野で考慮するだけ無駄というスタンス
562デフォルトの名無しさん
2020/10/02(金) 22:46:19.69ID:Kgg5xh5c
>>561
そうそう。w
Bashをなくしたとして、POSIX互換シェルをわざわざ残すのかと。

そんな心配をするよりも、今使えるBashを謳歌したほうが合理的やろ。
563デフォルトの名無しさん
2020/10/02(金) 22:58:56.81ID:r3ReT+S4
その今使えるbashっていうのがmacOSでは3.2なのよね・・・

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/migration_planning_guide/sect-migration_guide-package_changes-bash

Bash-4.0 およびそれ以降のバージョンは、 プロセス置換の構成をブレース展開を使って変更せずに渡すことができるようになるため、
内容の展開はすべて別々に指定し、 各プロセス置換を別々に入力しなければならなくなります。

Bash-4.0 およびそれ以降のバージョンでは Posix が指定するのと同様に、 SIGCHLD が wait の組込みに割り込みを許可するため、
全ての子を待機するよう「wait」を使用する場合、 子を終了したら SIGCHLD トラップは常に呼び出されることがなくなります。

Bash-4.0 およびそれ以降のバージョンは、 クローズ用の区切り文字 $() コマンド置換を検索する場合に
Posix のルールに従うようになり、 旧バージョンのような動作はしなくなりますが、
より多くの構文および解析のエラーを先に捕らえてからコマンド置換を評価するためのサブシェルを生成します。

Bash-4.0 およびそれ以降のバージョンでは、 パイプラインのコマンドのひとつがコマンド一覧を実行している間に
SIGINT によって終了させられた場合、 シェルは割り込みを受けたかのような動作をします。

Bash-4.0 およびそれ以降のバージョンでは、 set -e オプションの処理法が変更されるため、
パイプラインが失敗すると (失敗したパイプライン内の最後のコマンドが単純なコマンドでない場合も) シェルは終了します。
これは Posix が指定するものとは異なります。 この部分の基準を更新する作業が進展中です。
Bash-4.0 の動作はリリースの時点での合意を得ようとしている動作です。

Bash-4.0 およびそれ以降のバージョンでは、"." がシステムの PATH に存在しない場合でも、. (source) ビルトインが
ファイル名の引数を現在のディレクトリで検索してしまう原因となっていた Posix モードのバグが修正されています。
Posix では、このような場合シェルによる PWD 変数内の検索は行われるべきではないと述べられています。
564デフォルトの名無しさん
2020/10/03(土) 02:30:20.61ID:GCdjvz0l
>Bashをなくしたとして、POSIX互換シェルをわざわざ残すのかと
何もわかってないのに口出す馬鹿
565デフォルトの名無しさん
2020/10/03(土) 11:56:15.65ID:ylT9+9xh
シェル上で別の種類のシェルが動いたり、種類が異なるシェルが別のシェルの動作をエミュレートしていることを知らないんだろうね。
566デフォルトの名無しさん
2020/10/03(土) 12:51:18.99ID:Pwjke0L1
>>564
まあ見とけ。w
どうせあと数年でコロッと変わるんやろ。
567デフォルトの名無しさん
2020/10/03(土) 13:59:59.45ID:/+lXvOCZ
変わるも何も現状及びその対応の予測の理解が間違ってるってことなんだがw
568デフォルトの名無しさん
2020/10/03(土) 14:04:51.63ID:F0et+WHN
POSIXという標準があるから変わるわけないんだよな
多く使われてるdebian/ubuntuがPOSIXに準拠を頑なに守ってる
/bin/shがdashが多いからPOSIX準拠で書くしかない
そうすればmacOSでも動く
569デフォルトの名無しさん
2020/10/03(土) 14:12:51.48ID:/+lXvOCZ
1行目と2行目以降が繋がらない

bashのエミュレーションがちゃんとしてたら問題がなかったのにな
GNUはライセンスにうるさいwくせになぜあんなのなのだかな
570デフォルトの名無しさん
2020/10/06(火) 07:21:02.23ID:8TYkjhvC
>>554
chown chown smbd
zip xargs smbd
571デフォルトの名無しさん
2020/10/10(土) 22:35:58.03ID:33g/v1Rs
シェルスクリプト関連のツイート見てたらGPT-3?か知らんけど
AIで文章を生成して日本語に翻訳してるボットを発見したw

https://twitter.com/5hc7PFFLfvjD88V
https://twitter.com/5chan_nel (5ch newer account)
572デフォルトの名無しさん
2020/10/13(火) 23:49:10.96ID:fWSRS6M8
素人ですが世話になります
POSIXってシェルの最低限の共通規約って認識でいいんだろうか
機能を拡張しても所詮は方言だから封印しとけと
573デフォルトの名無しさん
2020/10/14(水) 00:14:50.23ID:1GHjlaSZ
grep -Lqだとqの方が勝つんか…
574デフォルトの名無しさん
2020/10/14(水) 00:24:26.43ID:1GHjlaSZ
grep -L pat file > /dev/null って捨てると返り血が変わる…?
575デフォルトの名無しさん
2020/10/14(水) 01:29:03.98ID:0TgtAVoq
>>572
POSIXに準拠しておけば、Debian、Ubuntuの/bin/sh(dash)や
Alpine Linux(busybox)やmacOS(古いbash 3系)やmacOSのユーザーシェル(zsh)
でもそのまま、もしくはわずかな修正で動くようになるというメリットが有る

世の中全部bashやろーとか言ってるやつは、Debianで実際にシェルが変わったときや
macOSのbashが古いなどで変化に耐えられず、最新のbashしかしらん
どうせbash使うもんって言いはる羽目になってる

bash依存してるやつは、なにか理由があってbash依存してるのではなく
無知ゆえに必要もないのに[[ ]]を使ったりfunctionキーワードを使ったり
独自のforの書き方をしたり配列を使ってたりするだけ

ちゃんと知っていればbashスクリプトの9割は簡単にPOSIX準拠で書ける
もしPOSIX shではなくbashを使いたくなったら、他の言語を使ったほうが良い
POSIX shの機能は本当に必要なものだけを実装している。それがUNIXの思想

素人はまずPOSIXの機能だけ勉強しとけ
最初にbashから入ると、これはPOSIXで使えるんだっけ?って悩む羽目になる
576デフォルトの名無しさん
2020/10/14(水) 01:36:55.66ID:LOnQ9LGm
原理主義者のニオイがする
577デフォルトの名無しさん
2020/10/14(水) 02:01:39.11ID:0TgtAVoq
そういや日本人が作った口先だけのPOSIXの原理主義みたいな変なのがありましたねw
3人ぐらいのグループでPOSIXにしろーしろーと叫ぶだけで何も生み出さない

それを使って自分たちは商売してるから
本人にとっては生み出してるんでしょうが

あれに洗脳された学生とかは可哀想です。
だってそのグループ界隈以外ではまったく使われてないものだから
578デフォルトの名無しさん
2020/10/14(水) 02:14:34.88ID:rQGDkRcC
>>576
いやいや、ニオイどころか、まるだしやろ。w

現実の動作確認もろくにできない机上のPOSIXを夢想してもしかたない。
んなこと、いちいちやってられんからな。
579デフォルトの名無しさん
2020/10/14(水) 03:02:47.56ID:0TgtAVoq
現実の動作確認ならDebianやmacOSやAlpine Linuxでできますが?
580デフォルトの名無しさん
2020/10/14(水) 04:07:29.66ID:6lVggo30
>>578
原理主義者といえばそうかもしれんが、臨機応変なことができないのは確かそうだな
581デフォルトの名無しさん
2020/10/14(水) 04:18:21.34ID:rQGDkRcC
>>579
それは、あくまで個々の実際であって、POSIXの証明にはならんやろ。
582デフォルトの名無しさん
2020/10/14(水) 09:13:33.96ID:e7axr172
>>581
POSIXの証明って何の話?
bash拡張機能はbashでしか使えない。POSIX shの範囲でならどのPOSIXシェルでも使える
実際にbash拡張機能はDebianの/bin/sh(dash)やAlpine Linuxの/bin/sh(busybox)では使えない
という当たり前の話しかしてないが

俺に何を証明して欲しいん?
動かない命令でも書いてほしいんか?
array=(1 2 3)
↑DebianやAlpine Linuxで動かない。ほらPOSIXの証明になったろw
583デフォルトの名無しさん
2020/10/14(水) 09:18:46.30ID:q9X9j9UM
POSIX STRICTチェックみたいなものないの?
もしくはピュアPOSIXの実装とか
584デフォルトの名無しさん
2020/10/14(水) 09:25:02.38ID:e7axr172
>>583
shellcheck

こういうエラーが出る

$ shellcheck posix.sh

In posix.sh line 3:
array=(1 2 3)
^---^ SC2034: array appears unused. Verify use (or export if used externally).
^-----^ SC2039: In POSIX sh, arrays are undefined.

For more information:
https://www.shellcheck.net/wiki/SC2034 -- array appears unused. Verify use ...
https://www.shellcheck.net/wiki/SC2039 -- In POSIX sh, arrays are undefined.


> もしくはピュアPOSIXの実装とか
それがdash
585デフォルトの名無しさん
2020/10/14(水) 09:43:48.30ID:e7axr172
WSL(Ubuntu)の/bin/shもdash、ピュアPOSIXの実装
586デフォルトの名無しさん
2020/10/15(木) 06:07:28.41ID:/dATFcTZ
目的はピュアPOSIXの実装ではないけどな
587デフォルトの名無しさん
2020/10/15(木) 07:43:17.35ID:VXXH9SNU
dashの目的は、それまで使われていた/bin/shの代替
高速で軽量でPOSIX互換を目指している

この目的と目標は実現され /bin/shの代替として
Debian系(Ubuntu含む)などで多く使われている
FreeBSDやNetBSDでもashが使われてる
dashはそのashをDebian用に移植したもの

bashはインタラクティブシェルとしては一番使われてるだろうが
shebangのは/bin/shが使われることが多いので
シェルスクリプトを動かす場合はdashが一番使われているシェルだろう
588デフォルトの名無しさん
2020/10/15(木) 10:07:06.34ID:r6YkuFXF
https://twitter.com/col_richie/status/1316543524569903111

リッチー大佐の中の人
@col_richie
「シェルスクリプトによる○○」と銘打ちながら、必要なものにPythonやGoが含まれるというなら、
それは「Pythonによる○○」あるいは「Goによる○○」に他ならな
なぜ「シェルスクリプトによる○○」と語ることにこだわるのか?
他言語に頼る時点で既にそんな資格はない。当たり前だろうが!!!



郵便番号から住所欄を満たすアレを、シェルスクリプトで実装
https://github.com/ShellShoccar-jpn/zip2addr
https://github.com/ShellShoccar-jpn/zip2addr/blob/master/commands/parsrj.sh

※ これはシェルスクリプトではなくawk(笑)

# #
# === Generate the JSONPath-value with referring the head of the ======= #
# strings and thier order #
awk ' #
BEGIN { #
# Load shell values which have option parameters #
alt_spc_in_key=ENVIRON["sk"]; #
root_symbol =ENVIRON["rt"]; #
key_delimit =ENVIRON["kd"]; #
list_prefix =ENVIRON["lp"]; #
list_suffix =ENVIRON["ls"]; #
# Initialize the data category stack #
datacat_stack[0]=""; #
delete datacat_stack[0] #
# Initialize the key name stack #
https://twitter.com/5chan_nel (5ch newer account)
589デフォルトの名無しさん
2020/10/15(木) 10:08:30.55ID:r6YkuFXF
さらしあげとこうw
590デフォルトの名無しさん
2020/10/15(木) 10:13:25.16ID:r6YkuFXF
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

NAME
awk - pattern scanning and processing language
awk - パターン走査および処理言語

DESCRIPTION
The awk utility shall execute programs written in the awk programming language,
which is specialized for textual data manipulation.
awk ユーティリティは,テキストデータ操作に特化した awk プログラミング言語で書かれたプログラムを実行する.


_人人人人人人人人人人人_
> awk プログラミング言語 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
591デフォルトの名無しさん
2020/10/15(木) 10:17:25.72ID:WTnE7/zf
awkもjqも全部シェルスクリプトだよ
592デフォルトの名無しさん
2020/10/15(木) 10:22:25.09ID:r6YkuFXF
>>591
awk ユーティリティは,テキストデータ操作に特化した
awk プログラミング言語で書かれたプログラムを実行する.

_人人人人人人人人人人人_
> awk プログラミング言語 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
593デフォルトの名無しさん
2020/10/15(木) 10:25:32.93ID:r6YkuFXF
たっくん
シェルスクリプトでTwitterBotっていうのを見かけたけど、「コマンドの実装にGoを使う」って書いてあって「うーん?」となってしまった

リッチー大佐の中の人
まったくだ。なめてるのかと。我らの小鳥男こそシェルスクリプトによる最強のTwitterクライアントアプリだ。
もちろん、別途シェルスクリプトを組めばbotも好きなように作れる。 https://github.com/ShellShoccar-jpn/kotoriotoko

594デフォルトの名無しさん
2020/10/15(木) 10:26:22.84ID:r6YkuFXF
https://github.com/ShellShoccar-jpn/kotoriotoko/blob/master/UTL/base64

# Main

(cat ${1+"$@"}; echo '') |
awk ' #
BEGIN { #
# --- prepare #
OFS = ""; #
ORS = ""; #
# --- prepare encoding #
for(i= 0;i<256;i++){c2p[sprintf("%c",i)]=sprintf("%%%02X",i);} #
c2p[" "]="'"$instead_of_spc"'"; #
for(i=48;i< 58;i++){c2p[sprintf("%c",i)]=sprintf("%c",i); } #
for(i=65;i< 91;i++){c2p[sprintf("%c",i)]=sprintf("%c",i); } #
for(i=97;i<123;i++){c2p[sprintf("%c",i)]=sprintf("%c",i); } #
c2p["-"]="-"; c2p["."]="."; c2p["_"]="_"; c2p["~"]="~"; #
595デフォルトの名無しさん
2020/10/15(木) 10:38:59.90ID:r6YkuFXF
POSIX準拠コマンドの中で言語と言えるもの
(セミコロンや改行区切りで "複数の命令" を手続き的に実行できるものを言語としています)

awk - pattern scanning and processing language
bc - arbitrary-precision arithmetic language
ed - edit text
sed - stream editor

他にもあるかな?
bcは複数の命令を実行できるから言語だけど
exprは式を評価するだけだから違う
596デフォルトの名無しさん
2020/10/15(木) 20:22:35.08ID:cNnx9G5T
exを忘れちゃいけない
597デフォルトの名無しさん
2020/10/15(木) 22:29:33.58ID:BrsJS6s+
exでもできるん?

sedとか"s/a/b/"みたいに一行のコマンドを実行してるように見えるけど
実際には
s/a/b/
s/c/d/
みたいにsedスクリプトを実行できるわけだよね

sedは置換をベースとしたかなり独特な言語だけど
awkなんてBEGINで全部書いてしまえば
完全に普通のスクリプト言語になる

bcも実際はスクリプトを使って計算する
https://linux.die.net/man/1/bc の中間あたりにある例は
関数定義やif文while文も使っていて実は言語であることがわかると思う

まあ言いたいことは、シェルスクリプトからPythonやGoを呼び出していて
そこがメインで処理してるのがシェルスクリプトでないように
awkやsedでメインの処理を行ってるなら同様にそれもシェルスクリプトではない
598デフォルトの名無しさん
2020/10/15(木) 22:51:46.33ID:rxPXHFq5
じゃCで書いてるコマンド呼び出したらシェルスクリプトじゃないね
599デフォルトの名無しさん
2020/10/15(木) 23:01:29.76ID:BrsJS6s+
>>598
そのとおりだよ
シェルスクリプトで階乗を行うコードを実装しましたと言っておきながら
C言語でコードを実装して、シェルスクリプトではそれを呼び出すだけなら
それはシェルスクリプトで実装したとは言えない

シェルスクリプトで実装というのなら、シェルスクリプトで
定義されているものだけを使って使って作らないといけない
例えば変数展開(を利用した文字列処理)や算術式展開を使った四則演算や
case文を使った文字列パターンマッチング処理で作る

外部コマンド呼び出しは(そのコマンドを自分で実装してないなら)
外部コマンドと組み合わせてシェルスクリプトで実装したと言えなくはないが
そもそもその外部コマンドがPythonやawkのような"別の言語"を使うものなら
そこから別の言語に切り替わっている
600デフォルトの名無しさん
2020/10/15(木) 23:02:18.89ID:5H3UlTi7
イチャモンつけるならmakeがチューリング完全って話にまで火花が散るので、適当な落しどころは
POSIXに規定されておらず、それ自身が汎用プログラミング言語であることを目的として実装されたインタプリタやランタイムに対して、目的の処理を委譲しているのをシェルスクリプトだと表現されると気に食わない人が居る
くらいでいいでしょ

イチャモンつけるのも程々にしとかなきゃただ相手の意図を汲み取るつもりのない人間でしかなくなるぞ
601デフォルトの名無しさん
2020/10/15(木) 23:03:31.46ID:BrsJS6s+
>>600
厳密な境目を見つけたいんじゃなくて

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html
The awk utility shall execute programs written in the awk programming language,
awkユーティリティは、awkプログラミング言語で記述されたプログラムを実行します。

と書いてあるんだから、awkは「awkプログラミング言語」
602デフォルトの名無しさん
2020/10/15(木) 23:09:18.27ID:BrsJS6s+
make は内部的にシェルを呼び出してるので
GNU拡張は無視するとして、makeの範囲だけでなにか作れるんですかね?

GNU拡張を含むなら沢山の関数があるので
それらを使って作ったものは当然シェルスクリプトで実装したことにはならないですよ
603デフォルトの名無しさん
2020/10/15(木) 23:12:13.35ID:BrsJS6s+
あとイチャモンの内容は、Pythonで作ったものはシェルスクリプトではないのはそのとおりだけど
同じ用にawkで実装したものもシェルスクリプトではないんだから
awkで実装ばかりしてるお前(リッチー大佐)は自分のことを棚に上げてるwwwって言ってるだけ
604デフォルトの名無しさん
2020/10/15(木) 23:22:09.05ID:9L6aMfZP
♪しぇまるー、ショッカー
605デフォルトの名無しさん
2020/10/16(金) 00:01:24.96ID:NkS9Y4UZ
>>599
C言語でsystem()関数を使って、Bashを呼び出したら、シェルスクリプトだな!
606デフォルトの名無しさん
2020/10/16(金) 00:18:33.05ID:V+ycHLUt
>>605
そりゃそうよw
そのシェルスクリプトでメインの処理を行ってるんでしょ?
607デフォルトの名無しさん
2020/10/16(金) 06:54:13.19ID:AxWc82uj
>>603
だーからそういう揚げ足取りがしょーもないって話してんのが分からんかね
awkがプログラミング言語であるのは否定しない
ただ発端の話者はPOSIX狂いで有名な上awk多用してるんだから、対象のツイート中で言うプログラミング言語がPOSIXを除くものについての言及と考えれば辻褄は合うし、そう考えるのも突飛な発想と言うほどおかしくはないでしょ
確かにその人は語り口が横柄な事があるし好かれる性格キャラ作りはしてないさ
でも個人憎しでしょーもない揚げ足取りしてんのは同等かそれ以上につまんねーことしてんなって感じだよ
608デフォルトの名無しさん
2020/10/16(金) 07:32:49.12ID:8MUyS0MS
>>607
だから結論としては、awkはシェルスクリプトじゃないんだから
お前(しょっかー)もawk使ってるくせにシェルスクリプトって言ってるじゃん
ってことでしょ

それ以外になにか言うべきことあんの?
ないでしょ
それで話は終わりだよね
609デフォルトの名無しさん
2020/10/16(金) 07:49:02.57ID:AxWc82uj
>>608
意図的に悪意を持って相手の意図を読もうとしてないんだと思ってたら本当にただ単に日本語読めないだけだったんだね…
なんか…ごめんね?
610デフォルトの名無しさん
2020/10/16(金) 07:50:20.39ID:hscjZ2ao
>>609
なんで相手の意図とか読んであげようとしてんのw
相手をかばう必要なんかないじゃん

awkはシェルスクリプトではない
事実だけを言えばいい
611デフォルトの名無しさん
2020/10/16(金) 08:10:20.93ID:AxWc82uj
>>610
意図を読む事を相手をかばうとか言ってる時点でコミュニケーションする気なし、端っから粗探ししてdisる気満々じゃん
そういうスタンスを俺は見てて気に食わないよ
それだけ
612デフォルトの名無しさん
2020/10/16(金) 08:21:19.35ID:hscjZ2ao
>>611
意図じゃなくてお前の願望だろw

awkは明らかにシェルスクリプトじゃないし
POSIX準拠のコマンドだけを使って作ったというのなら、そう言えばいいだけで
そう言わない理由はあるわけがないので、単にそのことを理解してないってだけ
それをお前はかばおうとしてるだけだろ
613デフォルトの名無しさん
2020/10/16(金) 08:47:26.97ID:AxWc82uj
>>612
>>607 に対しての時点でその返しが来てたら分からんでもないけど、そこでスルーしてんのに今更言ってんのが議論とか意見出しがしたいんじゃなくて粗探ししてますって自白してるようなもんでしょ

そう言わない理由があるわけないは言い過ぎだよ
人間誰しも無意識の前提を置いてしまうことはある
614デフォルトの名無しさん
2020/10/16(金) 09:11:10.47ID:095UBA8m
恥ずかしいよねw

自分がシェルスクリプトといいながら、awkで書いちゃってるのに
他に人にはPythonはシェルスクリプトじゃないと言っちゃってるわけだw
615デフォルトの名無しさん
2020/10/16(金) 10:47:36.16ID:94/KGSru
もう直接言いに行けよ、キモいレスするぐらいなら
616デフォルトの名無しさん
2020/10/16(金) 10:52:10.99ID:rggqlWcj
>>614
awkやsedはシェルスクリプトの一部とみなす慣例は大昔からだから。
617デフォルトの名無しさん
2020/10/16(金) 13:05:08.68ID:Sbv90d+P
シェルスクリプトに混ぜて書く場面が多ければほぼシェルスクリプトのようなものと思ったって何の問題もない
618デフォルトの名無しさん
2020/10/16(金) 13:14:33.80ID:s+qbwWMb
それはお前の願望ですよね?

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html
The awk utility shall execute programs written in the awk programming language,
awkユーティリティは、awkプログラミング言語で記述されたプログラムを実行します。
619デフォルトの名無しさん
2020/10/16(金) 14:28:05.49ID:rggqlWcj
>>618
そうだよ。UNIXでもそう説明される。ただし、実態は単独では使われない。
620デフォルトの名無しさん
2020/10/16(金) 15:42:36.85ID:gWa/7c+R
awkをシェルスクリプトと組み合わせて使っても
awk言語がシェルスクリプトに変わるわけがないって話ですよね?
いつから単独で使われるかどうかの話にすり替わったんですか?
621デフォルトの名無しさん
2020/10/16(金) 16:33:59.64ID:rggqlWcj
シェルスクリプトがシェルのスクリプトだとわかってない?
622デフォルトの名無しさん
2020/10/16(金) 16:36:29.14ID:j/dNEpw/
シェルのスクリプトから呼び出す
外部コマンド(awkやpython)が
シェルではないことぐらい知ってるよね
623デフォルトの名無しさん
2020/10/16(金) 16:39:41.36ID:rggqlWcj
スクリプトの意味がわかっていない墓穴掘り書き込みですね。
624デフォルトの名無しさん
2020/10/16(金) 16:40:16.10ID:HABswBQ5
シェルのスクリプトはシェルが実行している
シェルとはdashとかbashとかzshのこと
そのスクリプトをシェルが実行していないなら
それはシェルスクリプトではない
625デフォルトの名無しさん
2020/10/16(金) 16:41:33.85ID:JU6AgX+H
>>623
いやぁ、そこは「スクリプトの今は○○だ!」って
お前が宣言するところだよ

宣言しちゃったら、間違ってたときに恥ずかしいから言えないんでしょ?
相手のミスを待つんじゃなくてさ、自分の意見を言ってみなよ
626デフォルトの名無しさん
2020/10/16(金) 16:41:50.26ID:JU6AgX+H
いやぁ、そこは「スクリプトの意味は○○だ!」って
627デフォルトの名無しさん
2020/10/16(金) 16:43:40.44ID:JU6AgX+H
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

It was pointed out that with the rules contained in early drafts, the following 【script】 would print nothing:

BEGIN {
y[1.5] = 1
OFMT = "%e"
print y[1.5]
}

> the following 【script】 would print nothing:
628デフォルトの名無しさん
2020/10/16(金) 16:53:32.17ID:JU6AgX+H
>>623
そのレスは何の目的があってしたの?
俺が本当のスクリプトを教えてやるぞってことなら、早く言って欲しい
ただの負け犬の遠吠えなら、そのまま黙ってくれると助かるね
629デフォルトの名無しさん
2020/10/16(金) 16:57:30.29ID:RKtFr9bS
pythonのコードを描いてそれをログインシェルにしても良いんだぜ
630デフォルトの名無しさん
2020/10/16(金) 16:58:10.24ID:JU6AgX+H
シェルスクリプトの話しかしてません
ログインシュルの話なんかしてません
631デフォルトの名無しさん
2020/10/16(金) 17:01:13.72ID:RRnEM1bt
ほらね
馬鹿がバレただろ?
632デフォルトの名無しさん
2020/10/16(金) 17:02:24.56ID:JU6AgX+H
ほらね
馬鹿がバレただろ?

※理由を言わないテクニック(笑)
633デフォルトの名無しさん
2020/10/16(金) 17:32:16.72ID:Wq4ZK+I/
dashはダッシュ
bashならバッシュ
zshはなんと読む?
634デフォルトの名無しさん
2020/10/16(金) 17:35:04.80ID:rggqlWcj
オツシュ
635デフォルトの名無しさん
2020/10/16(金) 19:12:07.11ID:49KTAZqQ
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash bash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash dash
636デフォルトの名無しさん
2020/10/16(金) 20:45:17.03ID:QdYgfUXk
ゼットシェル
637デフォルトの名無しさん
2020/10/16(金) 21:51:16.80ID:YwASt5fw
zsh規制
638デフォルトの名無しさん
2020/10/17(土) 10:31:07.65ID:0qFIP5N2
ch
sch
tsch
639デフォルトの名無しさん
2020/10/17(土) 16:56:16.43ID:1zxs+zPu
foo() { echo $A; }
A=1
A=2 foo
echo $A

ってやった時、1行目に2が表示されると思ってる。
そして2行目には1が表示されると思ってたんだけど
dashだと2と表示される。これってバグ?
640デフォルトの名無しさん
2020/10/17(土) 16:59:33.10ID:sPQ7iLy+
普通の挙動じゃない?なにがおかしいと思ってる?
641デフォルトの名無しさん
2020/10/17(土) 17:00:23.70ID:1zxs+zPu
>>640
bashやzshでは1が表示される
dashでは2が表示される
ということです。
642デフォルトの名無しさん
2020/10/17(土) 17:16:48.26ID:oDONqj5W
bashやzshが仕様通りだと思うけど

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01
If the command name is not a special built-in utility or function, the variable assignments shall be exported for the execution environment of the command and shall not affect the current execution environment except as a side-effect of the expansions performed in step 4
643デフォルトの名無しさん
2020/10/17(土) 17:17:04.79ID:1zxs+zPu
そもそも変数に代入しつつコマンド実行って
POSIXで規程されてない?
644デフォルトの名無しさん
2020/10/17(土) 17:17:34.52ID:1zxs+zPu
>>642を読む前に書き込んだ。今から見てみる。
645デフォルトの名無しさん
2020/10/17(土) 17:22:47.37ID:1zxs+zPu
>>642
これは?

If the command name is a function that is not a standard utility implemented as a function, variable assignments shall affect the current execution environment during the execution of the function. It is unspecified:

Whether or not the variable assignments persist after the completion of the function

Whether or not the variables gain the export attribute during the execution of the function

Whether or not export attributes gained as a result of the variable assignments persist after the completion of the function (if variable assignments persist after the completion of the function)
646デフォルトの名無しさん
2020/10/17(土) 17:26:44.95ID:oDONqj5W
>>645
あー、関数だからそっちだね
647デフォルトの名無しさん
2020/10/17(土) 17:35:03.05ID:1zxs+zPu
なんでこんなに複雑なんだ・・・
648デフォルトの名無しさん
2020/10/18(日) 00:40:25.10ID:ngGOxfYz
>>584
>> もしくはピュアPOSIXの実装とか
>それがdash

とりあえずこれはダウトということ?
649デフォルトの名無しさん
2020/10/18(日) 01:14:29.68ID:u/6+iFla
なんで?
650デフォルトの名無しさん
2020/10/19(月) 05:17:03.52ID:8QFJcUQW
for music in `cat $OUT`; do
のようなループを書いている
1行ごとに仕事をさせたいのだが
1行の中には空白があり、1行の要素が分断されている
どうすれば分断を防げるだろう?
651デフォルトの名無しさん
2020/10/19(月) 09:45:54.95ID:4EZdKnY4
while read
652デフォルトの名無しさん
2020/10/19(月) 10:00:20.18ID:8QFJcUQW
thanks
653デフォルトの名無しさん
2020/10/25(日) 20:39:06.02ID:/pMQZumA
tputってさどこまでがPOSIX準拠なの?
色はPOSIX準拠じゃないでしょ?
654デフォルトの名無しさん
2020/10/26(月) 04:13:51.20ID:tssW3pbf
UNIX系で端末管理はどうやってるのか学べ
655デフォルトの名無しさん
2020/10/26(月) 16:46:36.36ID:4vMqqkwn
AWKがシェルスクリプトに含まれるかどうかは
(定義不十分だし)勝手に議論しとけと思うけど,

GNU・BSD拡張を使っていないAWKで何か実装した場合それは
「POSIXに準拠している」と言えるわな。

だから「シェルスクリプトで〜」と言わずに
「POSIXに準拠したやりかたで〜」と言っておけば,
くだらない揚げ足取られずに済んだ訳だ。
時すでにお寿司🍣
656デフォルトの名無しさん
2020/10/26(月) 23:22:51.04ID:2CuyKjNX
>>655
あの人は何でもシェルスクリプトでできるって思っちゃってる人だから無理でしょ
POSIXと言いながら、C言語メインとかにはならない

1. シェルスクリプトでやるのがいい (基本)
2. できない? POSIXならC言語とか使ってもOKなんだよ!

POSIXは、シェルスクリプトではなできない事の言い訳として利用してるだけ
だからawkで作ってるのにシェルスクリプトだと言いはる
657デフォルトの名無しさん
2020/10/27(火) 07:49:33.18ID:rn8NuyuD
C言語使ってって小さなフィルタープログラムをだろ
既存でないフィルターは自分で作るというある意味シェルスクリプトの本道でもあるだろう
658デフォルトの名無しさん
2020/10/27(火) 08:25:50.66ID:u8IX9f6Z
>>657
シェルスクリプトってまさにこの
「C言語で書いた早くて小さいプログラム」
を組み合わせる為の言語だと思ってる。

もちろんシェルスクリプトの制御機構は計算完備なので
シェルとしての機能だけでプログラムを書くこともできるけど,
Unix哲学≠ノ従うならそれはちょっと違うんじゃないかと思う。

シェルスクリプトで完結する人ってUnix哲学をやたら推すし,
Unix哲学自体は今でもある程度参考になるとは思うけど,
ほんとうにUnixらしいやりかたは
「主処理はC言語で書いて組み合わせはシェル」っていうことだと思う。
659デフォルトの名無しさん
2020/10/27(火) 09:36:02.25ID:NxyNpTjA
自分の中でのシェルスクリプトって
新たにプログラムを位置から作るんじゃなくて
既存のコマンドを使って繋ぎ合わせて
間に合わせのプログラムを作るものだと思ってる

自分はプログラミングできるから普通にプログラム書けるけど
コンパイルとかの煩雑な手順を考えると
シェルスクリプトをぱっと書いてすぐ使えるってのはすごい手軽
パイプ処理が肝かなと思ってる
660デフォルトの名無しさん
2020/10/27(火) 10:23:30.49ID:nSGvpwuJ
>>658
シェルスクリプトをシェルスクリプトで完結する必要はない。
例えば、C言語で作った何かや「awkで作ったなにか」を呼び出すのもあり
それは当然の話だし、否定していない

言いたいことは、それは「awkで作ったなにか」であって
シェルスクリプトではないということだけ

みとめよう。それはawkプログラミングだ
661デフォルトの名無しさん
2020/10/27(火) 10:29:52.20ID:nSGvpwuJ
シェルスクリプトで外部コマンドを呼び出すのはありだし
全ての環境で動かすならPOSIX準拠にしろと思うが
POSIX準拠にこだわる必要もない

例えば、dockerやgitはPOSIX準拠ではないコマンドだ
POSIX至上主義かなにかしらんが、シェルスクリプトから
使っていいのはPOSIX準拠コマンドだけだというのなら
dockerやgitすら使えないということになる

んなばかな(笑)

環境が限定される(つまりdockerやgitが入っていること)という前提で
シェルスクリプトでPOSIX準拠ではないコマンドは普通に使う
つまり何が言いたいかと言うと、シェルスクリプトで読みやすさのために長いオプションを使えという話だ
長いオプションはPOSIX準拠ではないからショートオプションを使え?アホか
どちらにしろPOSIX準拠でないコマンドを使うのだ
662デフォルトの名無しさん
2020/10/27(火) 11:22:58.65ID:B6tDM1Ic
>>658
あえてわざわざプログラムをCなりでつくるというのは、Unixらしいとは思わんな。
>>659のいう、既存プログラムを組み合わせることのほうがUnixらしい。

速度や特殊な処理のためにプログラムの開発が必要であればできるしするのは、Unixよりは(Windowsでもするしな)、いかにもハッカーらしいという感じ?
663デフォルトの名無しさん
2020/10/27(火) 11:36:52.21ID:nSGvpwuJ
"既存プログラム"を組み合わせるのはUnixらしいが
新しいコマンドを作って組み合わせて使うユニケージはUnixらしくない

しかもそのコマンドが完全に特殊用途向けのコマンドであり
Unixでいうシェルスクリプトにはまったくもって応用できない

今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
【PR】2020.09.25
https://type.jp/et/feature/14070/

はは、クソ開発手法だ。ギークのだーれも熱狂してねーよ
せめてマニアとかオタクとかいえ、ギークと言ったら海外用語だ
海外に進出してないユニケージが熱狂とか嘘作んじゃねーよ
664デフォルトの名無しさん
2020/10/27(火) 12:20:04.79ID:IzIv2i9p
Power-Shell は unix らしさの極みか?
漏れはそうは思わんが
665デフォルトの名無しさん
2020/10/27(火) 12:30:26.45ID:eXfPuMud
Power-Shell は反Unixだろ
そもそもWindowsにはまともなコマンドがないから
コマンドの連携ということがしづらい
あっても、正常終了時に「処理が完了しました」とかでて連携ができない
あれはコマンドを連携させずに、ただ並べるだけ

そういう世界だからシェルだけ改良しても意味がない
Unixでいうコマンド相当のものが必要
それが.NET framework。しかし.NET frameworkはAPI
APIだから普段CLIから実行するものではないし
コマンドとして使うのは面倒

Power-Shellはシェルスクリプトとしての特徴と
メリットである簡潔さが失われた「普通の言語」に相当する
666デフォルトの名無しさん
2020/10/27(火) 18:52:31.21ID:B6tDM1Ic
>>665
PowerShellを使ったことがないだろ?w
ヘンにハイフンを入れたりしてるしな。

コマンドによってはちゃんとオブジェクトを返すし、パイプで処理することもできる。
.NETを直接実行することもできるし、テキストベースでしかないUnixシェルよりも使いやすいこともある。
「反Unix」というよりは、それを越えたところもあるWindowsらしいシェルと言える。

ただ、いつまでどのようにサポートされるのか、最近はちょっと不安。。。
poshとのかねあいとか。
667デフォルトの名無しさん
2020/10/27(火) 18:54:44.28ID:a7WAgl/q
フィルターは、Ruby で作る

Linux のPowerShell は、Azure しか使われていないだろ?
668デフォルトの名無しさん
2020/10/27(火) 20:43:43.48ID:gFMGawtc
>>666
> ヘンにハイフンを入れたりしてるしな。
俺に言うな。俺はコピペしただけだ
669デフォルトの名無しさん
2020/10/27(火) 22:01:39.01ID:7WqSRFWS
スペースがあると誤解しているのと、スペースをハイフンに置き換える習慣があるジジイの命名
670デフォルトの名無しさん
2020/10/27(火) 22:32:46.87ID:B6tDM1Ic
>>668
で、使ったことはないんやろ?w
であればわざわざPowerShellについて述べずともよい。
671デフォルトの名無しさん
2020/10/28(水) 02:15:01.01ID:TQndZTJN
>>670
PowerShellで作ったプログラムをオプソで公開してるがなにか?
672デフォルトの名無しさん
2020/10/28(水) 06:49:20.54ID:Df2NTJPb
オプソってなに?
673デフォルトの名無しさん
2020/10/28(水) 08:15:00.68ID:zcWN9+mU
Open source
674デフォルトの名無しさん
2020/10/28(水) 13:27:15.30ID:l3R5yM/w
>>671
であれば、>>665みたいな理解にはならんがなあ。w
ま、オプソにもいろいろあるからな。
675デフォルトの名無しさん
2020/10/28(水) 17:48:34.37ID:QWPlcBUD
これだけマルチコアになった今日び、コマンドの方も対応して欲しい気がする。

ファイル圧縮のコマンドとか、マルチスレッドで処理したら速くできるはず。

あるいはどこまでもマルチプロセス主義でいくというなら... 例えば並列パイプ? というか
今のパイプだとデータフローが一本道だがこれを並列に分散して走らせて最後データを
一本にまとめるような処理の仕組みがあってもいいのではないかと。

ちなみに一本道は「いっぽんみち」で「いっぽんどう」ではないからな、って聞いてないか
676デフォルトの名無しさん
2020/10/28(水) 19:10:42.29ID:Aw3ALjki
例えるならxargs
677デフォルトの名無しさん
2020/10/28(水) 19:52:02.68ID:vhMFXsQD
パイプで繋げば自動でマルチになるではないか
678デフォルトの名無しさん
2020/10/28(水) 20:17:48.21ID:FddMFcrq
あまりわかってなさそだな>>675
並列パイプとかも簡単に言ってそう
679デフォルトの名無しさん
2020/10/28(水) 20:18:18.79ID:NAroBJuS
最期に一本にまとめるというのならGNU parallelやろ?
バックグラウンドプロセスを使って自分でまとめてもいいが
680デフォルトの名無しさん
2020/10/28(水) 20:22:18.78ID:zcWN9+mU
パイプって元々非同期処理(これはPOSIXで規定)だから,
実装によっては普通にマルチスレッドで処理してんじゃないの?
681デフォルトの名無しさん
2020/10/28(水) 20:22:22.24ID:58wSuA1P
そもそもUnixにはforkというコマンドがあってだな
682デフォルトの名無しさん
2020/10/28(水) 20:23:15.77ID:XBU5yUok
ターミナルを2枚開いてマルチプロセス!
683デフォルトの名無しさん
2020/10/28(水) 20:32:27.18ID:NAroBJuS
多くの言語が並列処理を行うように明示的に書かなければ並列処理されないのに比べて
シェルスクリプトは普通に書いてもかってに並列処理が行われる言語の1つ
684デフォルトの名無しさん
2020/10/28(水) 21:19:48.83ID:zcWN9+mU
>>683
そうそう。
だから >>675 の主張がよくわからんのよね。
もしかしてパイプが非同期処理ってことを
知らなかったのかもしれない。
685デフォルトの名無しさん
2020/10/28(水) 21:48:39.39ID:K6dD4VVC
>>683,684
お前らもプロセスとスレッドの違いがわかってないようだがな
686デフォルトの名無しさん
2020/10/28(水) 22:22:18.44ID:1fF6N90I
>>685
わかってるが、何を根拠にいちゃもんつけたの?w
687デフォルトの名無しさん
2020/10/28(水) 22:37:57.46ID:K6dD4VVC
お前はどっちなの?
まだ ID:NAroBJuS ならそうわかってはないようでもあるが、ID:zcWN9+mU は明らかにわかってないなw
688デフォルトの名無しさん
2020/10/28(水) 22:42:56.15ID:1fF6N90I
質問を質問で返すな
まずお前が根拠をいえ
言わないで質問する理由なんかないだろ
689デフォルトの名無しさん
2020/10/28(水) 22:43:30.54ID:l3R5yM/w
まあ、>>680の「マルチスレッド」はおかしいな。
言うなら「マルチタスク」とかやろ。
690デフォルトの名無しさん
2020/10/28(水) 22:45:28.30ID:K6dD4VVC
どっちなのかも言えないのか。後者だろなな
691デフォルトの名無しさん
2020/10/28(水) 22:47:04.72ID:1fF6N90I
前者だが?はい、言いましたーw
次はお前の番だが、ここまでやっておいて
お前は答えられないってことはないよな
692デフォルトの名無しさん
2020/10/28(水) 22:54:11.38ID:K6dD4VVC
そりゃすまんかったな。>>687と書いてるのに、なおおきに召さずに>>688なんて返すとは思わなかったわ

他の言語はあくまでも一つのプロセス内で行うことを記述するのが目的。プロセス内でのルーチンを呼ぶとか
シェルスクリプトは、最初からプロセスを起動する記述するのが目的。(マルチタスクだから複数同時起動して、パイプで繋げて「同期」って簡単に実現できるだけ)

明らかに全然違うし、「多くの言語が並列処理を行うように明示的に書かなければ並列処理されない」なんてわざわざ書くのはあんまわかってなさそうだなってとこ
693デフォルトの名無しさん
2020/10/28(水) 22:56:23.42ID:1fF6N90I
>>692
誰が同じことを繰り返し言えって言った?

> 「多くの言語が並列処理を行うように明示的に書かなければ並列処理されない」なんてわざわざ書くのはあんまわかってなさそうだなってとこ
の理由を書けといったんだが?
694デフォルトの名無しさん
2020/10/28(水) 22:57:50.86ID:K6dD4VVC
書いたぞ。読まないのは知らないぞ
695デフォルトの名無しさん
2020/10/28(水) 22:59:25.60ID:1fF6N90I
書いたというのなら、引用できるはずだなw
新しい言葉を追加せずに、理由を引用してみろ
696デフォルトの名無しさん
2020/10/28(水) 23:01:45.79ID:K6dD4VVC
読む気なさそうだからなあw
すでに書いた後は知らない
697デフォルトの名無しさん
2020/10/28(水) 23:03:01.34ID:X2c0ql0Z
な?引用できなかった。
698デフォルトの名無しさん
2020/10/29(木) 08:36:16.60ID:D7f8M1As
「こいつ分かってない」って言葉ってほんとうに便利よね。
それだけで
・自分が分かっている人間≠セと暗示できる
(でもあくまで暗示だから言質を取られる恐れもないw)
・相手より上の立場に立つ(という錯覚が)できる
わけだからさ。
699デフォルトの名無しさん
2020/10/29(木) 08:43:02.83ID:D7f8M1As
ていうかシェルスクリプトで簡単にできるのは「マルチタスク」であって,
マルチタスクというのは非同期的な処理だから「非同期処理が簡単にできる」
という言説は正しいと言えるのかも知れないが(それでも違和感がある),
普通「マルチスレッド」といったときの同一プロセス内での複数スレッド処理に関しては
そもそもCPUの機能を全部抽象化されてるようなシェルスクリプトでは
外部コマンドを使ったりしないと実現できんのでは。

もしかしたら俺が知らんだけで
POSIXかどっかで「この動作はマルチ*スレッド*で処理されますよ」
というのが規定されている可能性もあるが,
ちょっと考えにくい。
700デフォルトの名無しさん
2020/10/29(木) 10:29:24.34ID:YCEy/zhh
シェルの内部コマンドでマルチスレッド化したほうが効率的なら勝手にやりゃいいんじゃねーの?
具体的にどのコマンドを対応させたいの?
もう誰か作ってんじゃないの?
701デフォルトの名無しさん
2020/10/29(木) 10:45:18.65ID:XkZMBg2d
>同一プロセス内での複数スレッド処理に関しては
>そもそもCPUの機能を全部抽象化されてるようなシェルスクリプトでは
>外部コマンドを使ったりしないと実現できんのでは
何を言いたいのかイミフ
複数のスレッドで作業を分割して同時並行で実行するが、終了は順番に受け取るとかめんどくさいだとかで普通にできるだろう。単にやる必要もないってとこだな

>POSIXかどっかで「この動作はマルチ*スレッド*で処理されますよ」
>というのが規定されている可能性もあるが,
>ちょっと考えにくい。
なんか純粋なUnix系のOSを理解してないっぽい。純粋部分はマルチスレッドはOSで「勝手に」はやらんだろう。CUIレベルだと必要なさげだからな。GUIなOSでは勝手にはあるけど
702デフォルトの名無しさん
2020/10/29(木) 10:55:31.90ID:yfEeCvlS
シェルスクリプトはHaskellと同じで自動的にマルチスレッド化するプログラミング
言語ですよ!
素晴らしいですよ!

ってこと?
703デフォルトの名無しさん
2020/10/29(木) 10:57:33.10ID:XkZMBg2d
>>700
イミフな部分は シェルの内部コマンド をマルチスレッドでという話か
内部コマンドっても単にコマンドを内包してるだけで、外部コマンドと変わらない(いや、変わらないと困る)もんだろと思ってるから、そういう読みはできなかった。なるほどね

ksh,zsh でも確かマルチスレッドではなかったような
i=0
command | while read j; do
i=$((i+j))
done
って、i がちゃんと変わるようにしてるのに(確かネストしても大丈夫だったような)。実現方法はなんだっけ
704デフォルトの名無しさん
2020/10/29(木) 10:59:39.85ID:XkZMBg2d
>>702
しないよw
多分全く
705デフォルトの名無しさん
2020/10/29(木) 11:25:48.02ID:yfEeCvlS
でも、自動的にマルチスレッド化してC言語の64倍高速化する可能性も、ワンチャンあるって事ですよね?

試してみるバリューあるのでは?
706デフォルトの名無しさん
2020/10/29(木) 11:31:36.93ID:XkZMBg2d
ないよw
C言語でもOpenMP使えば割と見た目簡単にできそうだが、OpenMPもそれほど流行ってない
プロセス=特に何か意識する必要もない
スレッド=常時何かを意識する必要がある
そう簡単な話ではない
Haskellとかはマルチスレッドでなきゃそもそも実現できない言語なのだからそれと比べても意味はないな。Haskell出したのはそう意味あるわけではないだろけど
707デフォルトの名無しさん
2020/10/29(木) 11:38:39.55ID:XkZMBg2d
>そもそも実現できない言語なのだから
というわけでもないのね
出し受けがどでかいばかりじゃないからそりゃそうか
708デフォルトの名無しさん
2020/10/29(木) 11:49:45.20ID:yfEeCvlS
シェルスクリプトがマルチ高速化のアビリティを持つのは否定しようがないファクトですよね?
709デフォルトの名無しさん
2020/10/29(木) 11:59:44.96ID:XkZMBg2d
小池とかのギャグに走ってるだけだろ
710デフォルトの名無しさん
2020/10/29(木) 15:03:10.28ID:8VEYobTG
>>708
マルチ高速化?
アビリティ?
ファクト?

個々の言葉はそれほどでもないが、にもかかわらず、全体から漂うバカっぽさ。w
711デフォルトの名無しさん
2020/10/29(木) 15:45:57.37ID:i0HZBLVS
自己紹介がお上手
712デフォルトの名無しさん
2020/10/29(木) 22:21:37.37ID:87BKVwTm
並行・並列とプロセス・OSスレッド・軽量スレッドと同期・非同期の切り分けがごっちゃになってそう知らんけど
713デフォルトの名無しさん
2020/10/29(木) 22:49:07.55ID:yfEeCvlS
バリューないですか?
714デフォルトの名無しさん
2020/10/29(木) 22:51:15.28ID:Ju4cpcAY
並行と並列はいまだにうまく使い分けられていない印象
正確な定義はどこかにあるんだろうが、人によって使われ方が違う
715デフォルトの名無しさん
2020/10/29(木) 22:55:56.32ID:yfEeCvlS
コンカレントとパラレルの違いはアジア人にはわかり辛いですからね。

キリスト教的考え方が普及していないからですね。
716デフォルトの名無しさん
2020/10/29(木) 23:59:18.90ID:N/u/fZ2Q
並行と並列は使ってるCPUで決まる。
プログラムの書き方に違いはない。
717デフォルトの名無しさん
2020/10/30(金) 17:02:49.47ID:ig1/qwB5
$@みたいな擬配列変数に格納されている値 一つ一つに対して
何か処理を行なう時に,別の変数を用意しない(使わない)方法って原理的に可能かな。

普通は
for args in $@; do
なにか処理
done
というスクリプトを組むと思うんだけど,
argsみたいな変数を使わずに済む方法があれば知りたい。
(シェルスクリプトは基本的には変数の無駄遣いを避けなきゃいけないので。
まあそれが「欠陥」かどうかは別として)
718デフォルトの名無しさん
2020/10/30(金) 17:39:03.81ID:mooUMZ8S
なう
719デフォルトの名無しさん
2020/10/30(金) 18:20:41.07ID:vW0P/VrR
PowerShellってKshとかPerlとかUnixのシェルやスクリプト言語を研究してベースにして作ったって、昔QuoraかどこかでMSの社員が答えてた
begin/endブロックとか、昔からUnix使ってればそのまま活かせる知識かなりある
720デフォルトの名無しさん
2020/10/30(金) 18:25:55.93ID:sXVsY8+M
>>717
$@を書き換えるのでないなら

while [ $# -gt 0 ]; do
 なにか処理 "$1"
 shift
done
721デフォルトの名無しさん
2020/10/30(金) 18:26:25.00ID:sXVsY8+M
他にも再起でできる
722717
2020/10/30(金) 18:27:46.70ID:ig1/qwB5
>>720
shiftを使うのか,頭になかったw
ありがとう!
723デフォルトの名無しさん
2020/10/30(金) 18:30:51.05ID:sXVsY8+M
> (シェルスクリプトは基本的には変数の無駄遣いを避けなきゃいけないので。
これはなんで? 変数名がぶつかるとかいう話?
724デフォルトの名無しさん
2020/10/30(金) 18:33:22.92ID:sXVsY8+M
ちなみにそれダブルクォートがあったほうがいい

for args in "$@"; do
なにか処理
done

もしくは逆に省略

for args; do
なにか処理
done
725デフォルトの名無しさん
2020/10/30(金) 18:39:10.50ID:sXVsY8+M
ちなみにそれダブルクォートがあったほうがいい
for args in "$@"; do

もしくは逆に省略
for args; do
726デフォルトの名無しさん
2020/10/30(金) 18:39:31.11ID:sXVsY8+M
書き込みエラった
727717
2020/10/30(金) 19:07:22.75ID:ig1/qwB5
>>723
そういうことです。
Bashとかの独自機能に頼れば
局所変数を使えるみたいだけど
それを踏まえても,
例えばC言語よりは「変数の使い過ぎ」には
注意しなくちゃならない(よね?)

>>725
for文ってin省略したら$@を暗示するのマジか!
知らんかったけどちゃんとPOSIXでも規定されてたわ。

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_03
728デフォルトの名無しさん
2020/10/30(金) 19:15:49.74ID:sXVsY8+M
> for文ってin省略したら$@を暗示するのマジか!

他にはgetoptsもそうだな。こっちは逆によく省略されるから
逆に指定できたのか!になると思うが

今は解決してるかもしれないが、$@が0個の時、
set -u状態で"$@"を参照するとエラーになるシェルがあったから
for args in "$@" じゃなくて省略してfor argsと書くようになった
729デフォルトの名無しさん
2020/10/30(金) 19:32:14.84ID:yPjXBzu5
>>719
実際、PerlとBashに慣れてると、かなり書きやすいからな。
730デフォルトの名無しさん
2020/11/01(日) 17:25:31.39ID:xiHRYmfR
昔Perlやってて関数の$1とかいちいち変数に入れるのダサいよなぁと思っていたけど
シェルスクリプトをPOSIX縛りしてたらローカル変数なくて、そのまま$1とかでいいやって思ってたら
どうせ関数は小さく書くのは当たり前だから別に$1とかで問題ないと思うようになったな
外部からどういう引数で渡ってくるのか分かりづらいものはコメント書いてるけど
731デフォルトの名無しさん
2020/11/01(日) 18:51:46.05ID:CuITjVo7
つきつめるとアセンブリで問題ないになる
732デフォルトの名無しさん
2020/11/01(日) 19:28:12.68ID:xiHRYmfR
そうはならないよ。アセンブリは短く書こうとしてもどうしても長くなるから
「どうせ関数は小さく書くのは当たり前」が実現できない
733デフォルトの名無しさん
2020/11/01(日) 21:18:05.45ID:HWQKX8bn
名前の話なら、昔は名前が長いだけで容量が取られるから短くしていただけで、いまとなっては短いメリットはあまりない。
734デフォルトの名無しさん
2020/11/02(月) 10:41:13.59ID:n2BNqgKx
たいてい編集するときに補完してくれるしね。
735デフォルトの名無しさん
2020/11/02(月) 11:22:36.19ID:n2BNqgKx
poshを「POSIXシェルスクリプトがちゃんと動くか」というのを
確かめるのに使ってる人いる?

シェルスクリプトの妥当性をshellcheckみたいに静的じゃなく動的に検証したい。
736デフォルトの名無しさん
2020/11/02(月) 12:43:28.28ID:WhiKrslV
>>731-732
perl とか ruby で関数の戻り値が(敢えて描かれていないとき)
最後に評価されたレジスタ(アキュムレータ)の値が戻り値になる
ってのはアセンブラの尾骶骨だと思う
737デフォルトの名無しさん
2020/11/02(月) 13:09:30.56ID:FhHZncje
>>735
poshはバグが大量にある古いpdkshのフォークで
ろくにメンテナンスされてないので今も大量にバグが有る

https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=posh
738デフォルトの名無しさん
2020/11/02(月) 13:11:03.65ID:FhHZncje
POSIX準拠してるかを調べたいならdashを使ったほうが何倍もマシ
739デフォルトの名無しさん
2020/11/02(月) 13:26:39.74ID:n2BNqgKx
>>738
dashね。thx
740デフォルトの名無しさん
2020/11/02(月) 13:28:36.85ID:ew0mgVfp
>>736
ないない。
最後の式の評価結果を返しとくのがだいたい自然で合理的なだけ。
741デフォルトの名無しさん
2020/11/02(月) 13:28:58.41ID:lTcfprDV
dash dash dash
742デフォルトの名無しさん
2020/11/02(月) 16:38:46.09ID:FhHZncje
シェルスクリプトも最後のコマンドの評価結果をそのまま返す
743デフォルトの名無しさん
2020/11/02(月) 16:39:37.65ID:FhHZncje
>>739
dashはDebian・Ubuntu系の/bin/shだよ
クラウドで一番よく使われてるディストリ
744デフォルトの名無しさん
2020/11/02(月) 16:42:40.40ID:UfGVYnOo
いまどきのシェルスクリプトはほとんど/bin/bashでしょ
745デフォルトの名無しさん
2020/11/02(月) 16:56:54.34ID:pNDhR5km
シバンに使われるのは/bin/shだろ?
そしてそれがDebian・Ubuntuだとdashになる
なぜ今どきはbashだと思ったのか?
746デフォルトの名無しさん
2020/11/02(月) 17:08:07.37ID:UfGVYnOo
初めはそうだったんだけどな
ディストリによっては/bin/shが/bin/bashなのでそれと気づかずbash拡張を使う奴が出てきて、debianやbsd等の/bin/shが/bin/bashじゃない環境じゃ動かなくなってきて
「bash拡張使ったスクリプトはshebangもちゃんと/bin/bashにしよう」ってなってきた
747デフォルトの名無しさん
2020/11/02(月) 17:14:14.89ID:pNDhR5km
その結果bashが入ってないAlpine Linuxで動かないという問題が発生するわけで
さっさとPOSIX準拠に変更したほうがいい。bash依存は甘え。

っていうか俺勉強したくないんだーと言って必要もないのに/bin/bashにして
動かなくて後悔してるやつが増えてきてる。自業自得だが。
748デフォルトの名無しさん
2020/11/02(月) 17:15:01.41ID:pNDhR5km
シェルスクリプトはPOSIX準拠にしておけ
bash特有の機能を使いたくなったら別の言語を使うべきだ
749デフォルトの名無しさん
2020/11/02(月) 17:17:28.98ID:ZpVsHyOp
macのデフォルトシェルはzsh
750デフォルトの名無しさん
2020/11/02(月) 17:21:10.82ID:pNDhR5km
macの/bin/shはbash
751デフォルトの名無しさん
2020/11/02(月) 17:23:00.46ID:ZpVsHyOp
macの/bin/shはzsh
752デフォルトの名無しさん
2020/11/02(月) 17:23:45.79ID:pNDhR5km
>>751
すぐバレる嘘を付くな
753デフォルトの名無しさん
2020/11/02(月) 17:24:32.82ID:pNDhR5km
そもそも>>2に書いてある

・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
  Debian系 … dash   CentOS系 … bash   Alpine … ash(busybox)  Android … mksh
  FreeBSD … ash   Solaris,OpenBSD … ksh
  macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・ログインシェルは/bin/shでない場合があります。例 macOS … zsh
754デフォルトの名無しさん
2020/11/02(月) 17:30:22.78ID:Xv3pPvZM
tcsh : 思い出してください
755デフォルトの名無しさん
2020/11/02(月) 17:49:15.11ID:ew0mgVfp
>>748
大きなお世話だな。w
BashがいいところはBashがいい。

どのUnixでも動かないといけないようなスクリプトは、シェル以外にも心配事は多いし、いちいち気にせずとも。
756デフォルトの名無しさん
2020/11/02(月) 18:35:32.48ID:pNDhR5km
なんでbash使うんですか?bashじゃないとダメなことでもやってるんですか?
757デフォルトの名無しさん
2020/11/02(月) 18:52:50.96ID:j60yzXh/
自分のためのスクリプトなので書きやすいように書くだけ
758デフォルトの名無しさん
2020/11/02(月) 18:54:08.71ID:pNDhR5km
だからbashのどういうところが書きやすいの?
759デフォルトの名無しさん
2020/11/02(月) 18:56:50.41ID:wsJGkNeE
>>741
wish and dash
760デフォルトの名無しさん
2020/11/02(月) 19:19:37.82ID:6dMpVrf4
< <( )
761デフォルトの名無しさん
2020/11/02(月) 19:30:22.69ID:pNDhR5km
cmd |
762デフォルトの名無しさん
2020/11/02(月) 19:35:41.93ID:aDX4tDqS
代替になり得てないだろう
いつものPOSIXなやつか
763デフォルトの名無しさん
2020/11/02(月) 19:40:13.91ID:pNDhR5km
それがなりえてるんだなぁ
764デフォルトの名無しさん
2020/11/02(月) 19:42:01.99ID:aDX4tDqS
お前にとってはな
全てお前にとってはだろうw
765デフォルトの名無しさん
2020/11/02(月) 19:43:07.75ID:ew0mgVfp
>>756
Bashがふつうに使えるし、適度に高機能だから。
わざわざあえて別のシェルで動作確認するのは面倒であり無駄。
766デフォルトの名無しさん
2020/11/02(月) 19:44:07.24ID:pNDhR5km
>>765
なんて言ってると、シェルがdashで
動かないーとか言ってるやつが多すぎるんだがw
bashを使うにしろ、必要最小限にしてればいいだろ
POSIX準拠の命令も、bashの命令なんだから
767デフォルトの名無しさん
2020/11/02(月) 19:45:33.32ID:pNDhR5km
だいたいbashスクリプトじゃなきゃダメなんだみたいに
言ってるやつのスクリプトはfunctionをなくして
[[ ]] を [ ] に置き換えるだけで8割はそのままPOSIX準拠にできるんだがw
768デフォルトの名無しさん
2020/11/02(月) 19:47:44.55ID:aDX4tDqS
>>765
そもそも前提が違う
シバンに /bin/sh と書いてるならPOSIXで書くべきってだけだな
特定のシェルが好みでその機能を使って、シバンもそれにしてるなら好き好きにでしかないわな

なぜか、
>シバンに使われるのは/bin/shだろ?
とだけになり、シェルの派生は使うなそれなら他の言語をとか言い出すいつもの。自分がPOSIXに拘ってるのだけだろうがただうざいだけw
769デフォルトの名無しさん
2020/11/02(月) 19:48:29.55ID:pNDhR5km
/bin/shはどこでも入ってるが、
/bin/bashはAlpine Linuxなど入ってない環境がある
770デフォルトの名無しさん
2020/11/02(月) 19:51:03.74ID:aDX4tDqS
好き好きなんだから環境も好きにすんだよ、融通の利かない臨機応変出ないお前にはわからんだろうけど
問題があったら動かないし、シバンを変えるだけでもあるしな
771デフォルトの名無しさん
2020/11/02(月) 19:51:53.50ID:pNDhR5km
POSIX準拠で書いていれば
シバンを変えるだけで動くんだよね
772デフォルトの名無しさん
2020/11/02(月) 19:52:55.74ID:aDX4tDqS
いつもの話が通じないモードか
773デフォルトの名無しさん
2020/11/02(月) 19:53:36.45ID:pNDhR5km
反論しろや
POSIX準拠で書いていれば
シバンを変えるだけで動くのは事実だろうが
774デフォルトの名無しさん
2020/11/02(月) 19:57:02.06ID:aDX4tDqS
イミフだからだぞ
>シバンを変えるだけ
ってなんのこっちゃ
775デフォルトの名無しさん
2020/11/02(月) 19:59:27.33ID:pNDhR5km
なんだこいつwww

770 名前:デフォルトの名無しさん[sage] 投稿日:2020/11/02(月) 19:51:03.74 ID:aDX4tDqS [4/6]
好き好きなんだから環境も好きにすんだよ、融通の利かない臨機応変出ないお前にはわからんだろうけど
問題があったら動かないし、シバンを変えるだけでもあるしな



774 名前:デフォルトの名無しさん[sage] 投稿日:2020/11/02(月) 19:57:02.06 ID:aDX4tDqS [6/6]
イミフだからだぞ
>シバンを変えるだけ
ってなんのこっちゃ
776デフォルトの名無しさん
2020/11/02(月) 20:03:40.47ID:aDX4tDqS
bashが無ければインストールする、パスが違っていればシバンを適切に書き換えるだけ
後者なんて、それこそシェルスクリプト(というほどでもない)でのお仕事で簡単なこと
好きで使ってるならそんなの気にしないぐらいの

>>775
なに言ってるの?w なおさらナンノコッチャ
まだ「シバンを変えなくても」だったらわかるが、ますますわからんw
まさか「シバンで /bin/bash とか書いていてもPOSIX準拠してたらどう変えても動く」とか言いたいわけ?まさかなあwww
777デフォルトの名無しさん
2020/11/02(月) 20:06:59.14ID:pNDhR5km
シバンを変えるだけといいながら、
bashをインストールしなければいけないと前言撤回w
誰もがbashをインストールできるわけではない
778デフォルトの名無しさん
2020/11/02(月) 20:09:07.31ID:aDX4tDqS
いつものパターン
自分の何かがマズいと別の口実へとw
779デフォルトの名無しさん
2020/11/02(月) 20:31:01.29ID:UfGVYnOo
シェルスクリプト使ってると精神が破壊されでもするのか
780デフォルトの名無しさん
2020/11/02(月) 20:32:40.76ID:aDX4tDqS
ん?俺もお前も??w
781デフォルトの名無しさん
2020/11/02(月) 21:59:15.95ID:Qlwbnxz+
echoの挙動すら統一できてないのに何がPOSIXだよ
782デフォルトの名無しさん
2020/11/02(月) 22:39:16.63ID:ew0mgVfp
>>767
8割じゃねえか。w

個人的には、ほかに-o pipefailとかlocal -rとかも使うから、ほかのシェルは想定外。
いちいちほかを心配するのは無駄。2回目。
783デフォルトの名無しさん
2020/11/02(月) 22:40:32.90ID:ew0mgVfp
>>779
POSIX原理主義者がやろ。
784デフォルトの名無しさん
2020/11/03(火) 00:54:03.57ID:JyRXzZ9S
>>782
> -o pipefailとかlocal -rとかも使うから、
それを言ったのは1回目ですねw
785デフォルトの名無しさん
2020/11/03(火) 01:06:01.23ID:eTFEu/to
>>784
そこは主文やないから。w
786デフォルトの名無しさん
2020/11/03(火) 01:21:28.30ID:JyRXzZ9S
> 756 自分:デフォルトの名無しさん[sage] 投稿日:2020/11/02(月) 18:35:32.48 ID:pNDhR5km [7/17]
> なんでbash使うんですか?bashじゃないとダメなことでもやってるんですか?

注文ですね
787デフォルトの名無しさん
2020/11/03(火) 05:06:25.45ID:ZHMzrFjb
>>755
ホントこいつは読めねえなw
788デフォルトの名無しさん
2020/11/03(火) 05:07:52.60ID:ZHMzrFjb
>>787
× >>755
>>785
しつれ
789デフォルトの名無しさん
2020/11/03(火) 10:58:07.03ID:mwHgWWA5
コマンドラインから実行したら自動的に色が有効になるのって
あれどういう仕組で実現してるんですか?
790デフォルトの名無しさん
2020/11/03(火) 12:44:55.98ID:eTFEu/to
isatty()が真なら、エスケープシーケンスで色設定する。
791デフォルトの名無しさん
2020/11/03(火) 18:29:40.60ID:j7Eu4w5F
C言語の類推で考えれば,POSIXに従うというのも分かる話だと思うんだがなぁ。
「原理主義」とかはちょっとやりすぎ(Webサービスとかはさすがに……)と思うけど,
例えばMicrosoft製のclとかでしか動かないプログラムは別に悪い訳ではないけど,
C99やC11に従ってGCCでもpccでも動くようなプログラムの方がいいよね,
というそれだけの話。
792デフォルトの名無しさん
2020/11/03(火) 20:56:04.24ID:Vb+pPlne
エスケープシーケンスって仕組みダサいよな
パイプ通したときはどうとか面倒だし混乱するだけ
793デフォルトの名無しさん
2020/11/03(火) 21:06:50.17ID:xZyzqOA2
そこで新たにエスケープの代わりにHTMLを流すことを提案しますとか
unicodeを拡張してすべての文字に色を付けられるようにします
とか言うの?
794デフォルトの名無しさん
2020/11/03(火) 21:15:36.20ID:eTFEu/to
>>791
かなり異なるものに「類推」とか言ってもダメ。
それに、C/C++だって、環境やターゲットが違えば、#if/#endifはあたりまえに使う。
795デフォルトの名無しさん
2020/11/03(火) 21:16:35.47ID:eTFEu/to
>>793
そこで、PowerShellのオブジェクトパイプだ!!!
796デフォルトの名無しさん
2020/11/03(火) 21:19:50.78ID:xZyzqOA2
https://qastack.jp/superuser/1259900/how-to-colorize-the-powershell-prompt

カラーエスケープシーケンス
さて、Windowsの10 をサポートANSIエスケープコードのconhostでは、と24ビットカラーは 1703年以降でサポートされています。

ANSIエスケープコードのいずれかを使用するには、リテラルESC文字が必要です。
これは、033進、またはbashで小数点以下27である、あなたは使います"\033"か"\e"。
PowerShellには直接同等のシーケンスはありませんが、代わりに式を埋め込むことができます。"$([char]27)"
797デフォルトの名無しさん
2020/11/03(火) 21:21:56.76ID:xZyzqOA2
C言語にとってのPOSIXは、ほとんどすべてのことができるのに対して
シェルスクリプトにとってのPOSIXは必要最小限のことしかできない

ここ、大きな違いな
798デフォルトの名無しさん
2020/11/03(火) 21:33:57.64ID:j7Eu4w5F
>>796
そのクソ翻訳サイトを今すぐ
uBlacklistへ放り込め
799デフォルトの名無しさん
2020/11/05(木) 08:37:54.68ID:aaXXoIST
最近使う機会のあったTinyCoreLinuxはashで >>2 のリストからしたらPOSIXみたいだけど
コマンドが無かったりして/proc依存しまくりで何の意味もなかったわありがとう!
800デフォルトの名無しさん
2020/11/05(木) 14:20:57.02ID:NJa4xvXv
・TinyCoreLinuxに入っているashはPOSIXシェル
・TinyCoreLinuxにPOSIXコマンドがない・/procに依存している
この二つは何の関係もないんですが……

皮肉を言うのはいいけど,ちゃんと勉強してからにしような!
801デフォルトの名無しさん
2020/11/05(木) 16:46:58.38ID:qZMsdltc
>>800
理想主義者にとっては関係がなくとも、現実に実装を行う開発者にとっては関係がある。
シェルだけがPOSIX準拠であっても意味がない。
802デフォルトの名無しさん
2020/11/05(木) 17:55:36.75ID:5VWi+ROf
>>801
開発者にとってはシェルがPOSIX準拠であれば
安心して使えるんだが?

POSIX準拠してませんってシェルを使う気になるか?
開発者死んだらどうしようって思うだろ?
803デフォルトの名無しさん
2020/11/05(木) 18:16:46.91ID:NJa4xvXv
>>801
それ本気で言ってる?
804デフォルトの名無しさん
2020/11/05(木) 18:57:50.01ID:qZMsdltc
>>802
安心の根拠にできるのはPOSIXだけではない。
メジャーさとかアクティブさとかのほうが。
805デフォルトの名無しさん
2020/11/05(木) 19:06:50.80ID:xxBKaUpW
全部だろ、アホ
806デフォルトの名無しさん
2020/11/05(木) 19:48:26.44ID:qZMsdltc
POSIXはなくてもええわ、カス
807デフォルトの名無しさん
2020/11/05(木) 19:56:20.59ID:xxBKaUpW
おまえんなかではそうなんだろうなw
808デフォルトの名無しさん
2020/11/05(木) 20:52:05.33ID:qZMsdltc
んなもん、あたりまえやw
そして、数少ない原理主義者以外にとってもな!
809デフォルトの名無しさん
2020/11/05(木) 22:54:42.95ID:5bWXoO+B
POSIXよりもうちょっと実用的な標準作られないの?
810デフォルトの名無しさん
2020/11/06(金) 10:03:54.52ID:a8jj0K4f
ここの住人って本気で
POSIXを越える規格を作って
それを世界が受け入れてくれる!
って思ってそうよねw
811デフォルトの名無しさん
2020/11/06(金) 10:15:50.10ID:UqYVvhfA
いや、POSIXを発展させようと思ってるだけだが。
POSIXに影響を与えれば、POSIX自体が成長する。
POSIXを超えるのではなく、POSIX自体がPOSIXを超える。
だからそれはPOSIXのままだと言える
812デフォルトの名無しさん
2020/11/06(金) 10:45:16.28ID:vuRZSDYg
POSIXを越えられるのは、POSIXだけだ!
熱いな
813デフォルトの名無しさん
2020/11/06(金) 10:47:09.27ID:UqYVvhfA
当たり前じゃん。アレだけおもちゃと馬鹿にされた
JavaScriptを超える言語はJavaScriptだけだった
814デフォルトの名無しさん
2020/11/06(金) 11:50:47.48ID:pxoM2z0f
>>810
いや、そんな規格にはそれほど意味がない、と思うやろ。
目安程度にしかならんというか。
淘汰圧にはならんというか。

WebブラウザやC++コンパイラみたいに、非準拠なら非難轟々、とはなってないからな。
815デフォルトの名無しさん
2020/11/06(金) 12:01:23.28ID:UqYVvhfA
非準拠なら単に使われないってだけだな

WebブラウザやC++コンパイラが非難轟々なのは
準拠してますって宣言した上で、非準拠なことするからだよ

最初から準拠していませんって言っていれば
同じように使われないってだけ
816デフォルトの名無しさん
2020/11/06(金) 22:41:33.89ID:a8jj0K4f
これ >>815

原理主義者が鬱陶しいのは同意するけど
だからといってPOSIXを無視していれば
損するのは自分よ。

たとえ「世界中の人間に使ってほしい」とか
そういう意図がなくても,POSIXに準じてたほうが
維持管理・保守の面だけでもどれだけの労力を減らせるか。
817デフォルトの名無しさん
2020/11/07(土) 00:32:05.33ID:FicFgdCX
検証不能だけどな。

まあ、ひょっこり出てきたものがかっさらう可能性もあるからなんとも。
818デフォルトの名無しさん
2020/11/09(月) 13:44:59.81ID:b7PWfh7Z
昔々、TinyCoreLinuxの日本語訳をバイナリでしか公開しなかったライセンス違反のおじさんがいたな
819デフォルトの名無しさん
2020/11/10(火) 07:28:20.01ID:2U042Zc8
POSIX に自信ある人おるっぽいから質問なんだけど!
date コマンドの POSIX 仕様書を見てみると、出力フォーマットに %F とか %z がないんだけど、これって使うとまずい?
%T は載ってるんだけどなぁ

strftime のほうには全部載ってるんだけど
820デフォルトの名無しさん
2020/11/10(火) 12:00:26.68ID:9k3Gk+Qe
「POSIXに準拠する」なら,マズい。
「俺はPOSIXなんか知らねえ! 俺の手元ではdateコマンドに%zを使えるから
使うんだ!」っていう考え方なら,全然使っても構わない。

ちなみに私は前者。
821デフォルトの名無しさん
2020/11/10(火) 12:04:37.65ID:9k3Gk+Qe
ちなみに%zみたいな数値型の時差なら,POSIXに準拠しつつ出力できる。

https://git.io/JkTnV
822デフォルトの名無しさん
2020/11/10(火) 12:11:36.00ID:08CevRpc
正直言うと z 使うと保守が面倒臭くなる
手離れ悪い
823デフォルトの名無しさん
2020/11/10(火) 13:09:49.18ID:2U042Zc8
>>821
なるほど、と思ったけど %z を得るための労力がでかすぎるな...
POSIXLY_CORRECT 知らなかった!勉強になる
POSIXLY_CORRECT=200809 date '%z' したら +900 が取れちゃったけど... (´・ω・`)

>>822
ISO 8601 が便利でなぁ、これに合わせたいんだよね
824デフォルトの名無しさん
2020/11/10(火) 13:24:27.74ID:wuzfZjuS
来年サマータイム導入します(キリっ
825デフォルトの名無しさん
2020/11/10(火) 13:51:26.00ID:9k3Gk+Qe
>>823
POSIXLY_CORRECTはあくまで引数の処理規則とかにしか影響しない
…筈。

はっきりした典拠がある訳じゃないが。
826デフォルトの名無しさん
2020/11/10(火) 14:08:32.86ID:2U042Zc8
>>825
なるほど... ありがとうございました!
827デフォルトの名無しさん
2020/11/11(水) 06:40:35.05ID:AeLDZcCA
>>659
グルーランゲッジだな
パイプ間の1つ1つのプログラムは言語が別別でもよい
828デフォルトの名無しさん
2020/11/11(水) 08:59:35.27ID:KkaNKXcC
>>827
膠っていう考え方ね。
829デフォルトの名無しさん
2020/11/11(水) 16:14:40.51ID:o7ye760s
合成の誤膠って奴かな?
830デフォルトの名無しさん
2020/11/11(水) 17:25:57.68ID:2Y4tzM/7
シェルスクリプトで済むんなら使った方が良い。
831デフォルトの名無しさん
2020/11/11(水) 17:29:00.12ID:uSbtgdeR
結局シェルスクリプトが一番適切だって思うから、みんなシェルスクリプトを使うわけで
そのあとシェルスクリプト使って後悔するなら、シェルスクリプト力(技術力)をつけたほうが良いってことだよ
他の言語に乗り換えるってのは、適切じゃない言語を使うってこと。単に慣れてるだけ。
832デフォルトの名無しさん
2020/11/11(水) 17:41:19.52ID:EWytaMfd
>>831
アホがおるw
833デフォルトの名無しさん
2020/11/11(水) 18:13:47.22ID:KDi/CYCF
>>831
論理があべこべだな
認知に相当の歪みがあると推察されるので、その事実を自覚するのは難しいだろうけど...
834デフォルトの名無しさん
2020/11/11(水) 18:15:50.79ID:uSbtgdeR
ほら、反論なしと(笑)
835デフォルトの名無しさん
2020/11/11(水) 19:29:10.44ID:KFC8J5w+
真面目に反論する気にもならないアホな論てあるんやで
自覚ないとおわかりになられんでしょうけど
836デフォルトの名無しさん
2020/11/11(水) 20:20:09.72ID:1NS/Ttdd
シェルスクリプトの欠点の一つとして
シェル変数を気軽に上書きできるという点がある
うっかりシステムに関係する変数を書き換えると
大騒ぎになるかも
837デフォルトの名無しさん
2020/11/11(水) 20:37:56.82ID:auS5YaT3
システムに関係するシェル変数ってなに?
他の言語じゃその変数を書き換えることは無理なの?
838デフォルトの名無しさん
2020/11/11(水) 20:46:46.52ID:KFC8J5w+
うっかり=意図せずにだろ
他の言語では環境変数を書き換えるという明確な意思がなければ変わらないだろう
839デフォルトの名無しさん
2020/11/11(水) 21:13:01.49ID:auS5YaT3
え?システムに関係するシェル変数って環境変数のことだったの?
環境変数を書き換えても、他のプロセスには影響ないんだけど?
それでシステムに影響がある環境変数の名前はなに?
840デフォルトの名無しさん
2020/11/11(水) 21:13:24.60ID:VcjQlt7C
>>836
readonlyというのがあるじゃん
841デフォルトの名無しさん
2020/11/11(水) 21:14:32.87ID:KFC8J5w+
自分が読めないだけだろ
そしてそのしつこさは...w
842デフォルトの名無しさん
2020/11/11(水) 21:17:25.54ID:KFC8J5w+
>>840
localというのもあるなw
843デフォルトの名無しさん
2020/11/11(水) 21:20:32.92ID:auS5YaT3
シェル変数といったり環境変数といったり
めちゃくちゃだよなw
844デフォルトの名無しさん
2020/11/11(水) 22:41:53.94ID:s9R9EURF
path=...
があるだけで、以降の処理はだいたい残念なことになってまう、みたいなシェルはあったような。

でも、しゃあない。
そういう事故は飲むしかない。
イヤでもあきらめろ。
845デフォルトの名無しさん
2020/11/12(木) 00:04:37.86ID:BEseEgkn
シェルスクリプトが環境変数の書き換えに弱いというのはまだ分かるんだが,
それを「シェルスクリプト特有の」欠点みたいに呼ぶのはよく分からん。

・環境変数を「意図せず」書き換えてしまうこと
・環境変数を「悪意を持って」書き換えられること
こういう事態に弱いのは別にシェルスクリプトに限ったことじゃないでしょう。

具体例を出さなきゃ納得できない人もいそうなんで一つだけ挙げますね。
$LD_LIBRARY_PATH。
846デフォルトの名無しさん
2020/11/12(木) 01:27:16.52ID:V4Sk/AjY
環境変数を意図せず書き換えてしまうとは、環境変数を触るつもりが全くないのにってことでしょ
シェルスクリプトに限らずって、他にそういうのなんかあったっけ
847デフォルトの名無しさん
2020/11/12(木) 04:20:19.45ID:kQyOkhX7
環境変数ってUnixやLinuxに限らず
Windowsにだってめちゃくちゃ使われてるぞ
848デフォルトの名無しさん
2020/11/12(木) 04:34:19.99ID:1ZLHCloS
環境変数PATH、有名なので間違えて書き換えたりしない
LD_LIBRARY_PATH、名前がかぶることはまずない

なぁ、実害あるん?
849デフォルトの名無しさん
2020/11/12(木) 05:19:49.92ID:DEOHcohA
シェルスクリプトは変数と環境変数のアクセスする違いがないってことだろうに
あくまでもローカル変数と使うつもりだったのにうっかりという
システムでの環境変数って言ってもそんな有名どころのではなくてもオレオレでというのはあるだろうに
視野が広いのか狭いのかなんなのか、ズレテルな
850デフォルトの名無しさん
2020/11/12(木) 08:59:00.57ID:NniWGdD3
プログラムのテストでシェルスクリプト使うだろ。
使わないのはテストしないからか
851デフォルトの名無しさん
2020/11/12(木) 10:16:41.65ID:1ZLHCloS
>>849
変数には小文字を使いましょうってだけだなw
システムに関する環境変数なんてわずかしかないのに
その程度で苦労してんのか?
852デフォルトの名無しさん
2020/11/12(木) 12:18:32.48ID:1kfP87l6
>>851
「苦労」の話を誰かしたか?
シェルは、あやしいところがあるよなあ、と言い合ってるだけなのに。
853デフォルトの名無しさん
2020/11/12(木) 12:21:54.36ID:1kfP87l6
>>845
> ・環境変数を「意図せず」書き換えてしまうこと
シェル以外にある?
思い当たるのはmakefileくらいか。

だいたいは、環境変数はかなり特別扱いされてるよなあ。
854デフォルトの名無しさん
2020/11/12(木) 13:43:18.74ID:OA6SFmf/
環境変数を「意図せず」書き換えてしまうことはあるが
その結果、問題が発生することはないって話だよ

だって環境変数を書き換えたとしても、最悪でも
自分とその子孫のプロセスにか影響がないから
システムを壊したりすることがない
855デフォルトの名無しさん
2020/11/12(木) 13:48:31.03ID:1kfP87l6
>>854
> システムを壊したりすることがない
誰がそんな話を?
856デフォルトの名無しさん
2020/11/12(木) 14:09:44.21ID:OA6SFmf/
>>836でかいてあるだろ

> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも

システムに関する変数を書き換えても、自分のプロセスとそれ以下にしか
影響がないから大騒ぎになんかならん

それにシステムに関する変数といっても数えられる程度しかない
857デフォルトの名無しさん
2020/11/12(木) 14:57:57.53ID:kygpD0ad
プログラムってシェルから起動するんじゃないの?
858デフォルトの名無しさん
2020/11/12(木) 15:13:27.21ID:f5BAQJxF
fork元がshellならそうだね
859デフォルトの名無しさん
2020/11/12(木) 15:30:36.85ID:1kfP87l6
>>856
大物の起動スクリプトとかでやらかすと、騒ぎにはなりうる。
init系とか.*rcとかcronとかでも。
初見ではわけがわからんかったりするしな。

まあ、個人的には、そういうものだと思ってるが。
おかげでラクなところもあるし、しゃあない。
860デフォルトの名無しさん
2020/11/12(木) 16:55:55.29ID:s02jb8N+
WindowsだとADと連携させたりして、レジストリのアクセス制御が容易とか、そういう話?
861デフォルトの名無しさん
2020/11/12(木) 17:49:14.13ID:OA6SFmf/
>>859
> 大物の起動スクリプトとかでやらかすと、
だから何をやらかすんだよw

環境変数PATHを書き換えてしまったんだ
って「だけ」の話をしてるんか?

何をやらかしたのかを言わずに、
ずっとやらかししまうって言ってるだけじゃんか
862デフォルトの名無しさん
2020/11/13(金) 02:11:25.86ID:Rmv9apnz
↑ こいつの知見の無さが半端ない。なのになぜか偉そう。頭悪そう
863デフォルトの名無しさん
2020/11/13(金) 02:52:22.83ID:F3tZoo3K
わからないから質問してるのに
それにたいしてわからんのかと言われても
最初から、わからんと言ってるんだがとしか言えない

それで、何をやらかすんだ?
864デフォルトの名無しさん
2020/11/13(金) 11:56:10.07ID:4qY0TlDt
具体的なケースはわりとどうでもいいから。
パスでもプロキシでも、環境変数はちょくちょく影響がある。

それが想像つかんのなら、もうからまんでええんちゃう?
865デフォルトの名無しさん
2020/11/13(金) 12:58:09.35ID:es502k4w
複数のシェルスクリプトをカスケードで読む場合
変数の管理がめんどくさくなるかな
sourceしたりして他のシェルスクリプトと非同期で
動かすとさらに複雑になる
866デフォルトの名無しさん
2020/11/13(金) 13:19:38.00ID:A88QmKc9
>>864
逃げるなよw
具体的なケースが重要

PATH変数とHTTP_PROXY変数だっていいたのだろうが "それだけ" だろう?
しかもシステム設定を変えるわけじゃない。
何度も言うが自分と子プロセスにしか影響がない。
意図せず変更してしまう可能性がどれだけあるのかと
あと環境変数じゃないなら小文字使えや
867デフォルトの名無しさん
2020/11/13(金) 13:23:59.15ID:A88QmKc9
>>865
また知ってる単語を使ってみましたみたいな文章だなw
カスケードで読むってなんだよ。誰がそんな用語使ってるんだ?

シェルスクリプトが別なら変数は共有されない
非同期で動かすというなら、それぞれ別のサブシェルになるから
これも変数は共有されない

sourceしたりというなら、グローバル変数のことだろうが
それなら、シェルスクリプトはグローバル変数しかないから
大規模に向かないって言えばいいだけのことだろ?

グローバル変数しかなくてもプリフィックス(を名前空間として考える)を
変数名につければいいだけだがな。それはPOSIXにこだわらないなら
localとかtypesetでローカル変数作れるし
868デフォルトの名無しさん
2020/11/13(金) 14:48:01.16ID:4qY0TlDt
>>866
影響のでかたについては説明済み。
http_proxy系環境変数は一般的に小文字。

逃げてるというならそれでいい。
めんどくさいアホの相手はもうおしまい。
869デフォルトの名無しさん
2020/11/13(金) 15:20:10.18ID:S1mNTw0c
結局,「自分が思う(無根拠な)あやうさ」
を放言した結果,鉞が四方八方から飛んできて収集付かなくなった感じかね。

元の発言
> シェルスクリプトの欠点の一つとして
> シェル変数を気軽に上書きできるという点がある
> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも
からしてまあシェルスクリプト分かってんのかってツッコみたくなる点が幾つもあるし。
もう散々上で叩いたからこれ以上は責めるのを止すが。
870デフォルトの名無しさん
2020/11/13(金) 18:14:52.09ID:4qY0TlDt
それは双方同等。
「自分が思う(無根拠な)大丈夫さ」だから。

ま、一回事故らんと身に染みないことではある。
871デフォルトの名無しさん
2020/11/13(金) 18:21:34.11ID:A88QmKc9
>>868
だから影響の出方は
"僅かな"有名な環境変数を書き換えると
自分と子プロセス"だけ"に影響があるって話でしょ?
ずーっとそういってる

大した影響がないと
872デフォルトの名無しさん
2020/11/13(金) 18:22:01.01ID:A88QmKc9
>>870
実際に事故ったときの
環境変数の名前は?
873デフォルトの名無しさん
2020/11/13(金) 18:27:23.64ID:A88QmKc9
自分の体験談を言えばいいだけだと思うんだがねぇ
たまたま自分のアプリで LD_LIBRARY_PATHという変数を使っていたら
これと同じ環境変数を○○アプリが使っていて困りましたとかさぁ

実際の体験談ね。架空の体験談じゃなくてw
874デフォルトの名無しさん
2020/11/13(金) 19:29:50.68ID:du2laNOa
PATHを書き換えて、コマンドサーチパスの優先順位変わって意図しないバージョンのコマンドを実行してしまって、コマンドの互換性に問題あって、大事なファイルを破壊してしまったとか
そういうのはあるんじゃない
875デフォルトの名無しさん
2020/11/13(金) 19:55:53.16ID:A88QmKc9
>>874
それはあると思うよ。

だからうっかりシステムに関係する変数を書き換えると大騒ぎになるかもというが
実際には注意が必要なのはPATH変数ぐらいの話だよねという結論に俺はしたいわけw
876デフォルトの名無しさん
2020/11/13(金) 21:49:53.46ID:uCeIaRFr
>>869
>四方八方から飛んで
そのレスの前で飛ばしてるのは一人だと思うが
877デフォルトの名無しさん
2020/11/14(土) 00:25:29.47ID:ZrW/GOpe
>>870
どっちもどっち論に逃げずにさ,
一つだけでもいいから実例をあげてくれるだけでいいんだよ。
878デフォルトの名無しさん
2020/11/14(土) 00:37:43.34ID:3AniUInE
>>877
もうええから。
おのれが事故るまでわかるまい。
879デフォルトの名無しさん
2020/11/14(土) 12:11:16.48ID:ZrW/GOpe
ここまで問いつめて一つも実例が出ない……。
あのね,自分の考えを矯正せざるえない正しい情報は耳障りかも知れないけど,
もう一度聞いてくれ。
「環境変数(⊂シェル変数)を外部から書き換えて,システムに損害を及ぼす」
ことは可能だけど,
シェル引数がプロセス間でどう引き継がれるかというのはPOSIXで定められていて,
要すれば「変数の書き換えの影響が及ぶのはその書き換え後にそのプロセスから
遂行したシェル(スクリプト)のみ」っていう決まりなのよ。
で,「変数を書き換えるとシステムに損害を及ぼす」ようなシェルスクリプトっていうのは
「システムを管理するシェルスクリプト」であって,
そんなシェルスクリプトを「遂行する前に」変数を書き換えられるような状態においては,
もはや「環境変数の書き換え」なんていう攻撃℃闥iを取らなくても,
簡単にシステムをぶっ壊せる。
逆に例えばマトモな許可設定がなされてるサーバーに対して,
クライアントが環境変数を書き換えてサーバーのシステムを壊すなんてことはできない。
880デフォルトの名無しさん
2020/11/14(土) 12:14:10.37ID:ZrW/GOpe
はぁ〜〜無駄な熱量を使っちまった……
バカは放っておくのが一番なのは理解しているんだが,
初学者がもしもこのバカの発言を間に受けたら
勉強が進んで己の知識を修正するまで
間違った知識で行動する訳で,それは可哀そうなのでね。
881デフォルトの名無しさん
2020/11/14(土) 12:19:51.30ID:WE59Iknb
シェルスクリプトはセキュリティホール
揺るぎない真実に向き合え
882デフォルトの名無しさん
2020/11/14(土) 12:30:38.87ID:kdUuCuZx
>>879
攻撃の話はしてないよ
単に環境変数を書き換えることで他のプロセスに影響を与えることはできるけど
そもそもその環境変数なんてわずかしかないんだから
大騒ぎするまでのことはないよねって話してる

それに対して問題がー、問題がーってしつこく言ってるやつが居るから
お前実際にどんな問題が起きたことあるんだ?って聞いてるんだが
その答えは帰ってこないし、帰ってきてもそれだけだよね?程度の話だった

これがここまでの結論
883デフォルトの名無しさん
2020/11/14(土) 12:35:19.46ID:QzputhfI
日本語がぎこちないので ID:ZrW/GOpe は馬鹿確定
884デフォルトの名無しさん
2020/11/14(土) 13:34:21.21ID:ZrW/GOpe
知識で勝てなくて悔しいのう
885デフォルトの名無しさん
2020/11/14(土) 13:42:24.75ID:5XkrS48F
俺が実際どんな問題があった?って聞いてるんだから
俺の話を横取りするな
886デフォルトの名無しさん
2020/11/14(土) 14:45:22.49ID:i/Cc0DGY
自分も具体例を聞きたい
887デフォルトの名無しさん
2020/11/14(土) 14:48:05.38ID:DnZAmAgg
ワイもワイも
888デフォルトの名無しさん
2020/11/14(土) 15:46:11.26ID:hNMhXONs
セキュリティの問題ではないけど
PWDをシェルスクリプトの中で変数として使うと
システムに勝手に書き変えられて
思ったように動かないかもしれないな
889デフォルトの名無しさん
2020/11/14(土) 21:48:21.52ID:9DKCECFD
責任の遂行
890デフォルトの名無しさん
2020/11/14(土) 23:28:38.65ID:ZrW/GOpe
>>888
そうそう,こういう具体例でいいのよ。
ちなみにこの場合,変数$PWDじゃなくて
命令としてpwd(1)を使うとかすれば回避できる。
891デフォルトの名無しさん
2020/11/14(土) 23:40:33.62ID:1QU8t+0x
シェルスクリプト以外でPWDを使うことってあるんだろうか?
そもそもPWDはシェル変数ではあるが環境変数なのか?
他の言語でPWDがあることを前提としていいのだろうか?

またシェルスクリプトとかでは起動時に現在のカレントディレクトリに
設定されると思うので影響があるのは自分自身だけだろうな
892デフォルトの名無しさん
2020/11/15(日) 09:04:33.27ID:bhsguIlX
ん? 相対名でファイルをオープンするときとかどうなってると?
893デフォルトの名無しさん
2020/11/15(日) 11:54:09.26ID:ofPGnU/6
>>892
PWDはただのカレントディレクトリを
変数に入れただけだよ

カレントディレクトリのことではない
cdしたときにシェル変数PWDとOLDPWDに
カレントディレクトリを入れるだけのこと

他の言語ではPWDやOLDPWDは参照しない
環境変数でしかないから
894デフォルトの名無しさん
2020/11/15(日) 18:03:22.63ID:h835C+/M
ていうかシェルでもPWDを参照することは少ないでしょう。
「カレントディレクトリ」を指し示したかったらpwdを使うかな。

ちなみに,当然分かっているとは思うけど,
C言語やPythonでも$PWDは参照できる。
ただまぁ,それをやってるプログラムは,$PWDを参照している
シェルスクリプトと同じくらい数少ないと思うけどね。
895デフォルトの名無しさん
2020/11/15(日) 18:36:18.33ID:bhsguIlX
なるほど。
カレントディレクトリを知りたいときにPWDを参照したら楽かもねってだけか。
それ以外には影響を及ぼさない。
勝手にPWDに依存するスクリプトやコマンドはあるかもしれんがw
896デフォルトの名無しさん
2020/11/15(日) 18:41:31.75ID:ofPGnU/6
え?普通$PWDの方を使うでしょ
pwdにメリットなんてあるの?
デメリットならいくつか言える

外部コマンドなので遅い
ほどんどの場合、結局変数に入れて使う
変数に入れる時に標準出力経由でやるから更に遅い
変数展開が使えないから、/foo/bar/baz からbazだけを取るのが面倒で遅い
(まずありえないけど)改行で終わるディレクトリが正しく取れない(工夫すれば取れるけど)

唯一のメリットはPWDの内容と実際のカレントディレクトリが違う場合が
あることだけど、PWDはシェルスクリプト起動時に初期化されるので
意図的に変更しないとそうはならない。どうしてもPWDを
カレントディレクトリに初期化したいなら cd . でも実行すればいい

> C言語やPythonでも$PWDは参照できる。
それはPWDが環境変数としてエクスポートされてる場合でしょ?
unset PWDしてから起動しても参照できるって保証はあるの?
897デフォルトの名無しさん
2020/11/15(日) 18:43:40.53ID:ofPGnU/6
pwdはカレントディレクトリを画面に表示するだけのときにしか使わないな
カレントディレクトリを利用する(変数に入れる)場合は$PWDを使う
898デフォルトの名無しさん
2020/11/15(日) 18:45:36.14ID:QB7zB470
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
> PWD
> Set by the shell and by the cd utility. (...) Assignments to this variable may be ignored.
899デフォルトの名無しさん
2020/11/15(日) 18:47:38.69ID:h7nWKXR3
$ mkdir x
$ ln -s x y
$ cd y
$ pwd
/work/tmp/y
$ echo $PWD
/work/tmp/y
$ pwd -P
/work/tmp/x
900デフォルトの名無しさん
2020/11/15(日) 18:50:20.68ID:ofPGnU/6
書いておいてなんだけど、改行で終わるディレクトリなんて作ったことないからやってみたw

cd /tmp
mkdir "abc

"

こんな感じで普通に作れるね。移動して(移動するときも cd "abc

" ってやらないとだめw)

echo "[$PWD]" したらちゃんと改行が入ってる

pwdもコマンド打つだけなら改行が入ってるけど
dir=$(pwd) とかすると末尾の改行が消えてdir変数に入る

回避方法は dir=$(pwd; echo _); dir=${dir%_} とすること
末尾の改行が消えないように _ とかを追加しておいて、変数展開を使って消す
901デフォルトの名無しさん
2020/11/15(日) 18:53:44.48ID:ofPGnU/6
>>898
> Assignments to this variable **may** be ignored

つまり無視されるかもしれないし、無視されないかもしれないってことね。
事実 PWD にカレントディレクトリと異なる値を入れることはほとんどのシェルで可能
902デフォルトの名無しさん
2020/11/15(日) 18:56:56.26ID:ofPGnU/6
>>899
何がいいたいのか知らんけど、
pwd -P の結果をPWDを使わずにほしいという話なら
cd -P を実行すればいいよ

dir=$(pwd -P) ・・・ 外部コマンド(遅い)+コマンド置換(遅い)
で二重に遅くなるけど

cd -P; dir=$PWD なら 内部コマンド(速い)+コマンド置換なし(速い)
カレントディレクトリが移動してしまうという副作用があるけど必要なら戻せばいい
903デフォルトの名無しさん
2020/11/15(日) 18:57:41.90ID:ofPGnU/6
訂正

pwd -P の結果をpwdを使わずにほしいという話なら
cd -P を実行すればいいよ
904デフォルトの名無しさん
2020/11/15(日) 19:02:15.10ID:h7nWKXR3
bash$ type pwd
pwd is a shell builtin
905デフォルトの名無しさん
2020/11/15(日) 19:03:42.80ID:ofPGnU/6
お、pwdはビルトインコマンドだったかw
じゃあそこは訂正

コマンド置換になるから遅い だけだな
これで数千倍ぐらい遅くなる
906デフォルトの名無しさん
2020/11/15(日) 19:16:41.84ID:h7nWKXR3
$ dash
$ readonly PWD
$ cd x
dash: 3: cd: PWD: is read only
$ echo $PWD
$ /home/hoge
$ pwd
$ /home/hoge/x
907デフォルトの名無しさん
2020/11/15(日) 19:20:48.28ID:ofPGnU/6
>>906
嫌だからそれがどうかしたんか?w
自分の結論を言わんと
ただ必死な姿にしか見えんぞ
908デフォルトの名無しさん
2020/11/15(日) 19:23:24.34ID:h7nWKXR3
お遊びに付きあってあげているだけさ。気にするなよw
909デフォルトの名無しさん
2020/11/16(月) 02:15:26.25ID:4uoBNdLM
>>905
>お、pwdはビルトインコマンドだったかw

一応/bin/pwdもあるね。
これの場合、子プロセスのディレクトリは親から引き継がれてるからおk,ということかな。
910デフォルトの名無しさん
2020/11/16(月) 09:46:48.16ID:VPqCGhU1
>>896
cd .してから$PWDを利用
←これやなシェルスクリプトの親プロセスで
readonly PWDされても問題ないし。
911デフォルトの名無しさん
2020/11/16(月) 10:42:21.57ID:ZICsfNV8
> readonly PWDされても問題ないし。

readonly するのは誰?
いや、自分でやっておいて
誰かにreadonly されたー!って叫ぶのかなと(笑)
912デフォルトの名無しさん
2020/11/16(月) 12:53:31.23ID:sF1WJXNT
改行コードってディレクトリ名とかファイル名の禁止文字じゃないのかω
勉強になったわωω
913デフォルトの名無しさん
2020/11/16(月) 13:39:21.12ID:IuVgP+7M
findとかxargsとか
改行コードが禁止文字じゃないから
1行1ファイル名にできなくて
仕方なくNULL文字区切りができたんだよな

1行1ファイル名ならそんな機能いらなかったのに
NULL文字区切りって改行対策だけの機能だから
914デフォルトの名無しさん
2020/11/16(月) 14:00:41.03ID:Ks5/uhC8
>>912
「¥0」「/」以外の全バイトが有効なんだっけか。
Windowsは締めすぎだが、UNIXは緩すぎ。w
915デフォルトの名無しさん
2020/11/16(月) 15:33:23.40ID:VPqCGhU1
>>911
>>906
916デフォルトの名無しさん
2020/11/16(月) 15:35:18.75ID:VPqCGhU1
>>913
find使うなら、xargsじゃなくて
-exec使った方がいいと思う。
ファイル区切りとか考える必要がない。
917デフォルトの名無しさん
2020/11/16(月) 16:02:01.39ID:UFAKJ9cA
>>914
ちなmacOSではUTF-8として正当かチェックがあった気が....
あとFinder上でならスラッシュも使える。がコロンが使えない。
いえ、macOSはUNIXですw
918デフォルトの名無しさん
2020/11/16(月) 16:20:12.32ID:T0PHjpz3
>>916
-execはファイル一個ごとですよね、と一瞬思ったけど、
それが気になる場合は {} + ですか。

しかし {} + って昔からあった?
ネットで見つけた4.3BSDのマニュアルには {} + の記述はないっぽい。
http://www.retro11.de/ouxr/43bsd/usr/man/cat1/find.0.html
919デフォルトの名無しさん
2020/11/16(月) 16:53:12.65ID:VPqCGhU1
>>918
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html
ここのRATIONATE節を読むといい。
920デフォルトの名無しさん
2020/11/16(月) 17:48:34.34ID:EzTwR9A1
PWD を環境変数にするという発想は無かったな。
しちゃいかんとまでは思わないが意義があるとも思わない。
921デフォルトの名無しさん
2020/11/16(月) 20:06:37.21ID:Ks5/uhC8
>>917
それは、ファイルシステムじゃなくて、シェルやろ。
UNIXというよりアポー互換のためだからしゃあない。w
922デフォルトの名無しさん
2020/11/16(月) 20:09:53.39ID:Ks5/uhC8
>>920
変数展開とか置換で使いやすいからやろ。
意義ならそれで充分。
923デフォルトの名無しさん
2020/11/16(月) 21:47:14.87ID:was5dDeL
>>922
変数展開とかするならシェル変数で十分じゃん
環境変数にする必要がない
924デフォルトの名無しさん
2020/11/16(月) 21:47:38.57ID:VPqCGhU1
readコマンドと同じようなことを,変数を新たに生成することなく実現する方法ないかな。
当然,入力結果は変数に格納せずに,そのまま標準出力に返す。
(←べつにこの仕様じゃなきゃいけない訳じゃないけど,変数なしだとこれくらいしかないかな?)

例えば引数を付けないcatだと近い挙動を実現できるけど,
入力を終了する時に<Enter>じゃなくて<C-D>を入力しないといけないので,
利用者側の操作が違ってきちゃう。
↑このあたり,sttyとかで設定できないかな〜と思いつつも,
stty eof ^Jとかしても無理なんで詰まっている。
925デフォルトの名無しさん
2020/11/16(月) 21:56:03.84ID:was5dDeL
変数を新たに生成しないなら、決め打ちのグローバル変数を使ったら?
それも嫌ならPS1とかPS2を使うとかw
どうせシェルスクリプトの中では使わないだろうし
926デフォルトの名無しさん
2020/11/16(月) 22:19:15.08ID:was5dDeL
お、思いついたw

read workとやってwork変数を使う

だけどそうすると上書きされちゃうから
set -- "$work"として$1にバックアップしておく
そいでecho "$work"してから$1を$workに戻す

ただしwork変数はread前に定義されてない可能性があるから
そこは変数が定義されてるかどうかで処理を分ける(めんどくさいから任せたw)

これで一時的には変数を使うけど使うけど最終的に副作用はない
927デフォルトの名無しさん
2020/11/16(月) 22:20:25.71ID:was5dDeL
この方法を使えばreadの結果を$1とかに入れることもできそうw
928デフォルトの名無しさん
2020/11/16(月) 23:22:53.16ID:9mrX0/C/
>>924
単にサブシェルにするのでは駄目?
( read a; echo "$a" ) みたいに
929デフォルトの名無しさん
2020/11/16(月) 23:44:35.69ID:VPqCGhU1
>>926
sttyとか使ってなるべく代入を減らそうとしてたんだけど,
この方法でも「変数を節約する(使わない)」という目的は
普通に達成できるな。
ありがとう。
930デフォルトの名無しさん
2020/11/17(火) 09:06:13.86ID:iIrFjUs6
Macは昔は:がフォルダの区切り文字だったんだよな
ファイルのリソース情報が本体ファイルと別になってて2個1だった
931デフォルトの名無しさん
2020/11/17(火) 10:59:29.50ID:BpUAWx5v
>>921
macOSのファイルシステムはユニコードで規定されているのでそういうチェックも
あるというか。
ま、ある意味文字列の中身を厳密に規定しないできた流れのFSと、
ユニコードの普及を推進していた(る)会社が作ったFSの違いかな?
932デフォルトの名無しさん
2020/11/17(火) 16:59:32.69ID:RPD3bx3d
ちなみにWindows 10ではクソみたいな方法で,*一見すると*コロンや不等号を
ファイルに名付けられるような仕様になっている。




誰得なのこの機能?
933デフォルトの名無しさん
2020/11/17(火) 17:09:47.51ID:nHdTOcnh
>>932
誰得もなにも動画のとおりだろ

NTFSではPOSIX対応が必要だったため、本来はコロンとかを
ファイル名に入れられるんだがWindowsでは互換性のために禁止されてる

しかしWSLの登場でコロンや不等号のファイル名に対応する必要が出てきた
誰得ってのはこのWSLユーザーに決まってる
NTFSではこれらの文字を使おうと思えば使えるのだが、それだと相互運用で問題が出る

だからWSLでコロン等をファイル名に使ったら、Unicodeの特殊な文字に名前を変更して記録している
そしてこの仕様はもともとCygwinで考え出されたものだ

WindowsでLinux的に使おうとすれば、どうしてもそういう文字に対応する必要があるので
Cygwinで考え出された仕組みをWSLでそのまま取り入れてるだけ
934デフォルトの名無しさん
2020/11/17(火) 17:55:26.97ID:WUYxAqUP
>>933
勉強になった。
よっ、生き字引!
935デフォルトの名無しさん
2020/11/17(火) 18:03:09.09ID:nHdTOcnh
普通にcygwinで:というファイル名を作ったら
Windowsからはどう見えるんだ?って調べればわかることだな
もう何年も前の話だよ
俺にとってはWSLでも同じでワロタ状態
936デフォルトの名無しさん
2020/11/17(火) 18:05:47.61ID:nHdTOcnh
あとwslpathコマンドも、昔からCygwinにcygpathというコマンドがあるのを知っていれば
同じような仕組みにしたのねって思うはず
MS独自の仕組みじゃなくて既存の仕組みを流用する当たり
今のMSがオープン的な考えになってることがよく分かる
937デフォルトの名無しさん
2020/11/17(火) 18:34:05.16ID:J3+TnR7G
全角文字使えは解決するのにな
938デフォルトの名無しさん
2020/11/17(火) 18:44:18.62ID:8pwQehN5
全角と半角を同一視したらダメだろ
だから通常使われてない文字にわざわざしてるんだが
939デフォルトの名無しさん
2020/11/17(火) 19:02:58.91ID:J3+TnR7G
ファイル履歴「せやな…」
940デフォルトの名無しさん
2020/11/17(火) 20:36:01.00ID:RPD3bx3d
wslpathがcygpathと同じ仕組みなのってなんで分かったん?
いや,つっかかる訳じゃなくて,
wslpathってソース公開されてないからさ。
941デフォルトの名無しさん
2020/11/17(火) 20:46:02.57ID:/MJ+K6rY
a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c z Nov 19 2020 ccc

cat a.txt | awk -v hy="-" '{if("$2"=="x"){"date -d "$3hy$4hy$5" ¥"+%Y-%M-%D¥" | getline var ; print $1","var","$6}}'

これ実行するとvarの内容がたまに前の行の値のままになったりするんだけど
|が悪いの?


結局 while IFS=' ' read 〜に変えたらやりたいことはできたけと何故上手くいかなかったのか分からなくて
942デフォルトの名無しさん
2020/11/17(火) 21:02:17.75ID:8pwQehN5
>>940
コロンとかのファイル名の話な(これはwslpathやcygpathとは関係ない)

cygwin「cygwin環境でHOME以下に作ったファイルはC:\cygwin64\home以下に作るで」
cygwin「 cygwin環境で : とか * という名前のファイル作れるで」

10年前の俺「え?なんで?エクスプローラーから見たら文字化けしとるやんけwww なんだこりゃ」
数分後 → 「ふーん」

WSL「/mnt/c/Users以下に作ったファイルはC:\Users以下に作るで」
WSL「WSL環境で : とか * という名前のファイル作れるで」

俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
数分後 → 「同じじゃねーかwww」


wslpathは別にcygpath使ってればコマンド名とかオプションとか真似してるってわかるだろ?
WSL(Linux)にパスを変換するときのオプションが何故か-uな所とか
(cygwinでは-uの長いオプション名は--unix)
943デフォルトの名無しさん
2020/11/17(火) 21:04:26.43ID:8pwQehN5
まあもしかしたらcygwinよりも前にSFU(の前身)とかがやってたのかもしれんけどさ
944デフォルトの名無しさん
2020/11/17(火) 21:32:09.28ID:yKNV/xx9
>>940
「仕組み」は、具体的な実装のことではなく、全体的なやりかたのことやろ。
945デフォルトの名無しさん
2020/11/17(火) 22:11:55.77ID:8pwQehN5
> 俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
> 数分後 → 「同じじゃねーかwww」

この同じじゃねーかwwwっていうのは : などのWindowsでは使えない文字のマッピング先の文字コードの話ね
そういや文字コードが同じであることは確かめたけど、実際にcygwinで作ったファイルをWSLで見たことなかったわ
んで、今やってみたけど、当然なんだけど、cygwinで作った : というファイルはWSLでちゃんと : になってたw
cygwin(たぶんmsysも同じ)との相互運用も考えてこうしたんだろうな
946デフォルトの名無しさん
2020/11/18(水) 14:43:02.92ID:oGkGNlvA
>>941
>"date
" がいらない

>\"+%Y-%M-%D\"
2つの\ がいらない

これを実行しても、何も表示されないけど。
なんで?
947946
2020/11/18(水) 14:47:49.14ID:oGkGNlvA
>>941
>\"+%Y-%M-%D\"

ひょっとして、この\ は、キーボードのバックスラッシュじゃないのかも?
ちゃんとキーボードで、入力してみれば?
948946
2020/11/18(水) 14:58:29.15ID:oGkGNlvA
>>941
Ruby で、CSV なら、

require 'csv'

CSV.foreach( "a.csv", col_sep: " " ) do |row| # 1行ずつ処理する
p row[ 1 ]
end

出力
"x"
"x"
"z"
949デフォルトの名無しさん
2020/11/18(水) 15:28:33.58ID:XsHXPiSN
>>946
>>947
すまんスマホで打ったので間違ってた

cat a.txt | awk -v hy="-" '{if($2=="x"){"date -d "$3hy$4hy$5" +%Y-%m-%d" | getline var ; print $1","var","$6}}'


+%Y-%m-%dは¥(バックスラッシュ)"で囲まなくてもOKだった
出力が3行以上あると>>941の現象になる気がする
950946
2020/11/18(水) 15:35:10.65ID:oGkGNlvA
>>949
なら、下のように出力された

a,2020-11-17,aaa
b,2020-11-18,bbb
951デフォルトの名無しさん
2020/11/18(水) 15:59:00.88ID:XsHXPiSN
>>950
出力される行数10行くらいに増やした場合は?(もちろん全て日付変えて)
952946
2020/11/18(水) 16:43:39.93ID:oGkGNlvA
正しく出力される。
実際には、c, d, f などは出力されていないけど

a,2020-11-17,aaa
b,2020-11-18,bbb
c
d
e,2020-11-21,eee
f
g,2020-11-23,ggg
h,2020-11-24,hhh
i
j,2020-11-26,jjj
k,2020-11-27,kkk
l,2020-11-28,lll
m
n
o,2020-12-01,ooo
p,2020-12-02,ppp
q,2020-12-03,qqq
r
s,2020-12-05,sss
t,2020-12-06,ttt
u
953デフォルトの名無しさん
2020/11/18(水) 17:46:13.72ID:XsHXPiSN
>>952
ありがとう

何故だろう
954デフォルトの名無しさん
2020/11/18(水) 22:39:32.53ID:c4VI5UKm
フィールド数が想定がところがあるとエラーで getline が呼ばれなくて
var がそのままになったりするのかも?
955デフォルトの名無しさん
2020/11/18(水) 22:40:20.82ID:c4VI5UKm
想定が -> 想定外な
956デフォルトの名無しさん
2020/11/18(水) 23:00:38.15ID:XsHXPiSN
>>954
これかも
1列目にブランク入りのデータが入ってた
957デフォルトの名無しさん
2020/11/18(水) 23:22:35.65ID:2l0B+GoX
AWKのgetlineってめっちゃ便利よね。
これ使い始めたらもうシェルスクリプトじゃなくてAWKスクリプトになるけどw
958デフォルトの名無しさん
2020/11/18(水) 23:25:59.76ID:XsHXPiSN
>>956
いや違うわ
ブランク入ってたらそもそも$2がxにならない
959デフォルトの名無しさん
2020/11/19(木) 02:55:11.75ID:kL0AGIHT
まず再現するデータをよこせ
960デフォルトの名無しさん
2020/11/19(木) 07:48:43.53ID:jemYGepS
元ネタの人じゃないけど以下のデータでおかしくなった。

a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 19 2020 ddd
d x
e x Nov 19 2020 eee
f x Nov 20 2020 fff

d の行以降の日付が今日の日付になった。Ubuntu 16.04.7。
なんかデータをちょっといじると再現しなくなるような感もある。
961946
2020/11/19(木) 10:41:14.25ID:uVXRNBYq
>>960
d x
という変な行も、データに入れるのか?

Windows 10, WSL2, Ubuntu 18.04 では、下のように出力された

a,2020-11-17,aaa
b,2020-11-18,bbb
c,2020-11-18,ccc
d,2020-11-19,ddd
d,2020-11-19,
e,2020-11-19,eee
f,2020-11-20,fff
962デフォルトの名無しさん
2020/11/19(木) 21:37:07.41ID:ACSoydf1
>>961
そう。わざと壊れたデータで遊んでみているw

確実に再現できるバグは、ある意味治すのは易しい。
再現方法がよくわからんバグは...どうしたら再現するかを考えるのも一興かとw


あしまった、データが違ったかも。こうかな。

a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 20 2020 ddd
d x
e x Nov 20 2020 eee
f x Nov 20 2020 fff
963デフォルトの名無しさん
2020/11/19(木) 21:49:05.89ID:pLwLwTYy
ちなみにdateコマンドは日付が空だと今日の日付を入れるようなので
Nov 20になる前に試すのがおすすめw
964946
2020/11/20(金) 02:15:19.68ID:pwTm9Uxw
このデータでやった。
b が今日の日付になる

a x Nov 03 2020 aaa
b x
c x Nov 05 2020 ccc
d x Nov 06 2020 ddd

出力
a,2020-11-03,aaa
b,2020-11-20,
c,2020-11-05,ccc
d,2020-11-06,ddd
965デフォルトの名無しさん
2020/11/20(金) 14:19:37.94ID:EGUOn9wt
>>964
うん、それは単に >ちなみにdateコマンドは日付が空だと今日の日付を入れるようなので
だと思う。

自分の環境で >>962のデータを食わせたら
a,2020-11-17,aaa
b,2020-11-18,bbb
c,2020-11-18,ccc
d,2020-11-20,ddd
d,2020-11-19,
e,2020-11-19,eee
f,2020-11-19,fff

となった。e, f で空のdの所で得た日付を使われている感じ。ちょっとおもしろい。
966デフォルトの名無しさん
2020/11/23(月) 08:04:11.39ID:bkMAXdue
ループ処理をバックグラウンドで流すと500個ぐらいプロセスができて
まったく動かない。いい方法ないかな。
967デフォルトの名無しさん
2020/11/23(月) 08:50:42.89ID:eEk7O1Jq
>>966
500並列処理でもしてるんか?
そりゃ普通のCPUじゃ無理だろうよw
制限でもしろ
968デフォルトの名無しさん
2020/11/23(月) 10:20:31.35ID:QFnswc7I
>>966
シェルの問題なんだろうか…?
969デフォルトの名無しさん
2020/11/23(月) 11:57:26.98ID:fPgs5Hol
10万行のループ処理にかかる時間は、while は5秒、for は9分。
それらを、awk, perl に書き直せば、0.1秒

forの時間のほとんどは、プロセスの起動・終了処理。
そもそも、bash はループ処理に向いていないので、dash を使う。
それでも、シェルスクリプトはループ処理に向いていない

awk, perl, Ruby などは、1プロセス内で処理するから、
シェルスクリプトよりも断然速い
970デフォルトの名無しさん
2020/11/23(月) 12:55:10.05ID:eEk7O1Jq
古いCorei7だけどbashで0.5秒で終わるぞ?

$ time -p bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.53
user 0.51
sys 0.00

dashなら0.15秒だな
$ time -p dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.15
user 0.14
sys 0.01
971デフォルトの名無しさん
2020/11/23(月) 12:58:14.53ID:eEk7O1Jq
> forの時間のほとんどは、プロセスの起動・終了処理。

forでプロセス起動なんてしないけど?
972デフォルトの名無しさん
2020/11/23(月) 13:16:27.49ID:LSu3Ppxv
>>968
どう見てもそういうシェルスクリプトを書いたとしか見えんな
バックグランドプロセスを自分で管理するのがめんどくさいとかだったら、なんか上の方のレスであったな
973デフォルトの名無しさん
2020/11/23(月) 13:22:54.01ID:LSu3Ppxv
GNU Parallel か

>>966
GNU Parallel で簡単に解決できそ
974969
2020/11/23(月) 13:37:45.01ID:fPgs5Hol
>>970
漏れは、6年前のパソコン工房の初心者向けノートPC、
Windows 10 Home, 64 bit, 20H2(2020 秋)
WSL2, Ubuntu 18.04

CPU は、i3-3120M。2 core, 4 thread のエコモード。
8GB メモリで、

bash
real 1.53
user 1.53
sys 0.00

dash
real 0.42
user 0.42
sys 0.00
975968
2020/11/23(月) 14:12:23.68ID:QFnswc7I
>>970
$ time -p bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.30
user 0.30
sys 0.00
$ time -p dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.11
user 0.11
sys 0.00

OS: Gentoo via WSL2 on Windows 10 (build 20262.1010)
CPU: AMD Ryzen 7 3700X
RAM: 16 GiB, 2666 MHz
976968
2020/11/23(月) 14:12:52.26ID:QFnswc7I
多分ね,遅いのはシェルのせいじゃない。
組み方がおかしい。
977デフォルトの名無しさん
2020/11/23(月) 16:34:44.84ID:iaIJT3SX
テキストファイルの中にカレントディレクトリを基準にしたファイルリストがあります。
このテキストファイルのファイルリストのファイルを~/backap/以下にディレクトリ構造を
維持したままコピーする方法を教えてください。

ファイルリストに含まれるパスは全てファイルです。ディレクトリで終わるパスは含まれません。

./file/jidori.jpg
./nikki/2020/11/01.txt
↑こんな感じのがたくさんあります
978デフォルトの名無しさん
2020/11/23(月) 17:18:30.33ID:nsFhHMUZ
$ rsync -a ―files-from=./file_list.txt . ~/backap
979デフォルトの名無しさん
2020/11/23(月) 18:16:32.54ID:hekS2Nxq
$ cp -pr ./* ~/backup

ではいかんのか?
980デフォルトの名無しさん
2020/11/23(月) 20:09:16.39ID:QFnswc7I
ちなみにbackapじゃなくてbackupな
981デフォルトの名無しさん
2020/11/23(月) 20:59:12.22ID:bsUMpvvq
>>979
あほ?
982デフォルトの名無しさん
2020/11/24(火) 07:52:34.13ID:4nyZROoo
rsync -avをよく使う
983977
2020/11/24(火) 18:17:20.50ID:xCsiFrs4
大変助かりました!ありがとうございます!!
984デフォルトの名無しさん
2020/11/24(火) 20:21:52.33ID:mbTiTj6s
次スレそろそろ……
985デフォルトの名無しさん
2020/11/24(火) 21:38:15.89ID:mbTiTj6s
言い出しっぺなんで建てました。
http://2chb.net/r/tech/1606221440
986デフォルトの名無しさん
2020/11/24(火) 23:19:57.68ID:EBaS3Lgi
しっぺ
デコピン
馬場チョップ
987デフォルトの名無しさん
2020/11/25(水) 00:18:39.96ID:jf5n46hh
しっぷ
デブちょん
バカちょんぷ
988デフォルトの名無しさん
2020/12/10(木) 10:37:09.61ID:/AM+Meb9
(´・ω・`)
989デフォルトの名無しさん
2020/12/10(木) 14:19:01.84ID:/AM+Meb9
(´・ω・`)
990デフォルトの名無しさん
2020/12/11(金) 08:55:47.30ID:8Z169BTH
うめ!!!
991デフォルトの名無しさん
2020/12/11(金) 08:55:56.82ID:8Z169BTH
うめっ11
992デフォルトの名無しさん
2020/12/11(金) 08:56:03.69ID:8Z169BTH
うめあ
993デフォルトの名無しさん
2020/12/11(金) 08:56:11.79ID:8Z169BTH
うめい
994デフォルトの名無しさん
2020/12/11(金) 08:56:19.82ID:8Z169BTH
うめうえ
995デフォルトの名無しさん
2020/12/11(金) 08:56:26.45ID:8Z169BTH
うめえ
996デフォルトの名無しさん
2020/12/11(金) 08:56:36.33ID:8Z169BTH
うめめt
997デフォルトの名無しさん
2020/12/11(金) 08:56:45.14ID:8Z169BTH
ume
998デフォルトの名無しさん
2020/12/11(金) 08:56:52.52ID:8Z169BTH
umeru
999デフォルトの名無しさん
2020/12/11(金) 08:57:00.61ID:8Z169BTH
uue
1000デフォルトの名無しさん
2020/12/11(金) 08:57:08.73ID:8Z169BTH
ume
ニューススポーツなんでも実況



lud20251101083252ca
このスレへの固定リンク: http://5chb.net/r/tech/1597990675/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「シェルスクリプト総合 その34 YouTube動画>1本 ->画像>1枚 」を見た人も見ています:
シェルスクリプト総合 その36
シェルスクリプト総合 その33
シェルスクリプト総合 その29
シェルスクリプト総合スレ (6)
シェルスクリプトで業務システム開発の被害者スレ
金沢大学「シェルスクリプト言語論」は偽開発技術
スクリプト言語のソース、何MBだとデカイと思う?
埋め立てスクリプトってRubyで作れますか?
【.cmd】 バッチファイルスクリプト %14 【.bat】
【.cmd】 バッチファイルスクリプト %15 【.bat】
【.cmd】 バッチファイルスクリプト %13 【.bat】
PostScript - スタックベース スクリプティング DTP (30)
ヴァロラントとかゲームのリプレイ機能って (11)
【モデル】加藤紗里【元レースクイーン】 ©bbspink.com
徳井のプラモデル
恐竜のプラモデル
動物のプラモデル
食品のプラモデル
シェルブールの雨傘
妖怪のプラモデル
ハロのプラモデル
iPadのモデル選択を手伝っていただけませんか
【悲報】テスラのモデルS、無人運転で木に激突し炎上、搭乗者二人死亡 イーロン怒りの沈黙
HUNTER×HUNTERのグリードアイランド 現代の日本がモデルだった
Twitterのつぶやきをスクレイピングするのは不正?
【MLB】大谷翔平選手所属のエンジェルス、最優秀監督に3回選ばれたジョー・マッドン氏が新監督に就任
【芸能】Zeebraの妻・中林美和は、不倫相手の“ロス育ち”美女モデルを「訴えたい」 [ネギうどん★]
Q. 演劇女子部の舞台をプロデュース!どんな演目で主演は誰?生田「塔の上のビヨンツェル」牧野「ビヨデレラ」
【軍事技術】ロシアで実戦配備間近、スクラムジェット極超音速巡航ミサイル「ツィルコン」の形状と性能の推定 [すらいむ★]
【コロナ】キプロスにてオミクロンとデルタの変異を組み合わせた変異株が発見される😀その名も"デルタクロン"
トリプルデート
【ミリシタ】アイドルマスターミリオンライブ! シアターデイズ Part3265
【ミリシタ】アイドルマスターミリオンライブ! シアターデイズ Part2967
【ミリシタ】アイドルマスター ミリオンライブ! シアターデイズ Part446
アナリシスパターン【マーチン・ファウラー】
【ミリシタ】アイドルマスター ミリオンライブ! シアターデイズ Part48
ルシフェル
プレッツェル
核シェルター
プレッツェル
昔作ったプラモデル
綾速シェルター
壊したプラモデル
ディスクアップ2
プラモデル高過ぎ
デスクトップは単色
エリア88とシェル
カルドアンシェル
8pmシェルター ★5
吉本プラモデル部3
吉本プラモデル部4
吉本プラモデル部9
吉本プラモデル部
吉本プラモデル部2
【国内外】プラスサイズモデルを語ろう
スクラッチむずかしい
NTT docomoドコモウェルカムスマホ割
【蒟蒻畑TV-CM】Karen カレン Part1【モデル】
民主的な言語モデルをみんなで作りたい
スクラム Redux Reactive
GOGOとゲイビとパンツモデル3着目
seleniumでスクレイピング猛者募集中
17:30:44 up 21 days, 8:52, 4 users, load average: 62.48, 54.49, 56.99

in 0.16926598548889 sec @[email protected] on 111307