シェルスクリプト総合 その33at TECH
シェルスクリプト総合 その33 - 暇つぶし2ch1:デフォルトの名無しさん
20/03/23 01:12:30.31 TYte82vJ.net
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その32
スレリンク(tech板)

2:デフォルトの名無しさん
20/03/23 01:13:11.44 TYte82vJ.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/03/23 01:14:49.56 TYte82vJ.net
関連スレ
【Bash】Windows Subsystem for Linux【WSL】7
スレリンク(linux板)
Bashでプログラミング [転載禁止](c)2ch.net
スレリンク(linux板)
シェルスクリプト総合 その28
スレリンク(unix板)
zsh その7
スレリンク(unix板)
【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
スレリンク(unix板)

4:デフォルトの名無しさん
20/03/23 16:11:26 urYmb4Ir.net
タコシェルが一番好きです。なぜならおいしいから。

5:デフォルトの名無しさん
20/03/23 21:51:18 gNyotYW5.net
>>1

ところで早速の質問なんだけど,GNU Bashの履歴展開に関して,
<<. cat |
&#
.
cat
↑このコマンドを実行した時に,履歴展開「!$」の値が「&」になるのと,
<<. cat |
#&
.
cat
↑このコマンドを実行した時に,履歴展開「!$」の値が「|」になるのって,
バグ?仕様?

ちなみに履歴展開「!!」の値は正常(つまり直前のコマンドライン全体に復元される)だし,
ヒアドキュメントの内容が&xやx&だったりした場合は
期待通りの挙動(すなわち最後の引数,この場合は「cat」)になる。

6:デフォルトの名無しさん
20/03/24 02:17:57 cu1HFh78.net
catコマンドがあるのにdogコマンドってないんですか?
気になります。

7:デフォルトの名無しさん
20/03/24 03:33:10 Do7E3fIs.net
tac コマンドがあるよ

8:デフォルトの名無しさん
20/03/24 03:35:04 UBy3gEYu.net
>>6
wachdog

9:デフォルトの名無しさん
20/03/24 03:35:15 UBy3gEYu.net
t忘れた

10:デフォルトの名無しさん
20/03/24 07:10:36.15 fj9Tix3R.net
私は可愛い猫と女の子を見ていたいです。
I want to watch girl with cute cat.

11:デフォルトの名無しさん
20/03/24 11:34:18 0MDW2qu9.net
>>10
短い文なのに英語力の低さがダダ漏れ

12:デフォルトの名無しさん
20/03/26 01:44:53 1qTCm9gt.net
touchやcatみたいに本来とは違う用途で使われるコマンドって他にもあるんだろうか
mvでリネームも最初は不可解だったが

13:デフォルトの名無しさん
20/03/26 08:26:08.90 cRYr3Jpu.net
>>12
どんな使い方だ?

14:デフォルトの名無しさん
20/03/26 09:12:09.34 dMO0q1U3.net
触るだけだったのに作ってしまう
猫だったのに

15:デフォルトの名無しさん
20/03/26 09:30:11 n14BBjo0.net
結合結果を出力するものだが単独ファイルの中身を表示するのに使うとか

16:デフォルトの名無しさん
20/03/26 10:06:49.81 q5TlNmdE.net
touchは?

17:デフォルトの名無しさん
20/03/26 10:13:00.02 dMO0q1U3.net
タッチは触るツールやろ

18:デフォルトの名無しさん
20/03/26 10:36:23 SHCpGffT.net
>>5
これ分かる方いらっしゃいますか。

19:デフォルトの名無しさん
20/03/26 10:50:22 dMO0q1U3.net
履歴展開はインタラクティブシェルが行う
シェルスクリプト実行前の処理だと思ってるので興味がないw

20:デフォルトの名無しさん
20/03/26 17:59:15.96 1qTCm9gt.net
touchは空ファイルも作れるってだけで本来の用途はタイムスタンプの変更でしょ
catだって中身の連結が本来の用途なんだから
だけど実際はそれ以外でよく使うってお話

21:デフォルトの名無しさん
20/03/26 21:46:26 qqZOjzAR.net
その昔は C プログラミングをするとき make で管理していた
make はタイムスタンプを見てどれをコンパイルするか決めていたため
touch で手動でどこからインストールするかを制御してた
touch の使い道はその辺かなあ
新しい file を作るなら
$ cp /dev/null file
の方が私の好みではある

22:デフォルトの名無しさん
20/03/27 02:36:47 0z/Q98b2.net
新しいファイルを作るなら

:>file

コマンド呼び出ししないから最短で最速!

23:デフォルトの名無しさん
20/03/27 09:46:48.87 fxzLTj3v.net
touchに代わるいい名前ないかね?

24:デフォルトの名無しさん
20/03/27 13:51:42.45 dcpdkXkw.net
別に違和感とか全くないな
open(2)で無かったら作るというのがあるし

25:デフォルトの名無しさん
20/03/27 18:04:12 0RYt9ExS.net
「touchがよくない名前」って考えてるあたり,
touchの*本来の*目的が「ファイルを新規作成すること」だと思ってそう。

26:デフォルトの名無しさん
20/03/27 18:18:20 5yAR8wFh.net
$ man touch

TOUCH(1) User Commands TOUCH(1)

NAME
touch - change file timestamps

27:デフォルトの名無しさん
20/03/27 19:25:21.80 zXBqI+VJ.net
唾を付けておくという表現が英語にあれば
spitだろう。

28:デフォルトの名無しさん
20/03/27 20:52:54.59 OSmxssGw.net
お願いtouch touch ここにtouch

29:デフォルトの名無しさん
20/03/28 00:10:04.43 UOUptx4u.net
>>22
>file

30:デフォルトの名無しさん
20/03/28 10:24:50 KzFz1ENP.net
>>29
それPOSIX準拠?

31:デフォルトの名無しさん
20/03/28 13:22:16.30 KzFz1ENP.net
算術展開 $(()) って、代入文が使えるんだな。
ループ廻すときに,i=$((i + 1))っていう増分と$iの値の判定を別々にやってたのが,
$((i += 1))という値を判定するだけで済むとは。

32:デフォルトの名無しさん
20/03/28 14:59:32.82 Bw1KM2rM.net
>>31
POSIXでどこまで決まってるか知らんけど、
ふる~いdashでは失敗する

33:デフォルトの名無しさん
20/03/28 15:06:39.27 Bw1KM2rM.net
あと $((i = 1)) とか $((i++)) とかも使えるよ
注意点としては
i=0
while [ "$i" -lt 100 ]; do は iは0から始まるが
while [ $((i+=)) -lt 100 ]; do だとiは1からになるって所だな

34:デフォルトの名無しさん
20/03/28 15:16:54.38 KzFz1ENP.net
>>33
$((i++))という書き方は,少なくともPOSIXでは保証されてない。
URLリンク(pubs.opengroup.org)

35:デフォルトの名無しさん
20/03/28 16:41:52 55WldctP.net
>>34
本当に?

URLリンク(pubs.opengroup.org)

36:デフォルトの名無しさん
20/03/28 16:49:31 KzFz1ENP.net
>>35
本当です。
2.6.4 Arithmetic Expansion

... The arithmetic expression shall be processed according to the rules given in Arithmetic Precision and Operations,
with the following exceptions:
* The sizeof() operator and the prefix and postfix "++" and "--" operators are not required.

ちゃんと読みましょう。

37:デフォルトの名無しさん
20/03/28 16:58:42 tKpZ/PKG.net
あるけど?

URLリンク(pubs.opengroup.org)

Operation

postfix ++
postfix --

38:デフォルトの名無しさん
20/03/28 16:59:07 jVMyeik2.net
嘘つくのは犯罪やぞ

39:デフォルトの名無しさん
20/03/28 17:35:25.59 KzFz1ENP.net
>>37
++と--はシェルの算術展開では必須じゃないって書かれてあんのが読めねーの?
これだから文盲と会話するのは疲れるんだよ。
バカの一つ覚えみてーに同じURL貼ってさぁ。

40:デフォルトの名無しさん
20/03/28 18:03:30.94 LpzVEuiv.net
馬鹿を相手にお疲れ様ですw

41:デフォルトの名無しさん
20/03/28 20:22:28.93 jP19sx2a.net
>>39
間違っちゃいないが >>35 の書き込みに対する反論を放棄(つまり
反論を潰しに行っていない/無視)して自分の主張を繰り返した点が
指示/説明下手。
結果 >>35 の再プッシュを食らうという互いに後味の悪い手戻りが
発生している。

42:デフォルトの名無しさん
20/03/28 20:43:09 KzFz1ENP.net
ちなみに
$((i+=1))って書き方はPOSIXでは保証されてる……筈だけど,
↑上にも書き込んでた人がいるように,一部シェルで動かないことがあるので使わんほうがいい。

43:デフォルトの名無しさん
20/03/28 21:28:16.71 DvmhhhVM.net
>>41
読めなさすぎだろ。>>36はお前も読めないのかよ

44:デフォルトの名無しさん
20/03/28 21:34:35.34 DvmhhhVM.net
>>34を提示
それに対して>>35を提示
それに対して>>35があろうが>>34で提示したのに書いてあるだろとご丁寧にその部分を抜粋
と読めないのか??なんで>>41なんてしゃしゃり出るのか不思議

45:デフォルトの名無しさん
20/03/29 23:36:16 xy0u8Cju.net
>>43
ここもそうだ
お前は俺の「間違っちゃいないが」を全く無視して「お前も読めてないのかよ」
と返してしまっている
読めてないのはお前じゃないのか?
よくある「自己紹介乙」状態だわ

46:デフォルトの名無しさん
20/03/29 23:56:55 vQZcBwwl.net
>反論を潰しに行っていない/無視)して自分の主張を繰り返した点
>指示/説明下手
ここだよ。お前の主題はここだろうが、そんな前置きではなく

47:デフォルトの名無しさん
20/03/30 00:04:56 E+6h8qU6.net
この会話のならなさはなんとかの一つ覚えのようにURL貼った本人ではないか?w

48:デフォルトの名無しさん
20/03/30 00:11:53 quKNoAsp.net
35 のレスが「本当に?」だけで URL がなかった場合の 36 の返は申し分ないよ

逆に URL だけだった�


49:� 36 のような返しはしなかっただろう? 35 のURL 側を潰さなかった/35 の URLをあたかも無視したような解が下手だと言っている



50:デフォルトの名無しさん
20/03/30 00:25:17 KcLwWOXD.net
なに言ってるのこのシトw

51:デフォルトの名無しさん
20/03/30 00:27:11 quKNoAsp.net
いつもレスバに負けるから ID 変えて書き込む癖が抜けてないようですね

52:デフォルトの名無しさん
20/03/30 00:33:42 KcLwWOXD.net
>>35 のURLは
Arithmetic Precision and Operations

>>34のURL先であるが、読んでいないようなので抜粋してくれた>>36で、
The arithmetic expression shall be processed according to the rules given in >>> Arithmetic Precision and Operations <<<,
with the following exceptions:
>>> * The sizeof() operator and the prefix and postfix "++" and "--" operators are not required. <<<

>>35の疑問疑義を否定している。URLがあろうがなかろうが関係ないなとしか思えない、下の>>>からでも

レスバwなるほどねww

