20/08/21 15:17:55.64 mArnj/tT.net
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
スレリンク(tech板)
2:デフォルトの名無しさん
20/08/21 15:18:16.96 mArnj/tT.net
・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
参考 URLリンク(unix.stackexchange.com)
特定のシェルの専用機能に依存する場合は明示しましょう(特に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に準拠しましょう
仕様 URLリンク(pubs.opengroup.org)
参考 URLリンク(en.wikipedia.org)
・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 URLリンク(heirloom.sourceforge.net)
Schily Bourne Shell: obosh URLリンク(schilytools.sourceforge.net)
歴史的資料 URLリンク(www.in-ulm.de)
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 URLリンク(www.speech-lab.org)
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
aproposやman -kでそれらしい単語による簡単な検索もできます
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題はスレ違い(正規表現スレへ)
・シェル芸はシェルスクリプトとは異なります
・シェルスクリプトのことをシェルってゆうな
3:デフォルトの名無しさん
20/08/21 15:19:27.93 mArnj/tT.net
関連スレ
【Bash】Windows Subsystem for Linux【WSL】8
スレリンク(linux板)
Bashでプログラミング [転載禁止](c)2ch.net
スレリンク(linux板)
シェルスクリプト総合 その28
スレリンク(unix板)
zsh その7
スレリンク(unix板)
【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
スレリンク(unix板)
4:デフォルトの名無しさん
20/08/21 15:25:17.16 MuUIpq44.net
>>1
おっつん
5:デフォルトの名無しさん
20/08/24 18:01:20 xVB6pD3/.net
こんにちは
Macでzshを使っています
フォルダに
memo20200810.txt
memo20200817.txt
memo20200824.txt
のようなファイルがあったとして(週に1つずつ増える)
最新のファイルをechoで見たいとしたらどうするのがいいでしょうか???
6:デフォルトの名無しさん
20/08/24 18:06:26 xVB6pD3/.net
すみませんechoではなくcatでした
別にコマンドは何でもいいので最新のテキストの内容を見る方法を知りたいです
7:デフォルトの名無しさん
20/08/24 18:08:35 eDLiikcy.net
cat "$(/bin/ls *.txt | tail -1)"
8:デフォルトの名無しさん
20/08/24 18:14:51.49 xVB6pD3/.net
ありがとうございました!
9:デフォルトの名無しさん
20/08/24 19:06:43.25 8Ar+AlN+.net
ファイルが大量にあった場合には大きい順でソートして1行目を取り出すみたいに書いた方が速くないか?
10:デフォルトの名無しさん
20/08/24 19:12:31 8Ar+AlN+.net
ただし ls で引数に指定するのはディレクトリ。
11:デフォルトの名無しさん
20/08/25 08:17:19.49 kX+0EEJG.net
>>7
ちなみにlsだけフルパスなのは? lsがエイリアスである可能性を考慮とか?
12:デフォルトの名無しさん
20/08/25 08:57:33.67 c6c4SV8K.net
Unixで「複数のパスを区切る」といえばコロン区切りが普通だと思うんだけど
(例えばPATH,CDPATH,NLSPATHとか)
POSIXの
URLリンク(pubs.opengroup.org)
でも言われている通りコロンが含まれているパスを指定することができない。
もちろん自分で勝手にPOSIXを逸脱して,バックスラッシュでコロンを
エスケープする,みたいなことをしてもいいんだけど,
なるたけ標準に合わせたい。
環境変数で複数のパスを指定するときに,
コロンを含めるようにしているユーティリティの例とか知らない?
13:デフォルトの名無しさん
20/08/25 09:30:33 lHpt9rtN.net
PATHがコロン含められないのにコロン使えるようにするの?
チャレンジャーだなw
Unixはパスに使えない文字を決めたほうが良かったと思うね
MS-DOS/Windowsはちょっと多すぎだけど
14:デフォルトの名無しさん
20/08/25 12:32:57.49 c6c4SV8K.net
>>13
Windowsだとドライブレターにコロンを使ってるから
PATHの区切りは;ですね。
15:デフォルトの名無しさん
20/08/25 14:21:00.18 qvclnJmh.net
>>14
シェルスクリプトには関係なくね?
16:デフォルトの名無しさん
20/08/25 14:22:05.05 qvclnJmh.net
そういや環境変数名に記号とか改行とか使えるの知ってる?w
17:デフォルトの名無しさん
20/08/27 12:47:09.11 Di05+wlc.net
コマンドの戻り値を反転させたい、つまり0のときは非0に、非0のときは0に変えたいんだけど、どうすれば?
set -e状態のスクリプトで、特殊なコマンドを使いたい場合に。
また、makeで使うときにmake専用の記法(-とか@とか)がもしあればそれも。
18:デフォルトの名無しさん
20/08/27 13:37:00.71 Q9F08mvx.net
>>17
if [ $? -eq 0 ]; then
exit 1
else
exit 0
fi
すればいいと思うけど、困ってる点は何?
19:デフォルトの名無しさん
20/08/27 13:56:01.63 Di05+wlc.net
>>18
set -e状態やmakefile中では、コマンドが終了した時点でエラー中断する。
なので、$?を参照するところまで至らない。
20:デフォルトの名無しさん
20/08/27 14:11:33 Di05+wlc.net
ちなみに、makefileの場合は、次のように一行にまとめてしまえばごまかすことはできるが、set -eスクリプトだとやっぱりダメなもよう。
コマンド; test $? -ne 0
21:デフォルトの名無しさん
20/08/27 14:24:40.22 eXOTJM+N.net
!
22:デフォルトの名無しさん
20/08/27 15:13:00 Q9F08mvx.net
>>19
まあ大体そうなんだろうとは思ったが
どういうときにコマンドの戻り値を反転させたいのか気になるけど
処理をmain関数に入れてしまってこれでできるはず
( main ) && return 1
return 0
! ( main ) でも一応良いはずなんだけど ifを使わずにコマンドの頭に
!をつけるだけだと動かないシェルがあった気がする
今回はサブシェルが間に入っているから大丈夫かもだけど
あとは、思いつきだけどこんな感じでも出来る気がする
#!/bin/sh
set -e
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
任意のコマンド
23:デフォルトの名無しさん
20/08/27 15:13:43 Q9F08mvx.net
ちなみにmakefileは知らんw
24:デフォルトの名無しさん
20/08/27 15:30:52.02 aM8Ck5Vz.net
0/1の二択なら1から引けばいいじゃんね
25:デフォルトの名無しさん
20/08/27 15:33:26.32 Q9F08mvx.net
set -eでエラー終了した時は$?が1とは限らん
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
trap 'exit $(($? > 0 ? 0 : 1))' EXIT # 一文字短縮化w
26:デフォルトの名無しさん
20/08/28 15:22:32.20 hYmDe1I0.net
>>21
>>22
ありがとう。
コマンドラインの前に「!」を書けばいいのか。
manページを確認すると、「logical negation」とあったから、こちらの期待どおり。
27:デフォルトの名無しさん
20/08/28 19:08:43.38 0gWrnmZ1.net
trap 'exit $(($? > 0 ? 0 : 1))' EXIT
これいいね
28:デフォルトの名無しさん
20/08/29 14:16:28 fysUNitN.net
MirBSDの記事として書き込まれてたけど
このスレの前々スレくらいでもちょっと議論されてた
「ASCII区切り文字による表形式」についての話
URLリンク(www.mirbsd.org)
29:デフォルトの名無しさん
20/08/29 15:32:00 tFn2MGZe.net
>>28
あー、その記事読んだ。FSってフィールドセパレータだと思っちゃうよねw
たまたま俺は、レコードとフィールドと、ファイル区切りもいるかなぁ?って
考えながら探してたから、お、4つもあるじゃんって感じで気付いたが
30:デフォルトの名無しさん
20/08/29 16:27:42 2GmTjly/.net
>>16
知ってる。
31:デフォルトの名無しさん
20/08/29 16:39:43.91 2GmTjly/.net
>>17
シェルによって書き方違うかも知れないがこんな書き方も可能。
if コマンド [引数 ...]
then
exit 1
else
exit 0
fi
ほぼ >>18 と同じだが、コマンドを if の直後に書けばそのまま戻り値の判定ができる。
こういう書き方もできる。短い場合はこれでも良いかも。(でも後で見て分かり辛くなるかな?)
コマンド [引数 ...] && exit 1 || exit 0
2行に分けても行ける。exit 1 の方が実行されたら下の行には行かないので。
こちらの方が見た目は分かり易いかな。
コマンド [引数 ...] && exit 1
exit 0
32:デフォルトの名無しさん
20/08/29 16:42:17.42 2GmTjly/.net
あ。上の方からゆっくり読んで下まで読まずに書いたら途中で色々と話が進んでいたorz
33:デフォルトの名無しさん
20/08/30 18:43:29 CLO3al/P.net
スレリンク(tech板: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:デフォルトの名無しさん
20/08/31 12:38:22.81 pjiHotrY.net
age
35:デフォルトの名無しさん
20/09/02 11:33:18.91 ifuz91bD.net
シェルスクリプトマスターしてしまったので
シェルスクリプト難しいって言ってる人が
何が難しいのかわからなくなった
シェルスクリプトが難しいんじゃなくて
初心者だから難しいだけなんじゃ?
36:デフォルトの名無しさん
20/09/02 19:16:56 orWCnyGy.net
>>33
age
37:デフォルトの名無しさん
20/09/03 02:22:39 weiyro1+.net
>>33
いくつかやり方があると思うがヒントな
位置パラメータが 1 2 3 4 5 の状態から
1 2 3 4 5 2 1 3 4 5 を作り出すことができれば
あとはshift 5をするだけで
2 1 3 4 5 にすることができる
この問題を解くカギは、終了条件をどうするか?なんだよ
38:デフォルトの名無しさん
20/09/03 02:23:25 ZRdxhfh3.net
1 2 3 4 5 2 1 3 4 5 を作り出すことができれば
スペース入れたつもりだったが見やすくならなかったな
39:デフォルトの名無しさん
20/09/03 21:49:28.77 cH7nhQ1J.net
>>37
Thx
考えてみる
40:デフォルトの名無しさん
20/09/03 23:57:53.85 BJh39Y3Y.net
補足 わかると思うけど
この問題を解くカギは、「ループの」終了条件をどうするか?なんだよ
41:デフォルトの名無しさん
20/09/06 11:36:07.13 r+7yP+3C.net
>>37 >>40
ちなみに >>33 の解答でも
setやshiftを使ったりしてうまいこと
引数処理をしてはいる。
42:デフォルトの名無しさん
20/09/06 14:08:50.79 B3LMKUW8.net
もう自演にしか見えないw
43:デフォルトの名無しさん
20/09/06 20:01:46 7hbRm2sU.net
前スレ止まってると思ったら埋めずに分裂してたんかい
44:デフォルトの名無しさん
20/09/06 20:55:56 racdSqu4.net
>>41
できたかニャ?
45:デフォルトの名無しさん
20/09/07 13:21:21 77IwCGLU.net
>>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:デフォルトの名無しさん
20/09/08 10:49:07 4xL00uJx.net
申し訳ないですが誰か教えてください。
以下のような感じで処理をしたいのですが
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:デフォルトの名無しさん
20/09/08 11:14:25 ymgasiE/.net
>>46
なんとなく
"... `$1`"のあたりが原因なような気がする。
この状態だと引数の実行結果が空白区切りでb.shに渡される。
二番目の処理のエラーは見せられない感じ?
48:デフォルトの名無しさん
20/09/08 11:52:32 4xL00uJx.net
>>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:デフォルトの名無しさん
20/09/08 12:32:53.69 o44vEJ9h.net
`/home/postgres/work/work/test/b.sh ${1}`
` じゃん
su - postgres b.shの引数1はtestです。
をしようとしてるじゃん、
-bash: b.shの引数1はtestです。: そのようなファイルやディレクトリはありません
のメッセージの通りじゃん?
50:デフォルトの名無しさん
20/09/08 13:38:46 wSlh5XRm.net
いったい何がしたいんや?
バッククォートは何のため?
51:デフォルトの名無しさん
20/09/08 13:41:35.55 4xL00uJx.net
>>49
すみませんが、知識が貧しいので
詳しく教えてください・・・
52:デフォルトの名無しさん
20/09/08 13:44:08.25 4xL00uJx.net
>>50
単純にrootでa.shを叩いたら
postgresユーザでb.shが引数付きで呼ばれるようにしたいて感じです。
その処理がいまいちうまく組めないのです・・・
53:デフォルトの名無しさん
20/09/08 13:47:28.39 o44vEJ9h.net
` で囲んだのは、その時点でそれが実行されてその出力に置き換えられる。$() はほぼ等価
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:デフォルトの名無しさん
20/09/08 13:58:43.10 4xL00uJx.net
>>53
出来ました!
su - postgres -c "/home/postgres/work/work/test/b.sh ${1}"
という形でした。
ありがとうございました!
55:デフォルトの名無しさん
20/09/08 14:04:44.26 o44vEJ9h.net
ちゃんとメッセージ見ような。だいたいにおいて正しく問題点が書いてあるんだからw
56:デフォルトの名無しさん
20/09/08 15:16:17 wSlh5XRm.net
>>54
参考までに聞いてみたいが、なぜバッククォートを使おうと思ったのか?
クォートならどれでも同じだと思った?
>>55
バッククォートの機能を知らずに使うと、エラーメッセージを見てもわからんやろな。
57:デフォルトの名無しさん
20/09/08 15:37:36 o44vEJ9h.net
だが、typoでもよくみるメッセージだからな
それを実行しようとしてる、なぜなんだぜぐらいから始めないとな
58:デフォルトの名無しさん
20/09/08 15:59:34.51 7o8rcsWh.net
ブログはクォート関係はよく文字化けする
59:デフォルトの名無しさん
20/09/08 17:39:44 ymgasiE/.net
cshやAndroidにも対応した上で
POSIXに準拠したシェルスクリプトの書き方
(cshの場合はshで起動し直すらしい)
URLリンク(togetter.com)
ここまでやる意義は不明w
60:デフォルトの名無しさん
20/09/08 20:25:26.31 7o8rcsWh.net
>>59
それは読んだことがあるが
どうももやもやしている
どういう環境でそれが必要なのかが書いてないからかな?
Androidといわれてもー
バージョンわからないしー
検証環境用意できないしーw
読んでて思うのはtogetterはツイートをまとめるだけなので
検証内容をまとめるには適してねーわ
61:デフォルトの名無しさん
20/09/09 10:55:40.97 L9ofENhq.net
>>60
同意。
「結局なにが分かったのか」
「解決方法はどうだったのか」
っていう,一番重要な情報もめちゃめちゃ
みにくいところにある。
しかも,まとめ主は
「あとで記事にする」と言っているのに
その後音沙汰がないし
アカウント乗り換えてる模様。
怪しすぎる。
62:デフォルトの名無しさん
20/09/09 11:00:38.40 ShrkmEVF.net
>>61
あとなんかシェルによってシバンの扱いが違うように書いてるように見えるんだけど
シバンを解釈するのてOSだよね?
他の言語から起動することもあるんだから
シェルはOSに丸投げしてるだけ
63:デフォルトの名無しさん
20/09/09 11:05:11.17 ShrkmEVF.net
だれかもうずばっと シバンはちゃんと書きましょう。
shを使うなら #!/bin/sh です。このパスがない環境はもうありません
って言ってくれないかな?w
真偽不明でタイトルだけ残ってて困る
64:デフォルトの名無しさん
20/09/09 11:54:49.47 L9ofENhq.net
>>63
ちょっとつっかかるけど
「このパスがない環境はもうありません」
これも根拠なくないか?
POSIXでは定められていない訳だし,
Solarisだと/bin/shはめちゃめちゃ古い。
POSIX shは/usr/xpg4/bin/shにある。
65:デフォルトの名無しさん
20/09/09 12:45:45.54 SvwSYfrG.net
#!/usr/bin/env sh
66:デフォルトの名無しさん
20/09/09 13:06:06.44 L9ofENhq.net
>>65
より非可搬。
詳細は前スレ参照。
67:デフォルトの名無しさん
20/09/09 17:24:48.34 QPd8QPwA.net
たまたま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:デフォルトの名無しさん
20/09/09 17:25:20.59 QPd8QPwA.net
↑でこれはシバンがないほうがいいかどうかとは全く関係ない話
まぜるなや
69:デフォルトの名無しさん
20/09/09 18:30:55.68 COY4N7BF.net
宇宙刑事シバン
70:デフォルトの名無しさん
20/09/09 18:57:01.22 L9ofENhq.net
>>67
Solarisで
$ getconf PATH
するとPOSIX準拠の命令が優先されるような
設定が返ってくるのな
勉強になった。さんきゅ〜
71:デフォルトの名無しさん
20/09/09 18:59:49.28 L9ofENhq.net
>>67
ちなみに棘でもzshのcommand -p非対応については
触れられてたな。
あきらめてhash使ってたが。
72:デフォルトの名無しさん
20/09/10 02:57:03.19 wmlkkGXD.net
>>71
command -p (もしくはただのcommand)って
シェルで微妙に動作が違うんだよな
ちゃんとまとめてないからきっちりとは言えんけど
例えば dash や ksh だと command -p printf --help は
ビルトインコマンドが実行される
zshだと外部コマンド
zsh で command -p : がエラーになるのはそのせい
73:デフォルトの名無しさん
20/09/10 03:02:01 wmlkkGXD.net
なんで昔の人って
command ・・・ 外部コマンドを実行する
builtin ・・・ ビルトインコマンドを実行する
function ・・・ シェル関数を実行する
みたいに全部作ろうと思わなかったんだろうな?
ユースケースを思いつかなかったということなんかな
74:デフォルトの名無しさん
20/09/10 03:19:24.10 Imxe+iF3.net
zsh
% type command
command is a shell builtin
URLリンク(linux.die.net)
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:デフォルトの名無しさん
20/09/10 04:00:38 MVNZ6OMc.net
zshにしたら今まで使ってたbashがぶっ壊れることって結構ありますか?
76:デフォルトの名無しさん
20/09/10 05:24:13 krA4WMn4.net
bashがぶっ壊れるって何?
両方入れるだけでしょ?
bash消してzsh入れるっていうのならぶっ壊れる可能性が高い
もしくは最初からbashが入ってない(必要ない)システムを使うとかね
例えばdashを採用しているdebian/ubuntuとか
そういうシステムでもdashを消してzshにしたらぶっ壊れる
zshをPOSIXモードで実行すればワンチャンあるかもしれんけど
77:デフォルトの名無しさん
20/09/10 08:23:53.97 gaq4bikN.net
bash用スクリプトはzshで動かすことを考えて作っていない限り動かない
sh用スクリプトであってもzshでは動かない可能性がある
78:デフォルトの名無しさん
20/09/10 09:30:12.19 KfHzrxU8.net
カタリナにしてからmacのターミナル起動するたびに出てくる
`chsh -s /bin/zsh`って実行したらbash使えなくなるよね?
79:デフォルトの名無しさん
20/09/10 13:51:29.36 a+RPoaYl.net
>>73
zshを基準に見ているからそうなる。
80:デフォルトの名無しさん
20/09/10 13:53:05 a+RPoaYl.net
シェルとコマンドの関係はOS依存たぞ
81:デフォルトの名無しさん
20/09/10 14:42:26.26 aa4WTOXX.net
>>79
意味不
>>80
意味不w
82:デフォルトの名無しさん
20/09/10 14:47:37.11 aa4WTOXX.net
>>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:デフォルトの名無しさん
20/09/10 14:49:08.50 aa4WTOXX.net
>>77
> `chsh -s /bin/zsh`って実行したらbash使えなくなるよね?
さっさと実行しろ。どうせシェルスクリプトの類はbashで動く
明示的にしていて無い限りmacOSでは古いbashでスクリプトを動かすことになる
最新のbashの機能も使えない
84:デフォルトの名無しさん
20/09/10 15:45:56.05 uhPbYbU6.net
>>81
コマンドについてはデフォルトのシェル用に作られたものを、別のシェルでは動きを変えて対応している。
だから同じ名前のシェルでもOSが異なれば、動きが変わる。
Linuxのshはbashがsh風に動かしているだけで、いろんなところがshではない。
85:デフォルトの名無しさん
20/09/10 16:58:53.57 aa4WTOXX.net
>>84
それが>>73のレスと何の関係があるの?
どういうつながりでそういう発言をしたのかを聞いてる
86:デフォルトの名無しさん
20/09/10 18:11:40.04 uhPbYbU6.net
>>85
UNIXは体系的に作られたものではないということ。
それぞれが他人によって作られ、それらを統合しているため、一貫性がないのが普通。
細かい規格も存在していないので、コマンド、スクリプトは環境に依存する。
87:デフォルトの名無しさん
20/09/10 18:21:46.36 aa4WTOXX.net
>>86
だからそれが何の関係があるの?
88:デフォルトの名無しさん
20/09/10 19:21:59.58 aD+veWb6.net
>>87
>>73
後出しの思い付きを垂れたからやろ。
89:デフォルトの名無しさん
20/09/10 19:37:41.08 pjCowNAw.net
なんでだろう?→疑問に思�
90:、な! 思考停止か
91:デフォルトの名無しさん
20/09/10 22:48:02.68 QyeHeLUF.net
>>86 って言ってるのに、疑問に思うな思考停止とか読めないやつなんだろな
92:デフォルトの名無しさん
20/09/10 23:37:28.48 a+RPoaYl.net
そもそもUNIXは、たまたまこうなったんじゃなくて、合理的な理由があるんだけど、なんでそれを知ろうとしないの?
UNIXはこういう思想で物を作ってますと宣言してるのに。
93:デフォルトの名無しさん
20/09/11 01:22:31 hZ3Ldf5L.net
いやー、たまたまやろ。
根っこにポリシーはあっても、それ以外はかなりのいきあたりばったり。
94:デフォルトの名無しさん
20/09/11 03:59:13.43 d1DTUP2t.net
>>92
それな。"$1" みたいにダブルクォートでくくらないといけないのは
明らかな仕様の失敗だって言われてるし
他の言語と同じようにPOSIXシェル以前やBourneシェル以前との
互換性をある程度保ちながら改良を続けてきた
必ずしも合理的な理由があるわけじゃないよ。作者がたまたま必要だった
必要と思いつかなかった。それだけだろ
95:デフォルトの名無しさん
20/09/11 08:15:02.44 xA9OFzcD.net
>>93
二重引用符で囲まない場合,
どういう利点があるの?
あとそれを説明した記事とかある?
96:デフォルトの名無しさん
20/09/11 08:49:14.16 5RqPMo1H.net
>>94
> 二重引用符で囲まない場合,
> どういう利点があるの?
ない
やりたいことはevalで代用できる
97:デフォルトの名無しさん
20/09/11 11:23:25.35 oZv/fWa7.net
ぬるぽ
98:デフォルトの名無しさん
20/09/11 11:48:58.51 +wXdjlpn.net
>>94
あるというか、そうしなければならない場合も。
引数がなかったときに、クォートされてると、空文字列になってしまうので、意味が変わる。
make $1
みたいなスクリプトだとクォートしてはいけない。
99:デフォルトの名無しさん
20/09/11 13:38:53.46 2ygR8GWv.net
>>97もクォートしないと駄目。嘘を教えるな
100:デフォルトの名無しさん
20/09/11 13:45:46.53 GM+a9m1V.net
>>98
試してから言え。
簡単に嘘呼ばわりすんな。
101:デフォルトの名無しさん
20/09/11 14:05:53.38 2ygR8GWv.net
>>97
だと makeに "install uninstall" という文字を渡すと
エラーにならずに実行できるから駄目
試さなくてもわかる
102:デフォルトの名無しさん
20/09/11 14:32:38.68 GM+a9m1V.net
>>100
じゃあ引数がないときは?
103:デフォルトの名無しさん
20/09/11 14:36:02.66 FL1BL0eE.net
>>101
引数がないのに$1を参照してたら
bash: $1: 未割り当ての変数です
っていうエラーが出るだろ
アホかw
104:デフォルトの名無しさん
20/09/11 15:18:28.07 GM+a9m1V.net
>>102
でねえわ。
-uを前提にすんな。
クズ。
105:デフォルトの名無しさん
20/09/11 15:22:36.50 ClWA61Ey.net
>>103
お前のようなやつが rm -rf "$path/" とか書いて痛い目見るんだろ
ベストなやり方前提にしろ。ベストなやり方で使えない方法を持ってくるな
106:デフォルトの名無しさん
20/09/11 17:22:23.47 GM+a9m1V.net
>>104
勝手に-uをベストに決めつけんな。クズ。
オプションは使うべきときに使え。クズ。
makeみたいな、引数の有無で挙動が変わるコマンドがあって、考えなしに変数をクォートすりゃあいいってもんじゃない、って話をしてんだよ。クズ。
107:デフォルトの名無しさん
20/09/11 17:26:30.94 rpshaWn6.net
考えなしにクォートしなかったから
バグが増え危険なコードになってんだろが
108:デフォルトの名無しさん
20/09/11 17:39:34.54 cQZtEKri.net
ガッ
109:デフォルトの名無しさん
20/09/11 17:48:50.71 oZv/fWa7.net
make組のスクツか
110:デフォルトの名無しさん
20/09/11 17:53:09.84 JEMEP9MD.net
ガッ
なコード書きたいただの甘えん坊だな ID:GM+a9m1V は
111:デフォルトの名無しさん
20/09/11 18:41:08.82 GM+a9m1V.net
>>108
lsでも同じ。
112:デフォルトの名無しさん
20/09/11 19:09:02.73 JEMEP9MD.net
シェルスクリプト書くうえで、
command
command arg
どちらも(前にチェック無しで)書きたいなんてほとんどないだろうに。ほとんどないのはあげつらってるのはお前だけという点で明らかだな
ls で言えば
ls target
ls
結果が違うんだから目的も違う
ls ''
でエラーになる方が大体の目的にあっているだろうにとしか思えない
113:デフォルトの名無しさん
20/09/11 21:09:13.16 GJYer3nV.net
>>92
だから、そう説明してるんだよ。わざわざ作り直したり、同じようなものを作らないのがUNIXの考え方。
114:デフォルトの名無しさん
20/09/11 21:25:03.10 GM+a9m1V.net
>>111
文盲どもめ。
もともと頻度の話ではない。
クォートしないことにも意義がある、というだけ。
実際、既存コマンドのラッパーみたいなものを書くときなんかでは活用できる。
115:デフォルトの名無しさん
20/09/11 21:30:01.59 xA9OFzcD.net
そこでPlan 9 rcですよ。
引用符の種類が一つしかない。
そしてクソほど使いにくいw
116:デフォルトの名無しさん
20/09/11 22:09:45.47 JEMEP9MD.net
>>113
文盲と他人をあげつらってるくせにの文盲はお前じゃ
>クォートしないことにも意義がある
誰も意義がないなんて言ってないだろが
発端は
>それな。"$1" みたいにダブルクォートでくくらないといけないのは
>明らかな仕様の失敗だって言われてるし
だからな。その流れ中にクォートありだけをあげつらっている(?)のは、クォートしないことにも意義があるじゃなく読まれてもしょうがないな
117:デフォルトの名無しさん
20/09/11 22:26:19.12 JEMEP9MD.net
失敗だって言われてるってその例では「全く」wピンと来ないが、
今時名前の中にスペースが入っているの当たり前で、ほぼ必ずダブルクォートで囲まなければならないのがメンドくさいのは確かだな
逆(単にダブルクォート有無の動作が逆ではなく、ダブルクォート無しでもダブルクォート有りの動作、IFSで分かつなら別の表現)っていうのならわかるが、失敗というほどでもねえなとも思われる
多分、伝わってないのは、そういうことだよw
118:デフォルトの名無しさん
20/09/11 22:45:29.66 GM+a9m1V.net
>>115
違うわ、文盲。
>>94
これ。
119:デフォルトの名無しさん
20/09/11 22:54:33.23 JEMEP9MD.net
>>117
話には流れがあるんだな
で、お前の言うことには言うほどでもないってこともあるだろう、そのしつこく延々と>>94にたいしてって言うのは。自分で案に認めてるように 頻度 はそうないらしいしw
文盲の意味を履き違えてるなwてかよくわかってないだろう
120:デフォルトの名無しさん
20/09/12 00:02:20.83 8+3Td7f1.net
$1と書いてるのに$1がないとみなされるのは
利点ではなく欠点
121:デフォルトの名無しさん
20/09/12 01:27:02.50 cIbo/3Vm.net
>>119
シェルの変数は、ただのテキスト置換なレベルだからな。
今さらそんな理想を言っても始まらん。
122:デフォルトの名無しさん
20/09/12 01:28:06.18 cIbo/3Vm.net
>>118
いや、あきらかに文盲であることがはっきりした。w
123:デフォルトの名無しさん
20/09/12 01:28:55.85 Q/cMHo3Y.net
>>120
> シェルの変数は、ただのテキスト置換なレベルだからな。
それはウソ
124:デフォルトの名無しさん
20/09/12 01:51:34.41 lVvt6egL.net
>>121
流れに関係なく、俺の突然言い出したことを理解できないのは文盲というのなら、お前から見たら文盲なんだろな
文盲という意味(厳密な意味じゃない)を理解してないアレだと俺は思うけどな
っていうことで明らかに終わりだな、その投げやり言い放ちだけのレスでw
125:デフォルトの名無しさん
20/09/12 03:31:42.22 d3hRbJnw.net
仮にお前が賢い人間だとするじゃん
仮に相手が馬鹿な人間だとするじゃん
その場合だと争いにならないわけだから争いになってるということはその過程は合っていなかったわけだね
つまり
お前らは馬鹿だってことさ
126:デフォルトの名無しさん
20/09/12 04:17:42.56 wMTnI8uy.net
>>122
コードをどう解釈するのかはシェル内部の仕様。
変数名を文字列として指定し、文字列で指定された変数の値を参照する仕組みもシェルの仕様。
これは結果的にわかりにくい表現、使ううえで間違いやすい仕様として認識されている。
UNIXはたいしたことない欠点をあとから変更する�
127:カ化はない。 マイクロソフトのように次から次へ新しいものを作っては捨て、作っては捨てということはしない。
128:デフォルトの名無しさん
20/09/12 05:24:39.89 Q/cMHo3Y.net
単に互換性のために修正できないだけ
欠点は欠点。修正できない可哀想
だからPOSIXに新しい言語も追加できない
129:デフォルトの名無しさん
20/09/12 05:39:35.64 Q/cMHo3Y.net
> 変数名を文字列として指定し、文字列で指定された変数の値を参照する仕組み
ウソ
130:デフォルトの名無しさん
20/09/12 05:49:23.00 UoolulYH.net
行為主体(発言主体)の意思ではなく事柄の客観的事実に言及したいのであれば、「ウソ」ではなく「間違い」「事実ではない」といった言葉を用いるべし
131:デフォルトの名無しさん
20/09/12 05:49:59.50 Q/cMHo3Y.net
わかってていってるからウソだろう
132:デフォルトの名無しさん
20/09/12 06:29:49.25 UoolulYH.net
だろうおじさんでしたか...
133:デフォルトの名無しさん
20/09/12 07:07:17.20 uZ7XE8wK.net
本人が否定しなければウソだということ
134:デフォルトの名無しさん
20/09/12 13:09:24.18 wMTnI8uy.net
>>126
そうね。でもそれで大成功をおさめているのがUNIX系。もうすべてがUNIXになりつつある。WindowsのUNIX化もとまらない。
そもそもシェルスクリプトに不満があるのなら、別のスクリプト言語を使えばいい。
135:デフォルトの名無しさん
20/09/12 13:09:48.29 65NtGZ7l.net
仕事でシェルスクリプトを触りはじめたけどすぐに地雷を踏む
136:デフォルトの名無しさん
20/09/12 13:23:20.82 6ll5lvdV.net
macのローカルで作ったシェルをLinuxで動かしたら悲しいことになった
137:デフォルトの名無しさん
20/09/12 14:00:32.63 Py28fth2.net
>>132
> そもそもシェルスクリプトに不満があるのなら、別のスクリプト言語を使えばいい。
/bin/shが他のスクリプト言語になることなんてあるんか?
最小構成で他のスクリプト言語が含まれることなんかあるんか?
POSIXが改定して別のスクリプト言語が使えるようになることなんてあるんか?
現実的にありえない話をしても意味がない
138:デフォルトの名無しさん
20/09/12 14:01:12.85 Py28fth2.net
>>133
まあ初心者さんは何でもそうだよね
>>134
だからPOSIX準拠しろって話だ
139:デフォルトの名無しさん
20/09/12 14:34:38.84 tj7slUn6.net
>>133
例えば?
140:デフォルトの名無しさん
20/09/12 14:58:47.65 cIbo/3Vm.net
>>133
ワナだらけだからね。
しかたないね。
本当に。。。
141:デフォルトの名無しさん
20/09/12 15:02:55.76 WICsaeqa.net
自分が無知なのをごまかすためにわなと言ってる
142:デフォルトの名無しさん
20/09/12 15:05:52.91 cIbo/3Vm.net
>>135
じゃあPOSIXなんか無視すりゃいいんだよ。
自分で好きなのをインストールすれば。
poshが普及したりはしないかな?w
143:デフォルトの名無しさん
20/09/12 15:52:04.79 WICsaeqa.net
自分は良くても他人のイメージを使うときに困るだろ
posh?好きなら自分でイントールしてろw
144:デフォルトの名無しさん
20/09/12 15:58:40.31 WICsaeqa.net
>>140
そのposhとかいうのをmacにインストールしたんだが
$ cd /
posh: cd: too many arguments
で動かないんだがwww
こんなバグソフト普及するわけねーだろwww
145:デフォルトの名無しさん
20/09/12 16:01:00.14 WICsaeqa.net
poshを終了しようとして
$ exit
posh: exit: bad number
www
146:デフォルトの名無しさん
20/09/12 17:12:01.89 cIbo/3Vm.net
>>141
POSIX互換ならなんでもすべて同じ、ではないから、そんな配慮はムダ。
>>142
ツンデレだな?w
まあがんばれ。
147:デフォルトの名無しさん
20/09/12 17:14:06.13 l+/2U9kY.net
URLリンク(hoge1)<)">URLリンク(hoge2URLリンク(hoge1)<)
URLリンク(hoge3)<)URLリンク(hoge2)<)
にしかならないです
どうやればできますか?
148:デフォルトの名無しさん
20/09/12 17:37:28.98 lYGfHMY4.net
>>144
全て同じではないから/bin/shはdashかbashしかありえない
149:デフォルトの名無しさん
20/09/12 17:39:17.54 bxqUAjH/.net
PS > "URLリンク(hoge1)<)">URLリンク(hoge2URLリンク(hoge1)<)
URLリンク(hoge3)
150:デフォルトの名無しさん
20/09/12 18:48:43.31 T2sfpjbr.net
>>145
echo 'URLリンク(hoge1)<)">URLリンク(hoge2>>135
シェルスクリプトで全部やるなんて言われたら、バークレー校出身者もびっくりだわw
152:デフォルトの名無しさん
20/09/12 23:06:50.77 T2sfpjbr.net
URLリンク(mrsh.sh)
A minimal POSIX shell
153:デフォルトの名無しさん
20/09/13 01:46:19.84 adiCUzyX.net
>>150
This project is a work in progress.
はい撤収w
154:デフォルトの名無しさん
20/09/13 01:47:10.49 adiCUzyX.net
>>149
今話をしてるのはシェルスクリプトでやることの話だろ
155:デフォルトの名無しさん
20/09/13 01:59:03.48 Z+zAoG6v.net
よくわからないのが、シェル関数や外部プログラムを作って、呼び出せばいいんじゃないの。
シェルスクリプトの見た目がどうこうという話は不毛だよ。
156:デフォルトの名無しさん
20/09/13 02:53:31.51 adiCUzyX.net
シェルスクリプト(の文法)に不満がある
→別のスクリプト使えばいい。あちこちに頼んで入れてもらえ
馬鹿なの?
どこにシェルスクリプト以外のスクリプト言語が
予めインストールされている世界があるというのか
現実を見たほうがいい
157:デフォルトの名無しさん
20/09/13 04:07:42.04 yf/OpS3O.net
>>154
「予め」とか言ってるのが馬鹿。
自分でインストールしようと思えばする。
でなければしない。
それだけ。
158:デフォルトの名無しさん
20/09/13 06:59:54.51 adiCUzyX.net
だから他人が作ったイメージでは無理だろ
なんでもroot持ってると思うな
159:デフォルトの名無しさん
20/09/13 08:18:10.16 Z+zAoG6v.net
>>154
そのOSの基本シェルがインストールされていないわけがない。
そもそもシェルがなんなのかわかっているのか?
160:デフォルトの名無しさん
20/09/13 08:30:33.36 723dk/Fa.net
>>154
だからシェルスクリプト以外を使えないだろって話をしてる
161:デフォルトの名無しさん
20/09/13 08:30:53.63 723dk/Fa.net
間違え
>>157
だからシェルスクリプト以外を使えないだろって話をしてる
162:デフォルトの名無しさん
20/09/13 10:56:17.02 lPS2EOvv.net
>>147,148
ありがとう
>>147
PS???は初見だったんで調べてみます
>>147
先頭のhttpを除外しようと、頭が固くなってた
163:デフォルトの名無しさん
20/09/13 11:12:17.07 gk+8XYjA.net
>>160
PSはPowerShell、Windowsのやつなので関係ない
調べるだけ時間の無駄
164:デフォルトの名無しさん
20/09/13 11:14:43.75 lvPQUdaN.net
>>151
え,開発途中だったら興味ないの?
165:デフォルトの名無しさん
20/09/13 11:16:03.05 gk+8XYjA.net
開発断念には興味ないよw
166:デフォルトの名無しさん
20/09/13 13:04:46.28 lPS2EOvv.net
>>161
助かりました
167:デフォルトの名無しさん
20/09/13 14:46:18.01 fPwxPBWU.net
>>164
いえいえ
168:デフォルトの名無しさん
20/09/13 17:11:10.48 yiIqPN8F.net
お前じゃない
169:デフォルトの名無しさん
20/09/13 18:32:41.62 lvPQUdaN.net
>>163
This project is a work in progress
170:デフォルトの名無しさん
20/09/13 18:38:01.19 8aNWh6BR.net
>>167
コミット見てみ。もう飽きてる。
171:デフォルトの名無しさん
20/09/13 20:15:09.89 lvPQUdaN.net
>>168
そんなことわかるなんてすごいね。
172:デフォルトの名無しさん
20/09/13 20:50:53.96 Z+zAoG6v.net
>>159
そもそもおまえはUNIX、Linuxをインストールしたことがあるのか?
かなり不思議なことを言っているぞ?
sedやawkは何か説明できる?
173:デフォルトの名無しさん
20/09/13 20:53:16.41 qg7N5frC.net
Ubuntuのインストールを学ぶべき。
174:デフォルトの名無しさん
20/09/13 21:07:19.31 Z+zAoG6v.net
Linuxをインストールしたら、Perlもデフォルトでインストールされることも知らないんだろうな。
そもそもシェルの概念がわかってないと、シェルスクリプトがシェルのスクリプトだとおそらく理解できない。
175:デフォルトの名無しさん
20/09/13 21:18:59.72 Z+zAoG6v.net
別にシェルからすれば、シェルスクリプトではなく、実行ファイル形式を橋渡ししてマシン語でやり取りしてもらってもかまわない。
ただし、UNIXは既存のものの組み合わせでできるのであれば作らないという思想なので、C言語でゴリゴリ作るやつは批難される。
176:デフォルトの名無しさん
20/09/13 22:50:04.20 yf/OpS3O.net
>>172
デフォルトって何?w
Perlはインストールされなくてもおかしくないやろ。
177:デフォルトの名無しさん
20/09/13 22:53:06.96 yf/OpS3O.net
>>173
ゴリゴリつくるヤツがいたから、Gitが存在するんやで!w
Linux業界に「思想」なんかない。
あっても、何かの拍子にコロッと変わる。
あんまり真に受けないほうが。
178:デフォルトの名無しさん
20/09/13 23:54:22.32 w3Y31Eld.net
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
179:デフォルトの名無しさん
20/09/14 00:00:43.38 8/TQSAVT.net
>>175
>>173はUnixの話をしているのに,
Linuxの話にすり替えるべきじゃないな。
「Linuxの思想はない」かも知れないが,
>>173が言っているのはUnix哲学だ。
180:デフォルトの名無しさん
20/09/14 00:39:00.87 LBeWsbwt.net
>>174
おまえは画面まっくらで、いくらキーを打っても何もできない状態で使うのか?
組み込みならわかるんだか。
181:デフォルトの名無しさん
20/09/14 00:43:01.28 LBeWsbwt.net
>>177
あのさ、LinuxはUNIXをPCアーキテクチャのハード用に、初めは個人が作ったものなんだよ。
UNIXの仕様が完全にはわからなくて、Linuxは少し異なるものになってしまった。
だから、LinuxはUNIXでないと説明される。しかし、UNIXの定義はPOSIX程度しかないため、UNIXから見ればLinuxもUNIXに含めてもいいかなあレベルになる。
182:デフォルトの名無しさん
20/09/14 00:46:08.13 LBeWsbwt.net
>>175
あのね、Linuxはレッドハット社がほぼ標準を決めていて、基本的なところが大きく変わることはない。
あなたの言っている部分は枝葉の部分。
183:デフォルトの名無しさん
20/09/14 01:28:26.98 arqUoPz9.net
実際に存在する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
184:デフォルトの名無しさん
20/09/14 01:51:11.45 Cxw6q39C.net
>>177
であれば、ほとんど死んだようなOSの哲学を語ることに現実の意味はない。
考古学者以外は。w
185:デフォルトの名無しさん
20/09/14 01:58:31.80 8w1wBNml.net
Alpine は、5MB しかない。
何も入っていない
それに、Ruby on Rails, Node.js などを入れて使うもの
186:デフォルトの名無しさん
20/09/14 02:31:04.77 Cxw6q39C.net
>>178
サーバー用最小ならおかしくない。
まさかデフォルトって、GUIデスクトップ用のことを言ってないよなあ?
187:デフォルトの名無しさん
20/09/14 02:41:43.07 LBeWsbwt.net
>>184
おまえさ、CUIの画面があるのがあたりまえだと思っているだろ?
CUIそのものがシェルなんだよ。
188:デフォルトの名無しさん
20/09/14 02:43:36.81 LBeWsbwt.net
コンピューターの仕組みを理解していないのにいちいち見当違いのことを書くんじゃない。
189:デフォルトの名無しさん
20/09/14 09:57:03.60 Cxw6q39C.net
>>185
だから何?
>>186
自己紹介乙。w
190:デフォルトの名無しさん
20/09/14 10:40:45.77 S/jhW9z+.net
Perlが入ってないLinuxがあるってこともしらんのか
191:デフォルトの名無しさん
20/09/14 10:41:04.73 S/jhW9z+.net
しかも有名でよく使われてるディストリ
192:デフォルトの名無しさん
20/09/14 17:25:24.86 LBeWsbwt.net
揚げ足取りは久しぶりに
193:デフォルトの名無しさん
20/09/14 17:37:46.13 dr1ZmQsx.net
>>178
どうしてperlかなかったら画面真っ暗で文字が打てないわけ?
194:デフォルトの名無しさん
20/09/15 01:42:38.92 Yms7aROo.net
シェルがなかったらと書いてあるだろ。
しつこいけどシェルは人間とのユーザーインタフェースだよ。
シェルがなければ人間は何もできない。
195:デフォルトの名無しさん
20/09/15 01:43:33.60 Yms7aROo.net
コンピューターは必ずCUIの画面があると思ってしまうのだろうか?
196:デフォルトの名無しさん
20/09/15 03:10:33.47 0TDTec2Q.net
言葉遊びには意味がない。
197:デフォルトの名無しさん
20/09/15 05:57:39.18 +pcRVQQ5.net
シェルはLinuxに必ずインストールされているが
Perlはインストールされてないものが実際に存在し使われている
話はこれだけだろ
198:デフォルトの名無しさん
20/09/15 08:21:54.14 QH5y4eUt.net
>>192
お前コミュ力なさすぎ…
perlがインストールされてなくてもおかしくないってレスに対して、
なんでシェルがなかったら画面真っ暗なんて回答になるんだよ
199:デフォルトの名無しさん
20/09/15 11:38:13.21 Ru6NgLud.net
このスレの人ってどうでもいい事になんでこんなすぐ必死になるの?
200:デフォルトの名無しさん
20/09/15 13:03:13.91 DboEcGlM.net
>>197
そしてなぜ黙ってればいいのに
こんなことを書き込んでしまうの?
201:デフォルトの名無しさん
20/09/15 13:59:53.23 y5g42ZKf.net
真面目で、相手の誤りを修正してあげたいから。
バカで、自分の誤りを認識できないから。
とか、人それぞれに理由があるやろ。
まあ、最大の理由はヒマだから。w
おまえもな。
202:デフォルトの名無しさん
20/09/15 15:48:33.27 Yms7aROo.net
>>196
デフォルトというのはLinuxだったら、bashシェルがインストールされて起動するということ。PerlはLinuxの大半のインストーラが標準設定でインストールしてしまう。
203:デフォルトの名無しさん
20/09/15 16:02:10.84 0TDTec2Q.net
>>200
もとの話とつながってないぞ!w
やりなおし!
204:デフォルトの名無しさん
20/09/15 17:23:49.50 SdJ7XIqb.net
>>200
bashがインストールされてない環境はあるし実際によく使われている
205:デフォルトの名無しさん
20/09/15 18:41:25.99 DboEcGlM.net
これ何の話だっけ。
「シェルが存在せずにPerlなどが存在する環境」
と
「シェルは存在するがPerlは存在しない環境」
の比較?
いや,違うのかもしれないが,
だとするとPerlがどうとかいう話がどこから出てきたのか分からんw
206:デフォルトの名無しさん
20/09/15 18:52:17.80 SdJ7XIqb.net
これだろ?
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も入ってない環境が実際にあってよく使われている
207:デフォルトの名無しさん
20/09/15 19:01:42.43 1jncYIE/.net
極論が好きな人が居るねぇ
root権限でのパッケージ導入を依頼するでもOS/ディストリビューションの選定提案をするでもVMを生やすでもコンテナを建てるでも何でも使える手は使って、自分の手段と環境の中で一番楽な地獄を使うのがいい
手を尽くしてもシェルスクリプト以外使えないか、手を尽くすのがダルいならそりゃそのままシェルスクリプトを使うしかないのはそれはそう
ただ現代においてシェルスクリプトしかスクリプト言語を使えない上に新規導入もできない案件が多数派だし普通だよって言われると本当?って思うしその立場に同情するまである
208:デフォルトの名無しさん
20/09/15 19:14:03.32 0TDTec2Q.net
最近はコンテナ系がはやって、ガチガチの最小構成も現実的やろ。
昔なら、とりあえずあれこれ入ってるし入れるのがふつうだったが。
209:デフォルトの名無しさん
20/09/15 20:21:38.62 DboEcGlM.net
>>206
これ
210:デフォルトの名無しさん
20/09/15 20:36:21.55 Bkm+Im76.net
>>197
1つの道具しか使えない人や1つの道具への依存度の高い人は
その道具の必要性を下げる話や短所を指摘されると
無意識に自分の存在意義を否定された(攻撃された)と感じるので必死になる
特定の道具への精神的依存度の高い人たちが集まってる所ではよくあること
211:デフォルトの名無しさん
20/09/15 20:40:12.28 d9JYg3Jf.net
>>206
そういう時はGoで書いてもいいよね?
212:デフォルトの名無しさん
20/09/15 20:49:49.54 st0X4sID.net
コンテナ向け最小構成ならそれこそコンテナ生やせばいいじゃん…
213:デフォルトの名無しさん
20/09/15 21:05:24.21 0TDTec2Q.net
>>210
PerlコンテナとかPythonコンテナとかつくるの?
粗なの?密なの?w
214:デフォルトの名無しさん
20/09/15 21:06:37.35 0TDTec2Q.net
>>209
C++23で書こう!w
しかし、今さら使いやすそうになってきたな。。。
215:デフォルトの名無しさん
20/09/15 21:22:33.55 bVn8kGX2.net
>>209
ほんの数行で作れるシェルスクリプトの代わりに
goを使うのは手間がかかりすぎる
216:デフォルトの名無しさん
20/09/15 21:23:36.57 bVn8kGX2.net
なんでもPython、なんでもPerl、なんでもGoっていうのは
単に勉強したくないだけなんだろうなって思ってる
217:デフォルトの名無しさん
20/09/15 21:49:15.52 DboEcGlM.net
Goがやろうとしてる「どこでも動く!,依存性最小!」って
それまさにPOSIXシェルが数十年前から実践してることなんだけどねw
218:デフォルトの名無しさん
20/09/15 22:09:41.62 5uVwOM3u.net
YouTube で有名な雑食系エンジニア・KENTA は、
初心者が進む道を、サーバー側言語のRuby → Go を王道としてる
この2つ以外は、出てこない
GUI 系は、画面の手直しなどで、工数がかさむ。
C#, dot.net などのWindows 系は、いらない。
Java などの土方系も、いらない。
Elixir, Rust は、普及へのchasm・溝を超えられなかった
言語よりも、Docker, Kubernetes, AWS などの、サーバー構築・新規案件を重視する。
上流工程・新規案件の方が、価格交渉力が強いから
219:デフォルトの名無しさん
20/09/15 22:27:04.19 5aHfCmvT.net
>>208
なるほどね~
コンプレックスの裏返しみたいなものか
220:デフォルトの名無しさん
20/09/15 23:33:10.49 Tmf/kgmE.net
「シェルスクリプトで書いていたもの」を他の言語に
置き換えることで楽になることなんてないと思っている
※最初からシェルスクリプトで書いてないものの話ではない
221:デフォルトの名無しさん
20/09/16 00:01:35.11 MNPDZagX.net
>>211
単芝生やしてるけどそれこそDockerHubにPythonのOfficial Image普通にあるよ
正直お互い想定してる状況が違い過ぎてるような気もするが
222:デフォルトの名無しさん
20/09/16 00:07:40.59 NJW1Qx1P.net
1. PythonやPerlが入ってない環境がある
2. シェルスクリプトで実現できる
3. PythonやPerl入れればいいじゃん!
4. PythonやPerlで書き直す
5. コードがシェルスクリプトよりも面倒になってる
ほとんどがこれ
シェルスクリプトで実現できることを
他の言語で書いたら余計面倒になる
面倒になるのに他の言語で書こうとするやつは
単に(効率的な)シェルスクリプトを勉強したくないだけ
223:デフォルトの名無しさん
20/09/16 00:18:53.14 fQIibdhg.net
はしゃいでるところに水を差して悪いけどシェルスクリプトに必要な心得ってなんですかね?
素人ながらとりあえず動く物は作れたけどifだらけのクッソ汚いコードなんで修正したい
オプションもgetopts知らずにifと[[でなんとかしてる
bashの基本は押さえたけどLinuxの常識までは網羅できてないんで
224:デフォルトの名無しさん
20/09/16 00:26:37.24 NJW1Qx1P.net
ifだらけだからクソ汚いってことにはならない
もしキレイなコードとやらを知ってるのであれば
それをシェルスクリプトでやればいいだけ
225:デフォルトの名無しさん
20/09/16 00:40:05.89 BkyZoSl2.net
>>219
そりゃああるやろ。w
あるからなんなの?
コンテナのまま実運用で使うの?
226:デフォルトの名無しさん
20/09/16 00:41:31.46 67D9s6fy.net
ほんとに必死だね
よほどコンプレックスが強いんだろうな
シェルスクリプトに固執しないとダメな状況ってそうそうないだろうに
227:デフォルトの名無しさん
20/09/16 00:49:16.66 NJW1Qx1P.net
シェルスクリプトに固執っていうか、シェルスクリプトが最善な場合に
シェルスクリプトを使うってだけだよね
228:デフォルトの名無しさん
20/09/16 01:41:09.00 BkyZoSl2.net
>>224
スレタイが読めないの?w
どっちが固執してるんだか。。。
229:デフォルトの名無しさん
20/09/16 02:44:08.53 0ZaEBr0v.net
>>221
入門UNIXシェルプログラミングという名著を読めばよい。
230:デフォルトの名無しさん
20/09/16 02:45:36.69 0ZaEBr0v.net
>>226
シェルスクリプトと、コマンド、外部プログラムの呼び出しはシェルスクリプトではないからな?
231:デフォルトの名無しさん
20/09/16 02:48:58.69 0ZaEBr0v.net
シェルのスクリプトだから、シェルスクリプトの構文だけの話をすると、このスレは過疎化すると思うぞ。
232:デフォルトの名無しさん
20/09/16 06:01:38.56 NJW1Qx1P.net
だからといって外部コマンドのオプションやら文法の話をしたって意味ない
そういうのはmanページ見ろで終わる話
233:デフォルトの名無しさん
20/09/16 10:12:38.47 +0jueX8G.net
シェルスクリプトにこだわることの是非はともかく,
このスレに住み着くのは理があるわけだけど,
一方でPythonやRubyに固執している人が
このスレに居座りつづける理由が不明。
このスレはシェルスクリプトのことを話すスレなんだから,
Perl,Python,Ruby,Goなんかにこだわってても
ストレス溜まるだけだと思うんだけど……。
しかも不毛だしw
234:デフォルトの名無しさん
20/09/16 10:14:49.79 +0jueX8G.net
>>229
過疎化してなにか問題あるか?
シェルスクリプトの構文で質問がある場合は
ageればいいだけだし,
技術系のスレは勢いがなくても一定数の閲覧があるんだから
それで全く問題ない。
もしかしてなんJとかその辺りと同じような考えで
「過疎化する」=「悪」みたいに捉えちゃってる?
235:デフォルトの名無しさん
20/09/16 10:33:38.10 +Zum6F6u.net
シェルスクリプトとPythonやRubyの使い方は全く違っていて
シェルスクリプトの代替にはならないんだよ
だってPythonやRuby言語がシェルになるかい?
そういうのもあるみたいだけど使わないだろ
lslの代わりにPythonやRubyの関数を使えってことだよ
やるかい?
シェススクリプトはそういう手作業の操作をスクリプトにまとめたもので
「手作業の操作」そのものであることに価値があるんだよ
236:デフォルトの名無しさん
20/09/16 10:34:04.05 +Zum6F6u.net
× lslの代わりにPythonやRubyの関数を使えってことだよ
○ ls -alの代わりに
237:デフォルトの名無しさん
20/09/16 10:40:48.87 2aHyKEnC.net
シェルスクリプトを使わないほうがいいケースや使うべきでないケースを判断出来ないようなやつは技術力が低くて使えない
だからリアルでは軽んじられる
その反動がネット上でのマウンティング合戦
不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術への依存度を下げるといい
238:デフォルトの名無しさん
20/09/16 10:44:06.38 BkyZoSl2.net
>>235
シェルスクリプトを使ったほうがいいケースや使うべきであるケースを判断出来ないようなやつは技術力が低くて使えない
だからリアルでは軽んじられる
その反動がネット上でのマウンティング合戦
不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術への依存度を下げるといい
239:デフォルトの名無しさん
20/09/16 10:52:37.21 MNPDZagX.net
>>223
当然その他個別に必要な要素はDockerfileに書き出すけど、実運用でコンテナを使えるのがDockerHubやオーケストレーションツールを含めた現代コンテナ運用の強みだし革新性だと思ってるよ
なんていうか「シェルスクリプトの文法や仕様が嫌い過ぎてシェルスクリプト数行で済むものにも別の言語を導入して書こうとする1byteもシェルスクリプトを書きたくない人間」に対してシェルスクリプトの可搬性や有用性・必要性を説こうとしてる人と
「シェルスクリプトの文法や仕様でウッとなってしまう嫌な部分が出てくるような複雑さ・処理対象・処理内容の、シェルスクリプトで扱うのにある意味不適な案件がある人間」に対して別の言語や環境で扱うのも選択肢だよって説こうとしてる人が争ってる感
240:デフォルトの名無しさん
20/09/16 10:58:35.61 VpAz8kB7.net
格言「すべての道は、Vagrant に通ず」
Homebrew が、何十年も他の言語で書かれないわけ
つまり、システム構築運用は、できる限りRuby で書く。
シンプルなものに限って、シェルスクリプト
241:デフォルトの名無しさん
20/09/16 11:10:41.03 Uxf3IaQ5.net
このスレのおかげでシェルだけでWebサイト作れました!
RubyやPythonなんて学ぶ価値無いですね
242:デフォルトの名無しさん
20/09/16 11:36:55.73 +0jueX8G.net
>>235 PythonやRubyを使わないほうがいいケースや使うべきでないケースを判断出来ないようなやつは技術力が低くて使えない だからリアルでは軽んじられる その反動がネット上でのマウンティング合戦 不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術へ こうですか? 分かりません!
244:デフォルトの名無しさん
20/09/16 11:38:45.59 +0jueX8G.net
いいかげん下らなくなってきたけど,ともかく
「シェルスクリプトにこだわるな! Python・Rubyを使え!」
という主張は同時に「Python・Rubyにこだわっている」わけなんだから,
いくら「こだわり」をバカにしてマウント取ったところで,
ものすごい勢いで自分に跳ね返ってくるだけっていうねw
245:デフォルトの名無しさん
20/09/16 11:58:19.63 sxVBKKDL.net
え、両方使いなよって主張じゃないの?
そういうレスした本人じゃないから知らんけど
246:デフォルトの名無しさん
20/09/16 12:04:24.33 +Zum6F6u.net
>>237
> 「シェルスクリプトの文法や仕様でウッとなってしまう
それってようするにオブジェクト指向言語にそまってて
関数型言語に抵抗があるやつと一緒なんだわ
パラダイムが同じならそれもわかるけど、シェルスクリプトは異なるパラダイムなので
単に異なるパラダイムのものをつけつけられないだけ
247:デフォルトの名無しさん
20/09/16 12:09:15.41 +Zum6F6u.net
>>238
HomebrewのインストーラーをRubyからBashに書き直しました!
URLリンク(itchyny.hate)
nablog.com/entry/2020/03/03/100000
> 将来的にmacOSデフォルトにRubyやPythonが含まれなくなる (参考リンク)。
こうなる
248:デフォルトの名無しさん
20/09/16 12:39:23.56 BkyZoSl2.net
>>237
シェルスクリプト自体に文句があるのはしゃあない(つーか、ないヤツはおらんやろw)が、全否定したらこのスレではただのあらしでしかない。
さらに、最近の一部のヤツはとくにバカっぽかったからな。
249:デフォルトの名無しさん
20/09/16 12:41:43.36 0bH7BLR9.net
状況に応じて使う道具を変えなよって言われてるのに、PythonやRubyを持ち出して否定したがるのはそれらを使えないことへのコンプレックスが強いから
どの技術でもその限界や短所を理解してないやつが多ければ要注意
250:デフォルトの名無しさん
20/09/16 12:42:57.45 uLph0UBy.net
シェススクリプトへの文句というより
シェルスクリプトが改善されないことに文句がある
何年停滞してるんだ
251:238
20/09/16 12:55:13.00 VpAz8kB7.net
ハーバード大学には、Ruby on Rails の授業がある。
他の言語だと、数年以上遅れて、その間にシェアを取られてしまうから
他の言語では、複雑さが並みじゃないから、簡単に作れない。
かなりの費用・期間が掛かるから、そういうプロジェクトを起ち上げられない
例えば、Ruby以外のプロジェクトで、半年過ぎると取りやめになる。
サーバー側言語では、Ruby, Go しか使われない
252:デフォルトの名無しさん
20/09/16 13:03:02.60 D69h0Ren.net
PythonとかRubyみたいな簡単な言語使ってる雑魚がイキってるのマジで笑える
253:238
20/09/16 13:04:02.76 VpAz8kB7.net
例えば、Ruby の数値リテラルには、_ を含めることができる
1_000_000_000 # 1000000000
0xffff_ffff # 0xffffffff
この機能がないと、下みたいに、コメントを書かないといけないし、確かめるのも大変
1000000000 # 1_000_000_000
Ruby では、こういうように、バグを減らす工夫をしている。
だから、こういうことを思いつく日本人は、smart だって言われる
254:デフォルトの名無しさん
20/09/16 13:11:20.74 MNPDZagX.net
>>243
どこの誰の事を異なるパラダイムを受け付けられない人間としてるのか知らないけど、パラダイムが異なれば当然向き不向きがあるよね?
その上で私は
> シェルスクリプトの文法や仕様でウッとなってしまう嫌な部分が出てくるような複雑さ・処理対象・処理内容の、シェルスクリプトで扱うのにある意味不適な案件
っていう「シェルスクリプトのパラダイムに向かない作業」を話題の前提にしてる人が他の言語を提案してるんじゃないの?って話しかしてないのよ
「何らかの作業をシェルスクリプトのパラダイムに向かない作業だと感じるのは、そいつがパラダイムを受け付けないだけで不向きな作業だからではない」という可能性は間違いなくある
ただ可能性はあるけれど恒真とは思わない
私がシェルスクリプトに向いてない作業はあると思ってるから
もしあなたがシェルスクリプトに向かない作業なんてないと思ってるなら何も言わない
この先は気持ちの問題なので
255:デフォルトの名無しさん
20/09/16 14:56:05.79 +0jueX8G.net
ほとんどの人が「別にPythonでもRubyでもいいけど,
そうじゃない選択肢としてシェルがある」というだけの話をしてるのに
「いまだにシェルを使ってるのは時代遅れ!」
「シェルにこだわるな!Python・Rubyを使え!(こだわり)」
となるのはなぜなのか。
あと一部の奴が「シェル最高!世の中にはこれしか要らない!」みたいな
主張をしてるのも問題。
256:デフォルトの名無しさん
20/09/16 15:03:48.26 BkyZoSl2.net
>>250
PerlにもPythonにもC#にも、別の文字ならC++にもある。
Rubyがえらいわけではない。
もうすでにあたりまえ。
257:デフォルトの名無しさん
20/09/16 15:06:08.22 BkyZoSl2.net
>>252
> あと一部の奴が「シェル最高!世の中にはこれしか要らない!」みたいな
> 主張
どれ?
対比でそう返しただけじゃないの。
258:デフォルトの名無しさん
20/09/16 18:42:23.15 vxZ/INdB.net
技術力のある人はシェルスクリプトの短所や限界をよく理解している
Google曰く
If you are writing a script that is more than 100 lines long,
you should rewrite it in a more structured language now.
URLリンク(google.github.io)
GitLab曰く
we recommend staying away from shell scripts as much as possible.
A language like Ruby or Python is almost always a better choice.
URLリンク(docs.gitlab.com)
259:デフォルトの名無しさん
20/09/16 19:16:11.22 PhvdJ7XH.net
>>255
全てに当てはまることだけど、理由が書いてないコーディング規約はクソ
260:デフォルトの名無しさん
20/09/16 19:59:30.26 YseoXyv4.net
そういやユニケージで作られた例のシステム、ユニケージを捨てて
全部作り直したそうだな
261:デフォルトの名無しさん
20/09/16 20:58:02.47 VpAz8kB7.net
同じディレクトリ内にある、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
262:デフォルトの名無しさん
20/09/16 20:59:44.06 PhvdJ7XH.net
ユニケージはシェルスクリプトじゃないからなぁ
シェルスクリプトを使って作られたCOBOL用関数みたいなもん
ユニケージを使った途端、シェルスクリプト言語から
COBOL言語に開発スタイルが変わる
263:デフォルトの名無しさん
20/09/16 21:09:23.04 PhvdJ7XH.net
シェルスクリプトを始めた頃は
> usp Tukubaiは短期間低コストで企業システムを構築するエンタープライズ向けコマンド群。
> ユニケージ開発手法で利用するコマンド群であり、
URLリンク(uec.usp-lab.com)
に便利なコマンドがあるんじゃないか?って思ったんだよ
実際に見てみたら完全にゴミ
> ctail(1) ファイルの末尾n行を削って出力
例えばこれとかhead -n -10でいいじゃんとか
> count(1) 同じキーの行数をカウント
それをawkでやるのがシェルスクリプトでしょとか
そういうのばかりで、
根底に CSVならぬ、空白区切りのファイル形式を使うという前提があって
そのデータ操作するためのコマンド群でしかないことに気付いた
264:デフォルトの名無しさん
20/09/16 21:16:09.82 PhvdJ7XH.net
ユニケージのコマンドに絶望した後
クソコマンドをまともにしてやろうと思ったが
クソな理由はコマンドではなくデータ形式だったので
どうしようもないというねw
データ形式を空白区切り前提にしなければ、
通常のシェルスクリプトで使うコマンドを使うことになるが
ユニケージのコマンドとは全く異なる仕様になる
直しようがない
265:デフォルトの名無しさん
20/09/16 21:31:53.79 fQIibdhg.net
一日やってるとか暇か
ユニケージを導入して後悔してるとこならあったぞ
URLリンク(www.hands-lab.com)
266:デフォルトの名無しさん
20/09/16 21:36:41.16 66kQJWEh.net
>>255
>a more structured language
↑ここがポイントだろうね
267:デフォルトの名無しさん
20/09/16 22:04:09.41 RIbUq78m.net
ポイント? なんでそう思ったの?
根拠がないから具体的ではないだけ
268:デフォルトの名無しさん
20/09/16 22:36:59.59 +0jueX8G.net
どうでもいいんですけど,
シェルスクリプト以外の話題なら他所でやってもらえません?
もちろんシェルスクリプトの存在論も含めて。
テンプレくらい読んでくれよな〜頼むよ〜
269:デフォルトの名無しさん
20/09/16 22:48:58.53 AIq8Iw+F.net
長々とどうでもいいこと書き綴ってスレ荒らしてたのお前じゃん
270:デフォルトの名無しさん
20/09/16 22:56:04.59 BkyZoSl2.net
>>264
わかる人にはわかる。
わからない人のほうがその理由を内省するべき。
ただ、Bashは関数と連想配列のおかげで、それなりの構造化はできてるな。
逆に言うと、よっぽどややこしいデータ構造を組むのでなければ、シェルスクリプトでも可、ってことか。w
271:デフォルトの名無しさん
20/09/17 05:40:41.40 arhYEtgP.net
>>267
分かる人が理由を書くべきだろ
こういう意味不明なこと言うから信用されないんやで
272:デフォルトの名無しさん
20/09/17 06:53:22.12 7lkKgDUb.net
まあ結局
「シェルスクリプトでおかしな書き方をするやつは
Pythonで書こうがRubyを使って メタプログラミング() をしようが
下手な書き方をすることに変わりない」
ってことよね。
273:デフォルトの名無しさん
20/09/17 07:33:41.05 hnEDQboZ.net
シェルスクリプトから○○言語に変更したってやつは
変更した結果どうなったのか、そのコードを見てみたいんだが
シェルスクリプトで一体何をしていたのか?
274:デフォルトの名無しさん
20/09/17 09:41:38.06 v24DPghR.net
Pythonさえやっておけばシェルスクリプトやる必要ないってことじゃないですかやったー!
275:デフォルトの名無しさん
20/09/17 09:46:01.87 HvzSxf7x.net
Pythonの関数(特別に作られたものではなく標準関数)を使うという前提の
シェルが作れるものなら作ってみて欲しいね
Python以外でもいいけど
276:デフォルトの名無しさん
20/09/17 09:53:36.15 d9Y9RH6u.net
>>268
べつに信用せんでもええで。w
相手にしないだけの話やから。
277:デフォルトの名無しさん
20/09/17 10:32:54.56 chlfrU3v.net
>>273
信用されないというのは「その他大勢の人から」という意味だよ
>>268の内容は俺がお前を信用しないという宣言じゃなくて
その他の人に対して、お前は信用に値しないという宣言をしている
278:デフォルトの名無しさん
20/09/17 10:53:19.56 PVLBY2eY.net
>>267
POSIX準拠じゃないから使えないねw
279:デフォルトの名無しさん
20/09/17 11:04:29.11 d9Y9RH6u.net
>>274
そんな個人的アホ宣言はいらんで。w
「その他大勢の人から」とか少数側が主張しても意味なんかあらへん。
280:デフォルトの名無しさん
20/09/17 11:05:00.12 Ebl/PrBy.net
bash特有の機能を使おうと思った時点で
それはシェルスクリプトでやるべきことじゃないんだろうな
もちろんちゃんとシェルスクリプトのスタイル(関数型)でコーディングするのは大前提
ようするにシェルスクリプトはPOSIX準拠の機能で十分なんだよ
281:デフォルトの名無しさん
20/09/17 11:47:37.44 6qIvJTFZ.net
シェルスクリプトのスタイルは関数型!
さすがシェルスクリプターの考えることは次元が違うぜ
282:デフォルトの名無しさん
20/09/17 12:00:55.65 Ebl/PrBy.net
>>278
URLリンク(qiita.com)
ところで、「流入してくるデータを加工して返却する」「ステートレスな」処理が得意で、
「内部で複雑な状態を持つ必要のある」「ステートフルな」処理が苦手だというのは、
関数型言語にも見られる特徴です。14
そう考えると、シェルスクリプトで凝った事をしようとする人があまり多くないのも頷けます。
「関数型言語は難しい」と言われる事が多いですが、他の言語とパラダイムが違う言語だと思えば、
これまでのプログラミングのパラダイムに囚われたままでは理解が進まないのも当然です。
14. 実際、関数型言語が得意な人にこの説を披露してみた所、
「関数型言語というのはストリーム型のデータを処理するという所が
キモ(なので、解釈としてそう外してはいない)」という感じの感想を頂きました。 ?
283:デフォルトの名無しさん
20/09/17 12:33:52.60 7lkKgDUb.net
沈黙してて草
284:デフォルトの名無しさん
20/09/17 12:45:52.84 NHfa1bvj.net
関数型Elixir は、map・パイプラインばっかり
元の要素を変更しない。
新たに要素を作りながら、変換していく
285:デフォルトの名無しさん
20/09/17 14:19:40.85 HGhOp2pI.net
>>279,280
関数型言語にも見られる特徴があることを関数型とは言わない
知らないなら関数型なんて書かずにパイプでつなぐスタイルとでも書いとけば恥かかずに済んだのにね
286:デフォルトの名無しさん
20/09/17 14:32:15.94 +vk10SUH.net
関数型言語と同様の特徴があるなら、関数型スタイルでいいだろw
関数型言語だって言ってないんだからさぁ
287:デフォルトの名無しさん
20/09/17 14:32:58.85 +vk10SUH.net
> パイプでつなぐスタイルとでも書いとけば恥かかずに済んだのにね
パイプ以外も関数型にみ見られる特徴があるので
関数型スタイルでいいだろw
288:デフォルトの名無しさん
20/09/17 15:23:37.29 d9Y9RH6u.net
>>283
ダメ。
関数型は、結果を呼び出し側に戻すことに意義がある。
処理の流れも記述の形式も、むしろ何も似ていない。
もとの文で「特徴」と言っているが、カテゴリの基準にしていい意味ではない。
シェルスクリプトは、フィルタ型とかパイプライン型とか呼べばいいのでは。
289:デフォルトの名無しさん
20/09/17 16:19:03.20 kAbaS/2M.net
> 関数型は、結果を呼び出し側に戻すことに意義がある。
結果を呼び出し側に戻すなんて、どの言語でも同じじゃん
正しく説明することすらできない程度なら語らないようがいいよ
墓穴掘るだけだから
290:デフォルトの名無しさん
20/09/17 18:06:50.53 7lkKgDUb.net
その理屈で言うなら
C言語は「C言語型」だし
Elixirは「Elixir言語型」だし
F*は「F*言語型」だね。
言語使うたび,パラダイム増えるね♪
291:デフォルトの名無しさん
20/09/17 18:20:43.06 d9Y9RH6u.net
>>286
まともに理解することすらできない程度なんだね。w
シェルスクリプトでは、関数式のように値を返すのではなく、パイプラインのように出力を流していくように考えよう、とリンク先は主張してる。
ステートレスでというほかの主張とあわせて一貫している。
うむ。
これは、たしかにわかりやすいな。
覚えておこう。
292:デフォルトの名無しさん
20/09/17 18:21:07.37 d9Y9RH6u.net
>>287
アホなのかな?
293:デフォルトの名無しさん
20/09/17 18:34:36.35 0NbLDZXP.net
>>288
> シェルスクリプトでは、関数式のように値を返すのではなく、パイプラインのように出力を流していくように考えよう、とリンク先は主張してる。
> ステートレスでというほかの主張とあわせて一貫している。
まさに関数型の動作だねw
初心者でよくいるんだわ。関数を使うのが関数型だって思ってるやつ
お前がそれだな