53:デフォルトの名無しさん
20/03/30 00:49:16 quKNoAsp.net
書いてある内容は正しいって一番最初にいってるんでそこ何度説明されてもね
平行線みたいなんでやめるね

54:デフォルトの名無しさん
20/03/30 00:59:54 KcLwWOXD.net
平行線も何もあんた変な論は変な論というデバッグwし終えたてとこかな
>>36はちゃんとフォローしてる、疑問疑義を否定している、>>41なんてイチャモンもいいとこだったということで

てかさ、ちゃんと>>34を読んだらあんなURL張るはずもないもんだな、そこのURL先で Arithmetic Precision and Operations が>>35のURLのリンクじゃん
謎だなw

55:デフォルトの名無しさん
20/03/30 01:46:38 +SXbvp8E.net
ガガイ

56:デフォルトの名無しさん
20/03/30 17:34:28 wadsBXpT.net
エイプリールフールはまだだぞ

57:デフォルトの名無しさん
20/04/02 14:38:12.64 BA8GpIv4.net
Windows 10, WSL, Ubuntu 18.04 に、Ruby のバージョンマネージャーのrbenv を、
rbenv-installer を使ってインストールしたのですが、
URLリンク(github.com)
これの34行目について、
rbenv="$(command -v rbenv ~/.rbenv/bin/rbenv | head -1)"
これを、bash スクリプト内に書いて、スクリプトを実行すると、
xxx="$(command -v rbenv)"
xxx は、~/.rbenv/bin/rbenv とパスが入り、
これを端末で直接実行すると、
xxx は、rbenv となって、パスが入らない!
bash スクリプト内に書いて、それを実行した時と、
端末に直接入力した時では、結果が異なってしまう!

58:デフォルトの名無しさん
20/04/02 14:41:15.78 o0fN+e0O.net
>>56
あのさ、シェルで変数Aに123って代入して
別のプログラム実行したら、変数Aに123が入ってなかった!
みたいな間抜けなレスは要らないから

59:デフォルトの名無しさん
20/04/02 19:04:30.73 mH0OQczo.net
>>56
command -V rbenv
type rbenv
してみ、端末で直接実行時に
最優先実行対象を返すんだからその結果で何もおかしなことはないよ

60:56
20/04/02 21:38:05 BA8GpIv4.net
端末で、command -V rbenv, type rbenv を入力したら、
両方とも、rbenv という関数が表示された!

でも、 which rbenv と入力すると、
~/.rbenv/bin/rbenv と、ちゃんとパスが返ってくるけど

rbenv ()
{
local command;
command="${1:-}";
if [ "$#" -gt 0 ]; then
shift;
fi;
case "$command" in
rehash | shell)
eval "$(rbenv "sh-$command" "$@")"
;;
*)
command rbenv "$command" "$@"
;;
esac
}

61:デフォルトの名無しさん
20/04/02 22:11:52 mH0OQczo.net
which -- locate a program file in the user's path

command - execute a simple command
-v
Write a string to standard output that indicates the pathname or command that will be used by the shell, in the current shell execution environment (see Shell Execution Environment), to invoke command_name, but do not invoke command_name
以下省略するが読め
URLリンク(pubs.opengroup.org)

62:デフォルトの名無しさん
20/04/03 12:01:03 liYJ7DEW.net
ちゃんとリンク,引用までしてあげて親切だなぁ。
黙ってNGすりゃいいのに。

63:デフォルトの名無しさん
20/04/04 12:25:48.39 teSfSC9d.net
URLリンク(pubs.opengroup.org)
ipcsコマンドとかのXSI通信系コマンドを使ったことある人いる?
どういう場面で使ったのか知りたい。

64:デフォルトの名無しさん
20/04/04 13:26:30.10 x+avwAnv.net
IPC使ったことがないとしか思えない。XSIに限らず他のIPCすらも
IPC使ったことがあるならそんなの聞かないだろう

65:デフォルトの名無しさん
20/04/05 08:45:21 UxA0hjaO.net
使ったことがないから聞いてるんだろうに使ったことがないとしか思えないとはとんちかな

66:デフォルトの名無しさん
20/04/05 13:50:07 TlWLT3Mj.net
無知だからしょうがないんだろうがとんちんかんすぎ
シェルスクリプトとは関係ない、IPC使う場合の場面に決まってるだろってことだよ

67:デフォルトの名無しさん
20/04/05 19:18:45.75 hACSBNMn.net
誰かawkの互換性についてまとめてる人いない?
どれだけの実装があって、POSIXにどれだけちゃんと準拠してるとのとか
awkはどのLinuxにも入ってるって前提でいいのか?とか

68:デフォルトの名無しさん
20/04/06 18:02:52 h+IdnJJv.net
まずは隗より始めよ

69:デフォルトの名無しさん
20/04/07 11:20:12 OVrvsyTh.net
脱ケージ活動 ワロタw
(ケージ=鳥かご、おり、捕虜収容所)
まあそうなるよね。シェルスクリプト(笑)

ハンズラボとユニケージのあゆみ
URLリンク(www.hands-lab.com)

突然ですが、ユニケージ開発手法というのものをご存知でしょうか?
→ 詳しくは弊社の以下記事にて説明しております。
ハンズラボが採用しているユニケージという謎テクノロジーについて 第1回

弊社でのユニケージの現在
そんなユニケージですが現在のハンズラボでは技術的負債としての認識が強いです。

ユニケージからの脱却、通称脱ケージ活動は現在社を上げた取り組みの一つです。
負債の解消に向けて、様々な取り組みを実施しています。

70:デフォルトの名無しさん
20/04/07 14:58:20.98 rrWnJIGn.net
>>62
共有メモリとかセマフォとかメッセージキューとかの確認で使ったことあるよ。そういうのを使うプログラムのデバッグ中とか動作確認でな。

71:デフォルトの名無しさん
20/04/07 16:39:21 6BPG1jDR.net
>>68
プレゼンテーションみてみ、主にはシェルスクリプトだからというのではないから
シェルスクリプトはど素人にとっつきやすいのか?

72:デフォルトの名無しさん
20/04/07 16:59:54.57 7MZHT+wD.net
>>70
>主にはシェルスクリプトだからというのではないから
は?

73:デフォルトの名無しさん
20/04/07 17:06:46.66 6BPG1jDR.net
プレゼンテーションみてみ「素人が作った」だから

74:デフォルトの名無しさん
20/04/07 17:21:07 6BPG1jDR.net
juniとかsm1,sm2,sm3,sm4,sm5(5までかな?w)、ハンズラボ内製かと思ったら、ユニケージ元が提供してるヤツかw
ダメすぎに見えるな見えるだろうな、他の言語メンテを考えて開発してるのから見たら

75:デフォルトの名無しさん
20/04/07 17:31:04 6BPG1jDR.net
いや、プレゼンテーションにある、sm2,sm4,sm5だけなのか
1,3が欠番、2/4/5にちょっとは深い意味があるのか?
他でも命名がある意味無茶苦茶だなあ、仕事として使おうとは全く思えない

76:デフォルトの名無しさん
20/04/07 18:06:03.96 OVrvsyTh.net
>>70
Windows以前はMS-DOSが使われていた。
GUIなんてものはなく、コマンドプロンプトと
バッチファイルを触るのがパソコンを使う第一歩だった
これはLinuxにも当てはまる。Linuxを使う第一歩は
シェルスクリプトを触ること。GUIだけならWindowsを使えばいい。
Linuxを使うという第一歩はシェルスクリプトを触ることになる。
その第一歩の知識だけで仕事をした結果。
シェルスクリプトが悪いのではなく
第一歩の知識だけで仕事をした結果
知識を得る努力をせずに、今の知識で努力した結果
結局の所知識不足なので何しても破綻する

77:デフォルトの名無しさん
20/04/07 18:07:43.92 7MZHT+wD.net
日本語不自由すぎやろw
言語関係なく組織の人的負債になるタイプ

78:デフォルトの名無しさん
20/04/07 18:14:36 6BPG1jDR.net
読めない自分を少しは疑ってみような

>>75
>Linuxを使う第一歩はシェルスクリプトを触ること
そんなこと言ってるからLinuxが普及しないんだよw

79:デフォルトの名無しさん
20/04/07 20:33:27 gCNEshtB.net
>>69
ありがとう。

80:デフォルトの名無しさん
20/04/07 22:56:47.46 OVrvsyTh.net
>>77
> そんなこと言ってるからLinuxが普及しないんだよw
そのとおりだと思うが?正確には俺が言ったから普及しないんじゃなくくて
Linuxがそういう状態であるから普及しない。俺はそのことを言っただけ。
俺が言うのをやめたところで、Linuxが改善されないと普及しないよw
更に言うならLinuxを普及させたければ、ソフトウェアするんじゃなくて
いい営業部隊を雇うことだよ。雇う金を出せないなら永遠に無理ってことだけどな。
オープンソースなんだから営業を雇う金なんて集まらないって言うけど、
そもそもオープンソースにしたのは誰かに言われたのではなく
自分で決めたんだろうから、文句言うなって話だがな

81:デフォルトの名無しさん
20/04/07 23:09:11.40 rrWnJIGn.net
LinuxはPCのデスクトップ環境では伸びなかったがその他では使われまくってるよな。
PCと似たような使われ方もするAndroidのベースOSがLinuxだし。もうこれだけでも恐ろしいぐらいの普及率だ。
その他薄型テレビだのネットワーク機器だのそこらじゅうで使われている。

82:デフォルトの名無しさん
20/04/07 23:09:41.77 5NuNjNr6.net
Linuxが普及しないのはオープンソースを言い訳に使うから。byチコ

83:デフォルトの名無しさん
20/04/07 23:33:03 OVrvsyTh.net
Linux(UNIX)のコマンドとバッチファイルのコマンドは
どちらもCLIだがスタイルがぜんぜん違う

例えば、echoを引数無しで実行すると
ECHO は <ON> です。と表示される。

もしバッチファイルのコマンドのスタイルが
Linux(UNIX)に混じったらとても使いづらくなるだろう

一貫性ある形で統一することは重要。Linux(UNIX)は
GUIでこの統一に失敗した。

84:デフォルトの名無しさん
20/04/08 02:12:11 IyPQ81Bn.net
じじいの知識自慢

85:デフォルトの名無しさん
20/04/08 02:25:50 WKxansXY.net
GUI環境を好みで選べるのが良いところじゃん
GNOME
KDE
Xfce
LXQT
MATE
等々

86:デフォルトの名無しさん
20/04/08 09:01:22.17 TEO49enz.net
良いところがあれば、世界で一位になれる。
これはマクドナルドに味で勝負した高級ハンバーガー店が
惨敗するまでの悲しいストーリーである。

87:デフォルトの名無しさん
20/04/08 09:40:49.64 RSqCZ6so.net
オープンソースって一般人からしたら負担だけどな
粗造乱造が基本だから目当ての物を探すのに苦労する
模倣のくせに機能不足だとか洗練されていない外観だとか心当たりあるだろ
何か意見すれば「自分で」で逃げるしさ
呆れられたいのか誇られたいのかはっきりしな
お仕着せのappleと無法地帯のLinuxと両極端なんだよ

88:デフォルトの名無しさん
20/04/08 09:52:21.83 /PQASvbd.net
意訳:俺の好みじゃない。Windowsがいちばん

89:デフォルトの名無しさん
20/04/08 09:58:42.93 gjFvYWAv.net
ただWindowsを使ってて知ってることが多いってだけだな
単にそれで基準がWindows
それ以上手がかかってもダメだし手がかけられないとダメ、
Windowsで知ったことの範囲でWindowsの手順でできなきゃダメってだけ

90:デフォルトの名無しさん
20/04/08 10:46:28 kH2GeAXz.net
Linuxと言うかオープンソース界隈でいやなのは
先駆者が先輩面したり初心者を馬鹿にして
さも自分がすごいんだと言いたげなところかなあ
これと対極をなすのがスマホとかなんだけど
知り合いの若いのにアプリの使い方聞いてみ?
親切に教えてくれるぞ

要するに俺はLinuxを知ってる!
オープンソースを知ってる!
でも誰も褒めてくれないから
新参者がきたら牢名主のように
小言を言い続けてやると思ってそうなところ

91:デフォルトの名無しさん
20/04/08 10:47:16 kH2GeAXz.net
まあ手に入れた数少ないスキルだからしゃーないか

92:デフォルトの名無しさん
20/04/08 12:06:02.73 +6aWDKKq.net
俺にLinuxや他のOSSを教えてくれた人はそんな人じゃなかったな。
懇切丁寧に教育してくれた。
寧ろ大学やらでWindowsやExcelの使い方を指導してた教員のほうが態度が酷かった。
まぁ,どういう人に恵まれるかで,その「教えた対象」の評価すら変わるってのは,ちょっと非論理的だけど,
かく言う俺も,多分上で話した教員のせいで,Microsoft製品を色眼鏡で見てしまうきらいがある。

93:デフォルトの名無しさん
20/04/08 13:15:43.23 oh4YVJIM.net
>>88
> ただWindowsを使ってて知ってることが多いってだけだな
だから営業部隊の話につながる。
使ってもらうにはどうしたらいいか?答えは宣伝だよ。
パソコン屋に置いてもらうネットやテレビで宣伝する。
いずれも金がかかる方法だ。だからオープンソースいう
選択をした時点で積んでいるんだよ。自分で自ら王手されに行った。
いや王手がだめって言ってるんじゃないよ。
相手(利用者)にとってはいい捕虜だから

94:デフォルトの名無しさん
20/04/08 13:57:03 247C/Fba.net
Linuxが普及してない世界線でシェルスクリプト書いてるやつもおるんやなw

95:デフォルトの名無しさん
20/04/08 14:19:48.18 5a3Kp3Hv.net
>>93
世界=俺の知っている世界、または
世界=俺の見たい世界
って奴がたまにいるからね

96:デフォルトの名無しさん
20/04/08 15:36:59.25 WKxansXY.net
変な位置で改行するやつ多いな
みんな同じ環境で見てると思ってるんだろうな

97:デフォルトの名無しさん
20/04/08 15:57:31 oh4YVJIM.net
同じ環境で見てるとは思ってないが、
最低横80文字(笑)ぐらいで見てると思ってる
スマホぐらいだろ?そのスマホで長い文字が読みづらいなら
それはサイトの仕様が悪いだけ

98:デフォルトの名無しさん
20/04/08 16:04:41 snKRM3SL.net
マックをLinuxに加えれば結構シェアが取れていると思うぞ。

99:デフォルトの名無しさん
20/04/08 16:10:53 oh4YVJIM.net
MacでLinux用バイナリがそのまま動かないなら、Linuxとは認められません

100:デフォルトの名無しさん
20/04/08 16:18:00 kuvoBLk0.net
なにを主張したいのか
なにを否定したいのか
シェルスクリプトと全然関係ないことには変わりなさそう

101:デフォルトの名無しさん
20/04/08 16:28:47 WKxansXY.net
サーバーOSシェアはLinuxがダントツだからな
WSLの環境作るのも楽になったしWindowsは単なるコンテナになった

102:デフォルトの名無しさん
20/04/08 17:31:57.45 1eDcIZ82.net
普通にwin上でbashです

103:デフォルトの名無しさん
20/04/08 17:35:44.13 oh4YVJIM.net
> Windowsは単なるコンテナになった
これは「すごいこと」という意味だよね?
Linuxも単なるコンテナになることが出来る。
コンテナになれるというのはモダンなOSの必須条件

104:デフォルトの名無しさん
20/04/08 18:41:56 q66UKRIK.net
無理やりなレス。自覚は無さそうだが

105:デフォルトの名無しさん
20/04/08 18:45:47 oh4YVJIM.net
単なるコンテナになったの意味がわからんだけだよw
クラウドで散々仮想マシンでLinuxが動いてるのに、
Windowsは仮想マシンで動かせばいいとか皮肉の意味で言うやつもいるし。

使いたいものだからこそ、仮想マシンやコンテナで使うわけで
むしろ逆に、Windowsさえ使えれば、ホストはなんでもいいということなんだが

106:デフォルトの名無しさん
20/04/08 18:54:28 WKxansXY.net
でっていう

107:デフォルトの名無しさん
20/04/08 19:17:03 +6aWDKKq.net
なんか事実とか関係なく,
「議論に勝てばいいや」の精神でレスしてる奴がいるな。

いや,もはや議論と呼ぶにも烏滸がましい,口喧嘩か。

いいかげんスレチな話題は収めようぜ?

108:デフォルトの名無しさん
20/04/08 19:29:33 oh4YVJIM.net
>>106
では言い出しっぺからどうぞ

109:デフォルトの名無しさん
20/04/08 19:32:17 +3Ip4bre.net
        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.  終  了 │
     ~′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛

110:デフォルトの名無しさん
20/04/10 00:47:25 na8GHWZ/.net
Apple「全部こちらが用意したものだけ使ってろ改造すんな」
Microsoft「OSだけ売るから自作なり出来合いなり好きにしろ」
Linux「OSはタダでやるからそれ以外は自分でやれ。改造してもこっち頼るな」
unixとは無縁だがあれの扱いも林檎とどっこいでいいんだよな?一般人は用ないし

111:デフォルトの名無しさん
20/04/10 06:21:29 4WnvV4mF.net
× Microsoft「OSだけ売るから、自作なり出来合いなり好きにしろ」
○ Microsoft「OSと開発環境、プラットフォームを提供するから、自作なり出来合いなり好きにしろ」

MSが提供してる開発環境・プラットフォーム
・Visual Studio
・Visual Studio Code
・Azure
・GitHub
・WSL
・Office(マクロ)
・SQL Server
・HyperV

112:デフォルトの名無しさん
20/04/10 09:07:06 Ixv/fgWK.net
small basicが入ってないぞ

113:デフォルトの名無しさん
20/04/10 10:23:40 ES+9souz.net
LinuxというかGNUが提供しているプラットフォーム・開発環境は
>>110
の数倍はありそう(下手すると数十倍?)。

その上で,「こっち頼るな,寄り集まって好きに改造しろ。」だからな。

114:デフォルトの名無しさん
20/04/10 11:04:17 4WnvV4mF.net
>>112
LinuxじゃなくてGNUだろ?
GNUのものはWindowsで何でも使えるようになったぞw

GNU「開発ツールはタダでやるから勝手に使え。OSはまだできてない。」


あとAzureに相当する開発プラットフォームはAppleもLinuxも実現できてない
やってるのはAmazonとGoogleであってLinuxではない
そう考えるとクラウドもOSの機能の一つを完全に実現してるのは
Microsoftだけなんだよな

115:デフォルトの名無しさん
20/04/10 13:07:14.50 CpDDWrVd.net
MS信者がキモい

116:デフォルトの名無しさん
20/04/10 14:26:12.32 5gPd6BaW.net
Linuxって企業だったんだwww

117:デフォルトの名無しさん
20/04/10 14:46:54.18 ES+9souz.net
めっちゃ突っ掛かってきてワロタ

118:デフォルトの名無しさん
20/04/10 16:00:20.83 nukGJGZx.net
>>115
企業じゃないよ。だから金がなくてLinux単体では
使い物にならない。

119:デフォルトの名無しさん
20/04/10 16:04:50.67 vdvhEun4.net
Linux愛好者?って偏屈だよね
俺Linux知ってるけどお前に教えないワラって感じで性格悪い
そのあたりでLinuxが浸透しない原因
そして今日もMSの株価時価総額1位

120:デフォルトの名無しさん
20/04/10 16:26:01.02 pLdRSiLY.net
時価総額の世界第一は違うぞ
第3位のAppleの時価総額はさほど第2位のMicrosoftとさほど変わらんが同等に見てるってことだな、お前は

121:デフォルトの名無しさん
20/04/10 16:32:36.01 ix9xeN7W.net
マイクロソフト信者やパソコンの大先生のよた話はもういいよ

122:デフォルトの名無しさん
20/04/10 16:50:45.63 5/MlN8IX.net
時価総額世界一はマイクロソフトだぞ?
ずっと前に奪還したって聞いたんだがな
URLリンク(stocks.finance.yahoo.co.jp)
1~50件 / 6370件中最終更新日時:2020年4月10日7時40分
順位 名称・ティッカー・市場 取引値 前日比・前日差 時価総額 掲示板
1 マイクロソフト [MSFT] - NASDAQ 165.14 (04/09 17:20) +0.01% (+0.01) 1,256,062,603千
2 アップル [AAPL] - NASDAQ 267.99 (04/09 17:20) +0.72% (+1.92) 1,172,584,885千
3 アマゾン・ドット・コム [AMZN] - NASDAQ 2042.76 (04/09 17:20) -0.01% (-0.24) 1,016,907,263千

123:デフォルトの名無しさん
20/04/10 17:11:16 ix9xeN7W.net
奪還とか信者きめえ。今の世界第一はサウジアラムコな
そんな会社関係ないIT関係でとか言いそうだが
アホみたく無知を晒すなよ、それもキリリっとかでw

124:デフォルトの名無しさん
20/04/10 17:11:29 QxjVipyN.net
スレ違い

125:デフォルトの名無しさん
20/04/10 18:29:49 5gPd6BaW.net
>>117
アスペかよwww

126:デフォルトの名無しさん
20/04/11 10:25:05 md0SvLvZ.net
× Linuxは使いものにならない
○ Linuxを使いこなせない。

だいたい,シェルスクリプトに関して言えばLinuxなんかのUnixが圧倒的に有利なんだから,
少なくともこのスレでWindowsを讃えまくっても無駄骨だと思います(指摘)。

127:デフォルトの名無しさん
20/04/11 22:43:08.40 7reDkQuk.net
自炊できない自分を棚にあげて親のメシマズをあげつらう僕ちゃん

128:デフォルトの名無しさん
20/04/11 23:13:07.29 OL9J6aZ0.net
厳密にいうとシェルスクリプトではないのですが、
wsl や cygwin で
$ mv 'テスト' test
とすると
test\r
というファイルができてしまいます。
test
というファイルにするにはどうすればいいですか?

129:デフォルトの名無しさん
20/04/12 10:26:07 3CnLqbrV.net
>>127
これマジ?

Cygwinは試してないけどWSL (Ubuntu)
ではそんな現象起きないぞ。

130:デフォルトの名無しさん
20/04/12 10:44:52 6aAn44p0.net
マジなわけねーだろw

131:デフォルトの名無しさん
20/04/12 11:29:32 kH7j2wOo.net
ls で見ると

'test'$'\r'

というファイルができています

sed とか tr とかいろいろ試しているのですが、\rが取れ�


132:ワせん。



133:デフォルトの名無しさん
20/04/12 11:55:26.80 qLm4HprE.net
Windowsだから改行がCRLFになってCRがファイル名として処理されたんだろうね
昔そうなった記憶があるようなないような
普通ならエラーになったような気がするんだけどね
試してないけど名前変えたいだけならGUIでログインしてファイルマネージャで修正できると思う
コマンドラインならESC押しながら補完したらコマンドで触れる有効なファイル名になった気がする

134:デフォルトの名無しさん
20/04/12 11:59:52 qLm4HprE.net
CRLFのCRが原因だろうけど
シェルスクリプトなら改行コード変換してみるとか
ターミナルならTeraTerm使うとかでしのいで
根本対処は後にした方がいいと思う
うちはcygwinの環境もうないしWSLも使わんわ
もっぱら仮想環境かラズパイ
昔仕事でcygwin使ってたころ
いざUnixやLinuxの実機に移したら
動かなくて痛い思いした覚えがある

135:デフォルトの名無しさん
20/04/12 12:03:30 KtYGSQjQ.net
stty igncr
mv $'test\r' test

Windows/MS-DOSなテキストファイル(CRLFが改行)に書いて実行したとか

136:デフォルトの名無しさん
20/04/12 12:13:43.08 KtYGSQjQ.net
ふつーーーーのTeminalアプリでは igncr にしちゃうと改行できなくなんのか
WindowsのCommand Promptからbash起動でも同じく改行できなくなんな
>>127は本当にインタラクティブでやったのか?

137:デフォルトの名無しさん
20/04/12 12:39:56.00 KtYGSQjQ.net
送り側(Terminalアプリ)の改行はCR、受け側はCRをLFに変換してなのね
stty のそこらあたりのデフォ(-inlcr -igncr icrnl)からは。WSLでも同じ
stty igncr するとリターンキー叩いても無視されて何もできなくなるが、リターンキーの代わりにControl-JでLF送ればいいだけなのね

138:127
20/04/12 13:16:51.20 kH7j2wOo.net
シェルスクリプトでやっています。
mv "テスト" test
stty igncr
mv '$test'\r' test
というファイルを作って
$ bash ,/file
とやると
cannot execute binary file: Exec format error
とでます。インタラクティブでやらないとできないんでしょうか?

139:デフォルトの名無しさん
20/04/12 13:32:38.13 MICQg9zq.net
そのシェルスクリプトの改行コードがCRLFになってるんじゃないですか、というのと
mv '$test'\r' test
ではなく
mv $'test\r' test
(シングルクオートの位置と数に注意)
$ bash ,/file
ではなく
$ bash ./file
or
$ bash file
で実行しましょう。

140:デフォルトの名無しさん
20/04/12 13:34:49.83 QH8CCQ6c.net
書き間違いなのかも知れないけど、そこは
$ bash ./test
なんじゃ?

141:デフォルトの名無しさん
20/04/12 13:57:36.00 KtYGSQjQ.net
bash ./test
ではないでしょ。ターゲットファイルがtestでスクリプトファイルじゃないんだから
>>137のとおり。>>136はわざとなのか?wなぜそうすると言うw
mv "テスト" test
をなぜ入れる。また、sttyはシェルスクリプトでは(ほとんど)関係ないよ
ちゃんと改行を選択できる(もしくはLFになる)エディタで書けばいいだけの話だし、
mv "テスト" test
だけで test になるだろう
すでにある 'test\r' を test にしたいなら、
mv $'test\r' test
とファイルに書いて実行すればいいだけだな

142:デフォルトの名無しさん
20/04/13 06:27:55.73 bwzJgTJt.net
POSIX準拠度を図るツールとか調べてるサイトないんかね?

143:デフォルトの名無しさん
20/04/14 01:35:34 JSjD3hsj.net
checkbashismとかは?

144:デフォルトの名無しさん
20/04/14 07:04:50.30 ji8PXwtq.net
>>141
あー、シェルスクリプトの準拠度じゃなくて
シェルの準拠度ね。シェルがどれだけ標準を満たした実装かってこと

145:デフォルトの名無しさん
20/04/14 09:49:58 r1rqFhB1.net
調べてどーすんの?

146:デフォルトの名無しさん
20/04/14 10:25:51 ji8PXwtq.net
そうすりゃ自分が間違ってるのかシェルにバグが有るのかわかる


147:だろ?



148:デフォルトの名無しさん
20/04/14 10:42:05.80 GtUt/+gx.net
調べたければ公式のtest suite入手すればいい
URLリンク(get.posixcertified.ieee.org)

149:デフォルトの名無しさん
20/04/16 01:24:21 sXaGgreP.net
ファイルが存在するなら上書き、しないなら新規作成ってtouchじゃなくてviでやるかんじでしょうか?

150:デフォルトの名無しさん
20/04/16 01:56:40.88 phPWx1q3.net
リダイレクトでappendすればいい
$ do_something >> output.txt

151:デフォルトの名無しさん
20/04/16 02:20:53.33 tywb42E3.net
bash なら、-e で、ファイルが存在すれば真
[ -e ファイル名 ]
逆に、ファイルが存在しない時に真
[ ! -e ファイル名 ]

152:デフォルトの名無しさん
20/04/16 09:20:05 pf1fo5EI.net
>>148
これだとうまくいかないことがある

153:デフォルトの名無しさん
20/04/16 11:59:50 TtBh+dOu.net
上書きって言ってるから、単純に

$ do_something > output.txt

で良いんじゃない?

154:デフォルトの名無しさん
20/04/16 12:07:49 DjP17ITj.net
>>150
普通にこれでいいな。

155:デフォルトの名無しさん
20/04/16 13:48:40 pf1fo5EI.net
リダイレクトでファイルを作れるけど
リダイレクトでファイルを削除ってできないんだよな
空にすることはできるけど

156:デフォルトの名無しさん
20/04/16 14:05:57.06 42Nlbk00.net
ファイルオープンとファイル作成は同居してるからな
削除は別物

157:デフォルトの名無しさん
20/04/16 14:19:23.91 pf1fo5EI.net
まあ分かるけど対象性がないと言うか
Aから出力したものをBにコピーする。の発展で
AからBに移動する。みたいな発想はなかったんかな?
そうすれば/dev/nullに移動 = 削除になったと思うんだが
移動も削除も実装w

158:デフォルトの名無しさん
20/04/16 15:26:12 MiKwJnZu.net
消去したいパスのリストをファイルに入れておいて(1行1パス)
cat path_list.txt | xargs rm -rf
みたいなことをしてるのですが、ファイルのパスでワイルドカード(アスタリスク)を
使いたくなりました。

単純にパスのリスト中でアスタリスクを使っても展開されないようですが、
展開させるにはどうするのがいいでしょうか。

159:デフォルトの名無しさん
20/04/16 15:32:46.71 pf1fo5EI.net
>>155
ファイル名に*という文字が含まれている場合はどうするの?

160:デフォルトの名無しさん
20/04/16 15:33:05.34 pf1fo5EI.net
あ、いや、「*」という名前のファイル名があったらどうするの?

161:デフォルトの名無しさん
20/04/16 15:58:03 phPWx1q3.net
$ ls
foo.log bar.log baz.txt qux.txt *.txt input.txt

$ cat input.txt
*.log
'¥*.txt'

$ cat input.txt | xargs -I {} bash -c 'ls {}'
bar.log foo.log
*.txt

162:デフォルトの名無しさん
20/04/16 18:47:06.88 qyR5Ndp0.net
bash -cってどんな時に使うんです?
簡単なシェルスクリプトならググらず書けるようにはなったけどまだよく分からん
関数もaliasも使えない分安全だろうけど使いたい時はどうするの

163:デフォルトの名無しさん
20/04/16 19:26:09.12 pf1fo5EI.net
>>159
その場でbashでコード実行したいときだろ?
今使ってるシェルがzshで、bashだったらどう動くか確認したり
シェルにログインするまでもないなとか

164:デフォルトの名無しさん
20/04/16 19:28:03 pf1fo5EI.net
あと環境汚すようなときにも使うな。
関数定義してなにかしたいけど、後で消したいとか
まあサブシェルとかでもいいんだけど

165:デフォルトの名無しさん
20/04/16 19:39:39 MiKwJnZu.net
>>158
なるほどー。素晴らしい。

166:デフォルトの名無しさん
20/04/16 21:47:35.66 phPWx1q3.net
>>159
interactive shellじゃない場合は
`shopt -s expand_aliases; source <alias設定file>` でエイリアスが展開される
$ cat .alias_and_fn
alias ll='ls -tAhG'
foo() {
echo "foobar!!"
}
$ cat input.txt | xargs -I {} bash -O expand_aliases -c $'source .alias_and_fn;¥n ll {}; foo'
行単位で読み込むときにalias展開するからaliasを設定した後に改行入れてから使う
interactiveなログインシェルとして起動したければ`bash -cli`とか
詳しくはman bashで

167:デフォルトの名無しさん
20/04/16 22:37:57 tywb42E3.net
bash -c は、よく見る

168:56
20/04/17 06:27:50 wSTFfL+S.net
>>56
ようやく、分かりますた!

xxx="$(command -v rbenv)"
と、端末で直接実行すると、xxx は、rbenv となって、パスが付かないのは、
すでに、rbenv という関数が定義されたファイルを読み込んでいるため、
同名のコマンドよりも先に、関数が見つかるから

一方、xxx="$(command -v rbenv)"
と、bash スクリプト内に書いて、スクリプトを実行すると、
xxx は、~/.rbenv/bin/rbenv とパスが付くのは、
rbenv という関数が定義されたファイルを読み込んでいないため、コマンドが見つかるから

シェル関数を使うには、その関数が定義されたファイルを読み込んでから使うのか

169:デフォルトの名無しさん
20/04/17 06:41:06 BxfxWji9.net
Ubuntuでシステムのシェルってdashになってるみたいですけど、確かこれってbashより
速いからって理由でしたっけ?

実際どのぐらい違うか興味があるんですが、どこかにdashとbashのベンチマーク比較した
情報とかあります? (自分でやれって? w)

170:デフォルトの名無しさん
20/04/17 10:38:11 9nBzfuh2.net
>>166
なんの速度かは言わないがあるツールをdashで動かしたら約3秒
bash 5.0 だと 11秒、kshだと6秒でzshだと9秒

171:デフォルトの名無しさん
20/04/17 10:44:00 9nBzfuh2.net
dashを選んでるのは速度もあるしPOSIX準拠ってのもあるだろうね

172:デフォルトの名無しさん
20/04/17 14:54:31 Urb0mH6b.net
関数を一行で書く時エラーで悩んでたけど波括弧ってに空白いるのな
foo(){ echo foo;}
小括弧だと必要ないのに何この初見殺し

173:デフォルトの名無しさん
20/04/17 15:09:03 xgpGiYXu.net
>>169
shellcheck使うといいよ

174:デフォルトの名無しさん
20/04/17 15:40:41 9nBzfuh2.net
>>169
zshは空白無くても動く

zsh -c 'foo(){echo test;};foo
test

dashはコンパイルエラー起こらないと思いつつ、実行するとエラーになり
dash -c 'foo(){echo test;}' # コンパイルエラー起こらない
dash -c 'foo(){echo test;};foo' # でも実行すると怒られる

実は"最後の" ; がおかしい
dash -c 'foo(){echo test;} foo' # これを実行するとこうなる
{echo: not found

エラー内容から、最初の { がおかしい事がわかる。これが正解
dash -c 'foo()echo test;} foo'
test

後ろの } はただのノイズだと思われるので、とってあげても動く
dash -c 'foo()echo test; foo'

↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
でもbashやyashでは動かない

そこから考えると
dash -c 'foo()echo test;foo' は動くということがわかるし、
dash -c 'foo()echo test;}foo' は
foo()echo test +}foo になるので、 }foo: not found と表示されることも理解できる

175:デフォルトの名無しさん
20/04/17 16:52:28 nls2b0po.net
>>171
> dash -c 'foo()echo test; foo'
>
> ↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
> でもbashやyashでは動かない

それは bash や yash の方が正解
関数定義の本体は複合コマンド(compound command)のみ
URLリンク(pubs.opengroup.org)

ちなみに yash や posh はこれに関して、bash よりも分りやすいエラーメッセージを吐く:

% yash -c 'f() echo'
yash -c:1: syntax error: a function body must be a compound command
% posh -c 'f() echo'
posh: f: function definition must use compound command
%

176:デフォルトの名無しさん
20/04/17 17:38:27.88 9nBzfuh2.net
>>172
compound-command は必ずしもグループ化しろとは書かれてないよ
グループ化はオプション
URLリンク(pubs.opengroup.org)

177:デフォルトの名無しさん
20/04/17 19:28:17.38 3FstJMua.net
>>170
これいいですね
解説が丁寧で、初心者の自分には勉強になる

178:デフォルトの名無しさん
20/04/17 19:40:14.03 nls2b0po.net
>>173
何を言いたいのかわからない
>>172のリンク先で関数定義の形式として示されているのは
fname ( )


179: compound-command [io-redirect ...] の一種のみ echo test は compound-command ではないから foo() echo test; などは上記の形式には当てはまらない という話なんだけど 「グループ化」云々ってどっから出てきたの



180:デフォルトの名無しさん
20/04/17 19:56:23 UJSQQO8I.net
え,関数って一行で定義するときは
foo() echo hello;
みたいに波括弧で括る必要ないの?
知らんかった。

181:デフォルトの名無しさん
20/04/17 19:58:37 9nBzfuh2.net
>>175
リンク先見ろ、Grouping Commands って書いてあるだろ

compound-command は
 () や {} でグループ化してもいいし、しなくてもいい
 単一のコマンドも compound-command
 というか、単一のコマンドが compound-command であり
 複数のコマンドをまとめる時に Grouping Commands を使う

182:デフォルトの名無しさん
20/04/17 19:59:07 9nBzfuh2.net
>>176
本来はね。でもbashで対応してないから事実上諦めるしかない。

183:デフォルトの名無しさん
20/04/17 20:01:55 9nBzfuh2.net
>>176
あとグループ化するのに使うのは {} または () なので

foo() { echo hello; } の代わりに
foo() (echo hello) と書いても良い

こっちはbashやyashも対応している。
ただし当然のことながらサブシェルで実行される。

184:デフォルトの名無しさん
20/04/17 20:05:05 9nBzfuh2.net
fname ( ) compound-command [io-redirect ...]
の最後からわかるように

foo() { echo hello; } >/dev/null や
foo() (echo hello) >/dev/null とも書ける

もちろん複数行でこのように書いてもいい
関数が出すエラーを全て捨てる場合とかに使える

foo() {
 echo hello
} 2>/dev/null

185:デフォルトの名無しさん
20/04/17 20:07:41 nls2b0po.net
>>177
> 単一のコマンドも compound-command
> というか、単一のコマンドが compound-command であり

それ初耳だわ
どこに書いてある?

186:デフォルトの名無しさん
20/04/17 20:13:43.55 9nBzfuh2.net
>>181
なんのために Grouping Commands と別に説明してある思ってる?
Grouping Commands を作るための {} または () が必須じゃないから、
「compound-commands の定義は {} または () で始まる」と*書かれてない*んだよ

187:デフォルトの名無しさん
20/04/17 20:56:24 xgpGiYXu.net
2.9.4 Compound Commands
The shell has several programming constructs that are "compound commands", which provide control flow for commands.

Each of these compound commands has a reserved word or control operator at the beginning, and a corresponding terminator reserved word or operator at the end

でその後Compound Commandsとして上げられてるが以下の6つ
- Grouping Commands
- The for Loop
- Case Conditional Construct
- The if Conditional Construct
- The while Loop
- The until Loop

echo helloは開始・終了を示す予約語もなければ、上の6つのどれにも当てはまらないからCompound Commandではない

188:デフォルトの名無しさん
20/04/17 20:57:55 xgpGiYXu.net
foo() if true; then echo "foobar"; fi
↑こういうのはOK

↓shellcheckの解説
POSIX allows the body of a function to be any compound command, e.g. foo() for i; do :; done. Since this usage is rare, ShellCheck intentionally requires the body to be { ..; } (or ( ..; )):
URLリンク(github.com)

189:デフォルトの名無しさん
20/04/17 21:06:47 9nBzfuh2.net
>>183
Compound Commands はその6つって言いたいの?

なら以下の関数定義はPOSIX 準拠ってことだね

foo() for i in a b c; do echo $i; done
foo() case a in a) echo a; esac
foo() if [ a ]; then echo a; fi
foo() while [ $# -gt 0 ]; do echo $1; shift; done

190:デフォルトの名無しさん
20/04/17 22:32:27 UJSQQO8I.net
<<. dash
foo() echo hello
foo
.
hello

たしかにDashだと問題なく定義できるな……。
こんなこと始めて知ったわ。実地で使うかどうかは置いといてw

191:【B:86 W:60 H:84 (C cup) 149 cm age:21】
20/04/17 23:15:40 lZxGXmOk.net
要するに素直に括弧でくるんどけってことやな

192:デフォルトの名無しさん
20/04/18 00:16:26 sxA+eVU/.net
>>166
URLリンク(unix.stackexchange.com)

193:デフォルトの名無しさん
20/04/18 00:28:42 6r7FvQ+k.net
>>169
type { }やると分かるけど{}はシェルの予約語
{}に意味があるから{ この空白も閉じる前の;}もいる
for i inをforiinにできないようなもんで
()はtypeで何も出てこないけどね

194:デフォルトの名無しさん
20/04/18 13:41:33 6HUqz/fc.net
set -eの挙動について教えて下さい!

これを実行したら何も表示されずに終了されました
set -e
foo() {
false
echo foo
}
foo
echo $?

その理由はわかります

質問はfooの中身を一切変えずにset -eの状態で
fooを画面に表示させずに $? (= 1) を
取得する方法はあるのでしょうか?

195:デフォルトの名無しさん
20/04/18 13:58:58.99 iaqzJhUO.net
{ と [ は記号でなく「コマンド」
$ ls -l

$ ls-l
とスペースを入れないと動かなくなる
これと一緒

196:デフォルトの名無しさん
20/04/18 15:04:41 uOWDKjxa.net
>>190
! ret=foo
echo $?

or

if ret=$(foo); then
echo "truthy" "$ret" "$?"
else
echo "falsy" "$ret" "$?"
fi

197:デフォルトの名無しさん
20/04/18 16:16:36.81 6HUqz/fc.net
>>192
> ! ret=foo
なんですか、これ!?って思ったらfoo関数呼び出してないじゃないですかぁ
> if ret=$(foo); then
なるほど、これで取得できるんですねって思って
やったんですけど truthy foo 0 ってでました

198:デフォルトの名無しさん
20/04/18 16:53:00.73 8o9dGOG1.net
>>190
パイプライン (1 つの 単純なコマンド からなるものでもよい)、 括弧で囲まれた サブシェル のコマンド、 ブレース (前述の シェルの文法 を参照) で囲まれたコマンドのリストの一部として
実行されたコマンドの 1 つ が 0 でないステータスで終了した場合、即座に終了します
だから。falseの時点でどうであれメインシェルプロセスがそこで終了、echo fooなんて実行しない、もちろん呼び出し元にも戻らない
>>192は上記に続く文に沿ってのじゃないかなあ。だが、if false; then ... とかの話で、違うだろうな文的にも。わざとなのかわからんけどw
そういう動作を望んで set -e してるのにそういう動作すんなって無理じゃね

199:デフォルトの名無しさん
20/04/18 17:07:44.49 8o9dGOG1.net
bash 限定なら、
export -f foo
bash -c 'foo' && echo $? || echo $?
で、一応動くようではあるな(ちゃんとfooでのステータス値も返る)

200:デフォルトの名無しさん
20/04/18 17:44:44.40 8o9dGOG1.net
>>195
bash -c 'set -e;foo' && echo $? || echo $?
だった。set -e は別に継承されるわけないと後で気づいた
で、>>192のネタ確認してみたらできそうなのね。$()なんて出力結果求めるのにしか使ったことないのでこれでいいのか??と頭ウニだけど
if $(set -e && foo); then echo $?; else echo $?; fi
なんかbash限定でもなく動いてるな(w)

201:デフォルトの名無しさん
20/04/18 17:58:24.37 8o9dGOG1.net
あぁ、$() は正常時はやっぱりダメか。そりゃそうだな(スッキリしたw)
ret=$(foo) のような、なんか工夫すればできそうな気もしないでもないが。そういうことなのね、失礼>>192

202:デフォルトの名無しさん
20/04/18 18:28:05.36 fB7EV6Kq.net
その方針なら
export -f foo;
ret=$(bash -c 'foo; echo $?');
echo $ret;
で良いんじゃね?

203:デフォルトの名無しさん
20/04/18 19:01:48.64 8o9dGOG1.net
出力結果をスクリプトで扱うために欲しいわけじゃないから
$() だと関数も外部コマンドのように別(のメイン)プロセスとして呼べる=bash固有のでなくて使えそうだなあという、ニコイチではなくどっちかの話

204:デフォルトの名無しさん
20/04/18 19:14:49 fB7EV6Kq.net
ああすまん、fooの出力を忘れてた。

205:デフォルトの名無しさん
20/04/18 23:55:48 L3zGDU5z.net
$ $(echo hoge)
hoge: command not found
まあ、当然そうだわな
$ $(exit 12)
$ echo $?
12
へー、コマンドねえぞとお怒りにはならんのか。空行とみなして無かったこと(?)になるのか
echo ' 'とかスペースタブだけ(?)なら許してくれる、: と違いステータスも変わらない

てことで、標準出力に何も出さなければいいのねで、

exec 9>&1
$(set -e; foo >&9) && echo $? || echo $?

でbash以外でも動くことは動く ($() 内ってCommandsでもいいのね)
$()内での set -e はない方がスッキリだが必要ないシェルもあるもあるが必要とするシェルがある

206:デフォルトの名無しさん
20/04/19 00:14:03 u21QryuH.net
例えば、Ruby のバージョンマネージャー・rbenv の、rbenv-installer の冒頭部分は、

#!/bin/bash

# コマンドの終了コードが、0以外なら強制終了する
set -e

homebrew=

# -p : タイプが「file(実行ファイル)」の時のみ実行ファイルの絶対パスを出力する
# (それ以外のタイプの場合は何も出力しない)

type -p brew >/dev/null && homebrew=1

207:デフォルトの名無しさん
20/04/21 09:06:14 h1bS6DJt.net
コマンドってファイルに書くのと実行形式を~/binに置くのとどっちがいいの
関数とエイリアスの違いは分かったけど使い分けできてないな

208:デフォルトの名無しさん
20/04/21 10:50:42 FcWzzI7X.net
/dev/urandomっていうデバイスファイルが,
ほんとにただのファイルとか実は同じ値ばっかり出力するデバイスファイルとか
じゃないってことを保証する方法ってある?

209:デフォルトの名無しさん
20/04/21 13:16:25.79 bkXsrA+q.net
>>203
いろんなところで使いたいコマンドは ~/bin に置いておいて
パスを通しておく。限定的な使い方をするコマンドはそのディレクトリに
置いておくのかな。私はそうしている。

210:デフォルトの名無しさん
20/04/21 15:24:10 Lx1iEb8v.net
>>204
ないよ。
作ろうと思えば/dev/urandomを独自実装のデバイスファイルに置き換えられるんだから。
それっぽい値を返すデバイスファイルを作ろうと思えば作れる
例えばWSL1はWindowsでLinuxカーネルをエミュレートしてるんだから
/dev/urandom とかMSの独自実装のデバイスでしょ?

211:デフォルトの名無しさん
20/04/21 15:27:13.15 Lx1iEb8v.net
>>203
コマンドをファイルに書くって関数のこと?
CLIから呼び出す汎用的なものは~/binで
スクリプト内部で使うだけなら関数にするだけじゃないの?
そしてエイリアスはインタラクティブシェルで使うもの
bashがデフォルトでスクリプトでは無効になってるのはそういう事

212:デフォルトの名無しさん
20/04/21 16:17:24 fQ5b9H0O.net
>スクリプト内部で使うだけなら関数にするだけ
と思い込んでたら、>>56みたいになるぞw
>bashがデフォルトでスクリプトでは無効になってるのはそういう事
まあ、4からか?そういう方がいいだろうと思い変えたのだろうが、--posixでは有効なんだけどな

213:デフォルトの名無しさん
20/04/21 16:29:23 Lx1iEb8v.net
>>56は、rbenvはインタラクティブシェルで使うために
alias使ってるんでしょ?

> まあ、4からか?
ずっと前からやろ?

214:デフォルトの名無しさん
20/04/21 16:30:27 Lx1iEb8v.net
URLリンク(pubs.opengroup.org)
POSIXでも interactive utilities.って言われてるぐらいだしな

215:デフォルトの名無しさん
20/04/21 16:43:50 fQ5b9H0O.net
>>209
残念ながら、3はそうなってない

216:デフォルトの名無しさん
20/04/21 16:47:30.51 fQ5b9H0O.net
>>210
ちゃんと読めよ

217:デフォルトの名無しさん
20/04/21 16:59:29 fQ5b9H0O.net
>>209
>alias使ってるんでしょ?
ああ...これもか...
色々想像するのは勝手だが、なんか色々勝手な想像ばかりで全く調べてないなって感じだぞ

218:デフォルトの名無しさん
20/04/21 17:43:01.90 fQ5b9H0O.net
>>209,211
ああ、すまん
実行できないのは最初からだし、存在さえもしないのは3以降からだな(2では存在はするが実行時エラー)
>まあ、4からか?そういう方がいいだろうと思い変えたのだろうが
の部分は間違い勘違い、すまん

219:デフォルトの名無しさん
20/04/21 18:23:13 Lx1iEb8v.net
>>213
調べるとか何のこと?
スクリプト内部でだけ使うなら関数って言ってるだけなんだけど?

220:56
20/04/21 20:51:03 HADG6GDb.net
anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える。
~/.bashrc に、下の2行を追加するだけで、各言語ごとに追加しないでも良い

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

結局、この追加した、eval で、rbenv という関数を読み込んでいたという落ちw

221:56
20/04/21 20:57:08 HADG6GDb.net
>>165
に書いてます

シェル関数は、その関数が定義されたファイルを読み込んでいれば使えるけど、
読み込んでいなければ使えない

222:デフォルトの名無しさん
20/04/21 21:30:49.10 fQ5b9H0O.net
>>215
想像でそれも自分の言ったことに都合が良いだけで言うなってことだよ
すぐ下のレスに状態を本人が書いてるだろに

223:デフォルトの名無しさん
20/04/21 21:50:22.71 Lx1iEb8v.net
rbenvはaliasをインタラクティブシェルで使ってない
だからといって、
「aliasはインタラクティブシェルで使うもの」を
否定してることにはならんのだが・

224:デフォルトの名無しさん
20/04/21 22:16:38.40 fQ5b9H0O.net
何言ってるの?
>>スクリプト内部で使うだけなら関数にするだけ
>と思い込んでたら、>>56みたいになるぞw
から、想像だけで「alias使ってるんでしょ?」て間違ったこと「いきなり」言い始めたんんだけど。それが関数なんてすぐ下に書いてあるのに、見も/調べもせずに「いきなり」
「スクリプト内部で使う[だけ]なら[関数]」だから、見も/調べもせずに「alias使ってるんでしょ?」なんて間違いを平気で言ったんでしょ?
aliasはインタラクティブシェルで使うものは別件で、そこは関数のことだろに

aliasはインタラクティブシェルで使うものは特に否定はしてないが、POSIXでそう決めてるわけではない。>>210を自分でちゃんと読めば>>210はなんの補強にもなってないのに誤った抽出ってこと

225:デフォルトの名無しさん
20/04/21 22:19:02.65 Lx1iEb8v.net
「スクリプト内部で使うだけなら関数にするだけ」は
否定しないんだね

226:デフォルトの名無しさん
20/04/21 22:21:12.97 fQ5b9H0O.net
読めなさすぎだろう。なんでそうなる??
スクリプト内部で使う[だけ]じゃない[関数]がって例の話なのに
ダメだな読めなさすぎ、今までのでも

227:デフォルトの名無しさん
20/04/22 05:24:59 6NXdX+6G.net
お前らいつも質問者を置き去りにしてんな

228:デフォルトの名無しさん
20/04/22 05:43:01.59 Beb++bH7.net
こいつもう辞めた方がいいな

229:デフォルトの名無しさん
20/04/22 11:23:37 3RYHR+yq.net
質問箱スレじゃないから

230:デフォルトの名無しさん
20/04/22 16:58:30 UC4McjLk.net
枯れた技術のスレで質問禁止にしたら超絶過疎っちゃうよ

231:デフォルトの名無しさん
20/04/22 18:17:22 hVJ7sunP.net
質問禁止という意味じゃない。質問もありだし質問のをネタにしたのもあり
質問箱スレならQ/A以外は雑音にしかならんという意味

232:デフォルトの名無しさん
20/04/23 02:03:46 SDkT6EOl.net
cronの書式を読み取りたいんですがなぜかファイル名が読み取られてしまいます。なぜでしょうか?

233:デフォルトの名無しさん
20/04/23 22:30:55 LOz3K8jb.net
どうやったらそんな挙動になるんだ?
ちょっとどんなコマンド打ったか書いてみて。

234:デフォルトの名無しさん
20/04/23 23:01:10 UKSnHl0c.net
>>228
クォートしてないからでしょ
$ ls
crontab
$ echo * * * * * user-name command to be executed
crontab crontab crontab crontab crontab user-name command to be executed
$ echo "* * * * * user-name command to be executed"
* * * * * user-name command to be executed

235:デフォルトの名無しさん
20/04/24 00:57:40.18 QUI7MWka.net
>>229
setを使ってスペース区切りで分割したらファイル名になりました
>>230
そこから各フィールド


236:ごとに分割するのはどうしたらいいでしょうか?



237:デフォルトの名無しさん
20/04/24 01:55:29 oLSoKJut.net
awk使っちまうなあ
楽チンで

238:デフォルトの名無しさん
20/04/24 02:13:20 QUI7MWka.net
その後シェルスクリプトで処理をしたいんです。

239:デフォルトの名無しさん
20/04/24 02:56:11 F2FblhOM.net
read

240:デフォルトの名無しさん
20/04/24 03:11:08 F2FblhOM.net
cat /etc/crontab | grep -v '^[ \t]*#' | while read m h D M W u c; do [ "$c" != '' ] && echo "$M/$D $W $h:$m ($u) $c"; done
でいいのかな??

しかし、>>228から * のGLOB展開とわかるなんてすげえなw>>230

241:デフォルトの名無しさん
20/04/25 23:21:25 dkVnBOhV.net
他スレで -z とか見て思い出したんだけどさ
[ -z "$str" ] とか [ -n "$str" ] って必要なの?
[ "$str" ] とか [ ! "$str" ] でいいと思うんだけど?

[ "$op" "$str" ] みたいに演算子を変数に入れられるから
機能そのものが不要だとはは思わないけど
通常は [ "$str" ] や [ ! "$str" ] で良くない?
他の言語だとこっちだからわかりやすいし

242:デフォルトの名無しさん
20/04/25 23:31:42.54 gS2ps0hn.net
他の言語だったらそういうのはBooleanでしか使わないという文化な人々も居る
[ -z "$str" ] や [ -n "$str" ] よりも [ "$str" = "" ] とか [ "$str" != "" ] の方が見る機会が多かったな

243:デフォルトの名無しさん
20/04/25 23:59:47 Ey2ZfVC3.net
>>236
先頭にマイナス記号が入らないことが保証されるのならいいのでは?

244:デフォルトの名無しさん
20/04/26 00:16:24 D7tlSM02.net
>>238
関係ないでしょ? その場合こう展開される
[ "-z" ] または [ "-n" ] これはどちらも文字列があるから0

[ ] で囲まれた中身が1個の場合は決してオペレータとして扱わないのだから
どんな文字が来たとしても問題ない。空文字以外は0となる
ついでにいうと [ ] の中身が0個の場合は常に非0

そもそも [ ] (test)のドキュメントに
STRING は -n STRING と等価と書かれている
仕様通り

245:デフォルトの名無しさん
20/04/26 03:16:05.39 cVjuSaki.net
>>239
他の条件とand/orされる場合は?

246:デフォルトの名無しさん
20/04/26 03:17:32.99 D7tlSM02.net
>>240
-a と -o に関しては、shellcheckさんが禁止しております
[ 略 -a 略 ] は使いません。必要なら [ 略 ] && [ 略 ] こうします

247:デフォルトの名無しさん
20/04/26 03:29:33 cVjuSaki.net
>>241
そういう独自ルールを適用するならそれで良いんじゃねえか?
ただ独自ルールだからそれとセットで説明する必要がある。

248:デフォルトの名無しさん
20/04/26 04:31:48.38 D7tlSM02.net
>>242
ん?でもさ -a とか -o 使っても問題ないんじゃね?
[ str -a ] みたいなのってありえないんだからさ[ -a -a ] もないでしょ?
[ -a -a -a ] だと 最初と最後が文字だって一意に識別できるよね?
訂正する
> 他の条件とand/orされる場合は?
他の条件とand/orされる場合 かつ 混乱するようなパターンってありえるの?

249:デフォルトの名無しさん
20/04/26 04:38:33 cVjuSaki.net
>>243
シェルというかtestコマンドってそんなに賢く自動判別してくれるの?
これからそういうシェルまたはtestコマンド作るって話?
だったら作ればいいんじゃね?そうすればそれはそういうものですって言えるしそれでokだ。

250:デフォルトの名無しさん
20/04/26 04:48:09 D7tlSM02.net
なんでシェルをディスってるの?
これからも


251:何も「testは賢く判断するから問題ないよね」って聞いてるだけなのに



252:デフォルトの名無しさん
20/04/26 04:53:55 D7tlSM02.net
>>244
こういえば良いのか?
POSIXで決まっている仕様どおりの正しい動きです。
これから作る必要など全くありません。

253:デフォルトの名無しさん
20/04/26 04:56:34 cVjuSaki.net
あ、そう。じゃあそれでいいんじゃね?

254:デフォルトの名無しさん
20/04/26 06:08:44.50 D7tlSM02.net
何が気に食わないんだろう(笑)

255:デフォルトの名無しさん
20/04/26 14:42:15 v6fWLjMY.net
>>236と同一人物に見えて俺流儀の押し付けしたいのか何をしたいのかだろな

256:デフォルトの名無しさん
20/04/26 15:26:53 D7tlSM02.net
質問者 (POSIX準拠の仕様)これ問題ある?
回答者 問題あるに決まってるだろ。あれとかこれとかどうなんだ?

質問者 それらは問題ないよね?
回答者 お前の流儀を押し付けるな!

なんだこのながれ

257:デフォルトの名無しさん
20/04/26 15:35:41 UR76YMSe.net
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

258:デフォルトの名無しさん
20/04/26 15:55:10.56 D7tlSM02.net
まともなレスじゃなくて、個人たたきに変わったからな
POSIXの仕様にたいして俺流儀とかアホかと

259:デフォルトの名無しさん
20/04/26 18:41:28 vc5fDz2w.net
それ以上POSIXを唱えるな
奴が来る

260:デフォルトの名無しさん
20/04/28 06:27:22.31 6K6MgdzD.net
ハクション大魔王2020は面白いな。

261:デフォルトの名無しさん
20/04/28 08:02:31 w59d7UdO.net
俺流儀に見えたってことはそういうことでは
虚栄心だけじゃ何も学べないよねぇ

262:デフォルトの名無しさん
20/04/28 08:18:47 +3UriQww.net
詠唱




──POSIX準拠



 

263:デフォルトの名無しさん
20/04/28 13:15:20.29 85h3VPXT.net
宗教みたいだぁ…(直喩)

264:デフォルトの名無しさん
20/04/28 15:22:47 7mVXavmj.net
宗教だろ…(直球)

265:デフォルトの名無しさん
20/04/29 07:41:19.70 kBxqIvnv.net
お前のログインシェルをfishにしてやろうか

266:デフォルトの名無しさん
20/04/29 13:35:45 CfLIzb8G.net
>>259
それはPOSIX準拠?

267:デフォルトの名無しさん
20/04/29 14:00:43.59 /shWL0SW.net
ねたにまじれす

268:デフォルトの名無しさん
20/04/29 18:18:56 i2PPpjMR.net
最近Oil ShellのPOSIX準拠度が高まってきて嬉しい(これはネタじゃない)

269:
20/04/29 18:42:59.47 cpDKktQc.net
メジャーリリースしたら教えてくれ

270:デフォルトの名無しさん
20/04/29 20:13:29 sus1L+2H.net
POSIX準拠度が完全になったら教えてくれ

271:デフォルトの名無しさん
20/04/29 20:20:23 sus1L+2H.net
ち、やっぱり set -uしたときにecho ${A+x} ってしたら
fatal: Undefined variableで落ちるじゃねーか
変数が定義されているかのチェックすら出来ねぇ

272:デフォルトの名無しさん
20/04/29 21:34:42 i2PPpjMR.net
>>265
そこでissueですよ

273:デフォルトの名無しさん
20/04/29 22:37:55 sus1L+2H.net
>>266
立て逃げしていいならするけどさ、やり取りが面倒なんだよ
この程度ででるぐらいなら他にも問題たくさんありそうだしstar多いんだろ?誰かが頑張ってくれ
それかすでにあるんじゃねーの?OilShellがどこまで本気なのか知らんが、
まがりなりにもPOSIX準拠を名乗りたいのなら絶対には対応していないといけない
基本機能だからな。(変数定義確認方法のFAQレベルだぞこれは)
俺にとっては数あるシェルの一つでしかないし別件で忙しい

274:デフォルトの名無しさん
20/04/30 01:05:28 vtgsH/Bs.net
POSIX互換を謳う俺々シェルの利点って何なの
わざわざ作るってことは今のPOSIXは不備あるのか

275:デフォルトの名無しさん
20/04/30 07:55:57 zGlfElvR.net
>>268
今のPOSIXに不満があったらPOSIX準拠シェルなんて面倒なもの態々作らんと思うが

276:デフォルトの名無しさん
20/04/30 08:09:08 04alJDEx.net
作るだろ?不満があったから新しいものを作る
ただし移行パスがなければ移行しないのでその方法を提供する
よくある話だ

277:デフォルトの名無しさん
20/04/30 12:57:36 pg6Bqb9H.net
>>270
たぶん「準拠(互換)」の部分について言及してるんだと思うよ

278:デフォルトの名無しさん
20/04/30 13:50:18 VId2oWrE.net
>>268
URLリンク(www.oilshell.org)

279:デフォルトの名無しさん
20/04/30 14:31:36 gdZAiUWY.net
学術の巨大掲示板群 - アルファ・ラボ
URLリンク(x0000.net)<)

280:デフォルトの名無しさん
20/04/30 14:31:36 gdZAiUWY.net
学術の巨大掲示板群 - アルファ・ラボ
URLリンク(x0000.net)<)

281:【B:82 W:57 H:87 (C cup) 145 cm age:61】
20/04/30 19:17:59 0zEyt4z5.net
POSIX
抽出レス数:28

スレタイに【POSIX】いれとけよ

282:デフォルトの名無しさん
20/04/30 19:21:05 04alJDEx.net
>>275

>>1より
> ・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
>  特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)

別にPOSIX前提ではない。レス28は多くない。

283:デフォルトの名無しさん
20/04/30 22:12:56 3EPTcWkg.net
posix準拠かどうかを自動判定するプログラムはないのか?

284:デフォルトの名無しさん
20/04/30 23:40:43 02DTS3d8.net
bash、tcsh、zsh などが持つ拡張機能を持たない
POSIX互換を目指す
シェルで -n で

285:デフォルトの名無しさん
20/05/01 12:30:18 xBnPf/RZ.net
>>275
例えば「C言語総合スレ」で
ISO CやJIS Cについての言及が全スレ中10%を占めていたとして,
そのことを以って「スレタイにISO C/JIS Cって明記しろ!」って言う?
いや,言うんだったら,まあ何も言えないけどw

286:デフォルトの名無しさん
20/05/02 20:03:36.40 nkPqW+JC.net
Oil Shellって実装されてない機能、実は多くね?
どこかに一覧でまとめられてるじゃないかと思うんだけど
わかってて未実装なのか、忘れられてるのかどっちなのかわからん
報告すべきなのかどうか

287:デフォルトの名無しさん
20/05/02 20:48:38 SU0LbRTW.net
「実は」っていうか,べつに公式に「POSIXに完全準拠しました!」なんて言ってねーしなw
ただ単に着実に対応していっているっていう,それだけ。
まだ1.0ですらないし,何を期待してるんだか。

288:デフォルトの名無しさん
20/05/02 21:33:14 nkPqW+JC.net
うん。聞いてるのは実装されてる機能されてない機能の一覧ね
いい加減、反論されたクソって!思い込んで突っ走るのはやめようよw

289:デフォルトの名無しさん
20/05/02 23:08:33 DEDgA8fc.net
自己紹介

290:デフォルトの名無しさん
20/05/03 12:41:29 Wpoh2lE+.net
Oilシェルに親でも殺されたのかな?(すっとぼけ)

291:デフォルトの名無しさん
20/05/10 09:42:55.33 6Ru0pW3/.net
fishって、プロセスの生成にposix_spawnを使っていると小耳に挟んだのですが。
macOS等、fork+execよりposix_spawnが速いとされる環境


292:で使ったらbashとかより 性能が上がったりしますかね?



293:デフォルトの名無しさん
20/05/10 14:52:33.76 wRm6C2I1.net
1ミリ秒ぐらいは上がるんじゃね?w

294:デフォルトの名無しさん
20/05/10 18:28:06.52 pQcD5gxy.net
では、赤射プロセスをもう一度見てみよう

295:デフォルトの名無しさん
20/05/10 19:18:19 JqEAqVcs.net
>>285
URLリンク(github.com)

296:デフォルトの名無しさん
20/05/12 11:30:45 yS+J4vmz.net
このシェルスクリプトは面白そう
URLリンク(www.youtube.com)

297:デフォルトの名無しさん
20/05/12 16:59:01 nXypJmVq.net
実装が面白いのかと思ったら発想が面白かった

298:デフォルトの名無しさん
20/05/17 19:47:04 bpPzQdIC.net
URLリンク(qiita.com)

> マジックナンバー
> マジックナンバーとは#!のこと
> シェルスクリプトの先頭には以下のようになんのシェルを使うのか明示する。

ばーかw

299:デフォルトの名無しさん
20/05/17 20:43:06.44 09BYrd1c.net
直接コメントしたれよ。こんなとこで晒すとか、くれえやつだな
マジックナンバー自体も知らないアレだとしても

300:デフォルトの名無しさん
20/05/17 22:09:25 cPnKiUuj.net
URLリンク(en.wikipedia.org)(Unix)#Magic_number

301:デフォルトの名無しさん
20/05/18 02:25:23 JVwpbSde.net
本人登場かという勘違いぶり

302:デフォルトの名無しさん
20/05/18 11:03:25.77 hn05DOX5.net
なんつーか、入門書としては酷いから訂正しなけれいけないレベルだが
初心者が頑張って背伸びして書いていると思うと
それをめためたに指摘しまくるのも大人げないんだよなw
と思ったが、
URLリンク(qiita.com)
> 入門UNIXシェルプログラミングを読んでいく
これ、本当にこの本に書いてあることなのか?
この本有名だし流石にそんなことはないと思うが
> % echo $SHELL #今使ってるシェルの種類を調べる
真っ先から間違いなんだよな。
× 今使ってるシェル
○ ログイン時のシェル。例えばbashでログインしてzshに切り替えてもbashのまま

303:デフォルトの名無しさん
20/05/18 11:05:59.88 vvPis8aR.net
>>291
これがマジックナンバーじゃなかったら何をもって ELF と
シェルスクリプトの違いを判断している?

304:デフォルトの名無しさん
20/05/18 11:28:16 vvPis8aR.net
>>295
ログインシェル zsh にしてログイン後に bash 起動したらSHELL が /bin/bash にならね?
「ログイン時のシェル」は流石に「今使っているシェル」よりなお悪いんじゃねーか?

各シェルの SHELL (と shell) の変数に関する実装によるが比較的今使っているシェル
だろうとみなせる、というほうがまだ正しそう。

文脈を見てみないとわからんが、プログラム側からシェルの種類を気にするのは
ssh-agent みたいに環境変数のセットのためのコードを返すプログラムぐらいだから
csh 系ユーザかどうかだけ拾うって程度で、細かい所までは考えてないでしょ

305:デフォルトの名無しさん
20/05/18 13:55:14 hn05DOX5.net
>>296
マジックナンバーが#!(シバン)のことなのではなく
#!(シバン)がマジックナンバー(の一種)

違いわかる?


「アルコールとは酒のこと」といえば間違ってると理解できる?

あ、これアルコールって書いてある!つまり酒だな!ごくごくって
(消毒用)アルコールを飲むやつはアホだろう

306:デフォルトの名無しさん
20/05/18 13:56:31 hn05DOX5.net
>>297
> bash 起動したらSHELL が /bin/bash にならね?

なぜそこで質問する?
わからないなら自分で調べろよ。

質問じゃないなら「/bin/bash にな�


307:驕vとお前は言うはずだ



308:デフォルトの名無しさん
20/05/18 14:00:45 hn05DOX5.net
ま、お前程度のやつが知らなくても仕方ないな。
有名な某あのツールですら十数年?も前から
間違っててバグ放置されてるんだしなw
(最近報告されてたんで俺は報告しないよ)

309:デフォルトの名無しさん
20/05/18 14:22:20 vvPis8aR.net
>>300
顔真っ赤にして連騰して恥ずかしい奴だなぁ、お前
まずはログイン時のシェルにならない事について謝れよ

310:デフォルトの名無しさん
20/05/18 14:41:09 hn05DOX5.net
>>301
URLリンク(pubs.opengroup.org)

SHELL
This variable shall represent a pathname of the user's preferred command language interpreter.

はい、ばーか確定(笑)

311:デフォルトの名無しさん
20/05/18 16:08:58.16 vvPis8aR.net
>>302
すまん、リンク先は見ていないがその英文で「ログイン時のシェル」と解釈
しているのかな、君は?
恥ずかしい書き込みしたんだから ID ぐらい変えて書き込もうよ。

312:デフォルトの名無しさん
20/05/18 21:10:24.48 hn05DOX5.net
>>303
じゃあ逆にお前は何を持って自分が正しいと思ってんだ?
なにか一つでも証拠を持ってこれるのか?
これないだろ?先に言っておく。俺はあと一つ証拠を持ってこれる。
謝るなら今のうちだぞ?

313:デフォルトの名無しさん
20/05/19 00:50:38 4QqJ5tyy.net
出だしが>>296と無知ぶりを発揮してのでよく頑張るなと思わせるw

314:デフォルトの名無しさん
20/05/19 08:40:51.02 +8IfJNam.net
>>304
その証拠って、ログインシェルを zsh にしてログイン後に bash 起動しても
SHELL 環境変数が zsh になってる件ですかね?w

315:デフォルトの名無しさん
20/05/19 10:14:32 zOKQOBke.net
>>306
反論したいんでしょ?あなたの意見の根拠を聞いてるんですが、そっちはどうしたんですか?
(私が主張していることを証明している)事実だけを言われても困るんですがw

316:デフォルトの名無しさん
20/05/19 11:45:35 +8IfJNam.net
>>307
根拠あげろって最初に挙げたでしょうに。
俺の環境ではログインシェルを zsh にしてログイン後に bash 起動したけど
SHELL 変数は /bin/bash でしたよ?

317:デフォルトの名無しさん
20/05/19 12:42:00 zOKQOBke.net
>>308
それと同じことを言ってる人をググって見つけてこれる?
そういうのが根拠。誰もいないよね。

「俺は○○だ」は根拠じゃなくてお前の主張
その主張の根拠を見つけてきてって言ってるのに
主張を繰り返されても困るw

318:デフォルトの名無しさん
20/05/19 15:11:40 +8IfJNam.net
>>309
お前の環境で実行しろよオイ
ファビョり方に無理が出てるなあとは思ったが流石にもうお前は終わりだ

319:デフォルトの名無しさん
20/05/19 15:14:56 O4jzhFRD.net
むかし北斗の拳というアニメがあったのだが、「お前はもう死んでいる!」と言った瞬間、ケンシロウの頭が「プシャー、ヒデブ!」ってなるような人が、掲示板には居るよね。
ふと思っただけで、特定の誰かを指して言うわけじゃないのだが。

320:デフォルトの名無しさん
20/05/19 16:11:09 41YM3k+D.net
>>310
もう飽きた。トドメさしとくね

SHELL environment variable still points to zsh after using bash
SHELL環境変数は、bashを使用した後もzshを指します
URLリンク(unix.stackexchange.com)

SHELL is an environment variable that is passed from bash to zsh when you call zsh.
SHELL is not one of the Parameters Set By The Shell in zsh, so its value remains intact.

SHELLは、zshを呼び出す


321:ときにbashからzshに渡される環境変数です。 SHELLはzshのシェルによって設定されるパラメーターの1つではないため、その値はそのまま残ります。 man login ユーザ ID とグループの ID は /etc/p@sswd ファイル中に記載されている値に従って設定される。 $HOME, $SHELL, $PATH, $LOGNAME, $MAIL の値は、パスワードエントリのそれぞれの フィールドに従って設定される。 ulimit, umask, nice 値が、 GECOS フィールドの エントリーによって設定されることもある。



322:デフォルトの名無しさん
20/05/19 16:14:39 41YM3k+D.net
URLリンク(unix.stackexchange.com)

You can use the command:

$ echo $SHELL
to find out the shell from within the script.

No. $SHELL is the shell of choice of the user. Initialised from the login shell of the user.
Nothing to do with the currently running shell.

いいえ。$ SHELLはユーザーが選択するシェルです。ユーザーのログインシェルから初期化されます。現在実行中のシェルとは関係ありません

323:デフォルトの名無しさん
20/05/19 16:16:06 41YM3k+D.net
man bash

SHELL この環境変数にシェルのフルパス名が保存されています。
シェルを起動したときに設定されていない場合は、 bash が現在のユーザのログイン
シェルのフルパス名を代入します。

324:デフォルトの名無しさん
20/05/19 17:04:50.75 Yw4hD4hb.net
POSIXシェルの\x80--\xFEあたりのバイト列の取り扱いって,何か規定されてます?
\x00--\x7Fの取り扱いについては
URLリンク(pubs.opengroup.org)
ここに載ってるけど。

325:デフォルトの名無しさん
20/05/19 17:40:08 +8IfJNam.net
ミスリードさせる気まんまんの書き込みばかりして
頑なに自分の環境での実行結果は貼らないのはなんで?w

『「アルコールとは酒のこと」といえば間違ってると理解できる?』
って書き込んだ奴はどこに行った?

326:デフォルトの名無しさん
20/05/19 18:30:30 3kLN/2rB.net
>>316
いい加減傍目からもお前が何をしたいのかわからん
延々となぜか丁寧に説明されているのに、何を言い張ってるんだか。さらにぶり返すとか本当に読めないんだな、色々と

327:デフォルトの名無しさん
20/05/19 19:00:31.56 3kLN/2rB.net
せいぜい、延々と正しい説明してるw方の間違いは「ログイン時のシェル」と言ったことだけだな
自ら挙げた>>302の user's preferred command language interpreter という方向にそれも>>312,313で捕捉されてるし
まあ、後で手動でユーザがSHELLを変える設定することも(ほとんど)ないからログイン時のシェルでも通じるだろうけど
>>297は全くの誤りだけどw

328:デフォルトの名無しさん
20/05/19 19:56:07 8HY/3oGP.net
「慶應卒の学歴なんていらない」10代起業で成功する子の共通点
URLリンク(www.excite.co.jp)
起業で成功するキャリア形成の仕方とは? 元プロサッカー選手で起業家の鈴木啓祐氏に聞いた
URLリンク(sogyotecho.jp)
【アプリ開発で起業】必要な心得とマネタイズ方法のすべて
URLリンク(www.dreamgate.gr.jp)
学生起業家が開発、「人を軸に本を探すアプリ」とは?読書通じて「考える力」養って
URLリンク(newswitch.jp)
島田商高生がアプリ考案、発表 ICT起業家育成プログラム
URLリンク(www.at-s.com)


329:ral/730010.html 医師コンビが「治療用アプリ」で起業、禁煙に続き高血圧治療アプリを開発 https://diamond.jp/articles/-/229375 好きが高じて“カレー起業”、キャッシュレス決済アプリ「TOKYO MIX CURRY」の挑戦 https://diamond.jp/articles/-/215868



330:デフォルトの名無しさん
20/05/19 20:30:16 +8IfJNam.net
>>318
>>302 を示す際に素直に『「Preferred ... 」であってログインシェルじゃなかったわ、すまん』
って書けばそこで終わった話ですよ? なぜこのタイミング?

> まあ、後で手動でユーザがSHELLを変える設定することも(ほとんど)ないからログイン時のシェルでも通じるだろうけど
都合よく解釈しすぎ。 もう一度書くけど
『「アルコールとは酒のこと」といえば間違ってると理解できる?』
って書き込んだ奴はどこに行った?

331:デフォルトの名無しさん
20/05/19 20:45:45 3kLN/2rB.net
俺は違うからな、お前に延々と付き合っていたのとは

お前は全く間違いの反論でだから、お前がどう挙げつらおうがお前の責め手にはならんだろう、何を勝ち誇って(?)いるんだか
お前自身で、その未だに言い出してる自分の間違いを認め誤りの訂正お礼なんぞもしてないくせに
自分の大きな間違いをごまかす消化するために小さな間違いをあげつらってるだけだな、しつこく繰り返してるとこからは

332:デフォルトの名無しさん
20/05/19 21:56:10 41YM3k+D.net
>>318
> の間違いは「ログイン時のシェル」と言ったことだけだな

諦めて読めな?

> man bash
>
> SHELL この環境変数にシェルのフルパス名が保存されています。
> シェルを起動したときに設定されていない場合は、 bash が現在のユーザのログイン
> シェルのフルパス名を代入します。

333:デフォルトの名無しさん
20/05/19 21:58:18 41YM3k+D.net
つまり>>308のこれが嘘だったってこと

> 俺の環境ではログインシェルを zsh にしてログイン後に bash 起動したけど
> SHELL 変数は /bin/bash でしたよ?

334:デフォルトの名無しさん
20/05/19 22:12:04.54 3kLN/2rB.net
>>322
>>318の最後の行でそれを補足してるんだがな
>>302の user's preferred command language interpreter
で間違いないだろう、それ以上でもそれ以下でもない。ログインシェル自体が(ユーザデフォルトの) user's preferred command language interpreter だから&それしか多分設定するとこがないから、ログインシェルが設定されてるだけかな
手動で、今の俺の気分はログインシェルとは違うこのシェルなんだと、
SHELL=なんか
sudo -s
user's preferred command language interpreter が実感できなくね?
で、bashではそう書いてあるらしいが、(ほぼなんもしてない)dashってどうなってるんだろうと、ソースをチラ見した限りはそんな風なとこちょっと見えないな。OSがなのかな?
ああ、もちろん>>323なんてのは嘘(逆にどんな環境やねん)、dashでもSHELLに設定されてるし、そこからbashを起動してもSHELLはbashのパスには変わらない


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch