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

■ このスレッドは過去ログ倉庫に格納されています
2020/03/23(月) 01:12:30.31ID:TYte82vJ
シェルスクリプトに関する総合スレッドです。

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

シェルスクリプト総合 その32
https://mevius.5ch.net/test/read.cgi/tech/1571929725/
2020/03/23(月) 01:13:11.44ID:TYte82vJ
・特記なき場合、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でそれらしい単語による簡単な検索もできます
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題はスレ違い(正規表現スレへ)
・シェル芸はシェルスクリプトとは異なります
・シェルスクリプトのことをシェルってゆうな
2020/03/23(月) 01:14:49.56ID:TYte82vJ
関連スレ

【Bash】Windows Subsystem for Linux【WSL】7
https://mao.5ch.net/test/read.cgi/linux/1579395785/l50

Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/

シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/

zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/

【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
2020/03/23(月) 16:11:26.05ID:urYmb4Ir
タコシェルが一番好きです。なぜならおいしいから。
2020/03/23(月) 21:51:18.74ID:gNyotYW5
>>1

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

ちなみに履歴展開「!!」の値は正常(つまり直前のコマンドライン全体に復元される)だし,
ヒアドキュメントの内容が&xやx&だったりした場合は
期待通りの挙動(すなわち最後の引数,この場合は「cat」)になる。
2020/03/24(火) 02:17:57.55ID:cu1HFh78
catコマンドがあるのにdogコマンドってないんですか?
気になります。
2020/03/24(火) 03:33:10.76ID:Do7E3fIs
tac コマンドがあるよ
2020/03/24(火) 03:35:04.91ID:UBy3gEYu
>>6
wachdog
2020/03/24(火) 03:35:15.65ID:UBy3gEYu
t忘れた
2020/03/24(火) 07:10:36.15ID:fj9Tix3R
私は可愛い猫と女の子を見ていたいです。

I want to watch girl with cute cat.
2020/03/24(火) 11:34:18.79ID:0MDW2qu9
>>10
短い文なのに英語力の低さがダダ漏れ
2020/03/26(木) 01:44:53.53ID:1qTCm9gt
touchやcatみたいに本来とは違う用途で使われるコマンドって他にもあるんだろうか
mvでリネームも最初は不可解だったが
2020/03/26(木) 08:26:08.90ID:cRYr3Jpu
>>12
どんな使い方だ?
2020/03/26(木) 09:12:09.34ID:dMO0q1U3
触るだけだったのに作ってしまう
猫だったのに
2020/03/26(木) 09:30:11.06ID:n14BBjo0
結合結果を出力するものだが単独ファイルの中身を表示するのに使うとか
2020/03/26(木) 10:06:49.81ID:q5TlNmdE
touchは?
2020/03/26(木) 10:13:00.02ID:dMO0q1U3
タッチは触るツールやろ
18デフォルトの名無しさん
垢版 |
2020/03/26(木) 10:36:23.24ID:SHCpGffT
>>5
これ分かる方いらっしゃいますか。
2020/03/26(木) 10:50:22.02ID:dMO0q1U3
履歴展開はインタラクティブシェルが行う
シェルスクリプト実行前の処理だと思ってるので興味がないw
2020/03/26(木) 17:59:15.96ID:1qTCm9gt
touchは空ファイルも作れるってだけで本来の用途はタイムスタンプの変更でしょ
catだって中身の連結が本来の用途なんだから
だけど実際はそれ以外でよく使うってお話
2020/03/26(木) 21:46:26.12ID:qqZOjzAR
その昔は C プログラミングをするとき make で管理していた
make はタイムスタンプを見てどれをコンパイルするか決めていたため
touch で手動でどこからインストールするかを制御してた
touch の使い道はその辺かなあ
新しい file を作るなら
$ cp /dev/null file
の方が私の好みではある
2020/03/27(金) 02:36:47.10ID:0z/Q98b2
新しいファイルを作るなら

:>file

コマンド呼び出ししないから最短で最速!
2020/03/27(金) 09:46:48.87ID:fxzLTj3v
touchに代わるいい名前ないかね?
2020/03/27(金) 13:51:42.45ID:dcpdkXkw
別に違和感とか全くないな
open(2)で無かったら作るというのがあるし
2020/03/27(金) 18:04:12.08ID:0RYt9ExS
「touchがよくない名前」って考えてるあたり,
touchの*本来の*目的が「ファイルを新規作成すること」だと思ってそう。
2020/03/27(金) 18:18:20.83ID:5yAR8wFh
$ man touch

TOUCH(1) User Commands TOUCH(1)

NAME
touch - change file timestamps
27デフォルトの名無しさん
垢版 |
2020/03/27(金) 19:25:21.80ID:zXBqI+VJ
唾を付けておくという表現が英語にあれば
spitだろう。
2020/03/27(金) 20:52:54.59ID:OSmxssGw
お願いtouch touch ここにtouch
29デフォルトの名無しさん
垢版 |
2020/03/28(土) 00:10:04.43ID:UOUptx4u
>>22
>file
2020/03/28(土) 10:24:50.05ID:KzFz1ENP
>>29
それPOSIX準拠?
2020/03/28(土) 13:22:16.30ID:KzFz1ENP
算術展開 $(()) って、代入文が使えるんだな。
ループ廻すときに,i=$((i + 1))っていう増分と$iの値の判定を別々にやってたのが,
$((i += 1))という値を判定するだけで済むとは。
2020/03/28(土) 14:59:32.82ID:Bw1KM2rM
>>31
POSIXでどこまで決まってるか知らんけど、
ふる〜いdashでは失敗する
2020/03/28(土) 15:06:39.27ID:Bw1KM2rM
あと $((i = 1)) とか $((i++)) とかも使えるよ
注意点としては

i=0
while [ "$i" -lt 100 ]; do は iは0から始まるが
while [ $((i+=)) -lt 100 ]; do だとiは1からになるって所だな
34デフォルトの名無しさん
垢版 |
2020/03/28(土) 15:16:54.38ID:KzFz1ENP
>>33
$((i++))という書き方は,少なくともPOSIXでは保証されてない。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
2020/03/28(土) 16:41:52.19ID:55WldctP
>>34
本当に?

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_01_02_01
2020/03/28(土) 16:49:31.86ID:KzFz1ENP
>>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.

ちゃんと読みましょう。
2020/03/28(土) 16:58:42.30ID:tKpZ/PKG
あるけど?

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_01_02_01

Operation

postfix ++
postfix --
2020/03/28(土) 16:59:07.56ID:jVMyeik2
嘘つくのは犯罪やぞ
2020/03/28(土) 17:35:25.59ID:KzFz1ENP
>>37

++と--はシェルの算術展開では必須じゃないって書かれてあんのが読めねーの?

これだから文盲と会話するのは疲れるんだよ。
バカの一つ覚えみてーに同じURL貼ってさぁ。
2020/03/28(土) 18:03:30.94ID:LpzVEuiv
馬鹿を相手にお疲れ様ですw
2020/03/28(土) 20:22:28.93ID:jP19sx2a
>>39
間違っちゃいないが >>35 の書き込みに対する反論を放棄(つまり
反論を潰しに行っていない/無視)して自分の主張を繰り返した点が
指示/説明下手。

結果 >>35 の再プッシュを食らうという互いに後味の悪い手戻りが
発生している。
2020/03/28(土) 20:43:09.24ID:KzFz1ENP
ちなみに
$((i+=1))って書き方はPOSIXでは保証されてる……筈だけど,
↑上にも書き込んでた人がいるように,一部シェルで動かないことがあるので使わんほうがいい。
2020/03/28(土) 21:28:16.71ID:DvmhhhVM
>>41
読めなさすぎだろ。>>36はお前も読めないのかよ
2020/03/28(土) 21:34:35.34ID:DvmhhhVM
>>34を提示
それに対して>>35を提示
それに対して>>35があろうが>>34で提示したのに書いてあるだろとご丁寧にその部分を抜粋
と読めないのか??なんで>>41なんてしゃしゃり出るのか不思議
2020/03/29(日) 23:36:16.48ID:xy0u8Cju
>>43
ここもそうだ
お前は俺の「間違っちゃいないが」を全く無視して「お前も読めてないのかよ」
と返してしまっている
読めてないのはお前じゃないのか?
よくある「自己紹介乙」状態だわ
2020/03/29(日) 23:56:55.01ID:vQZcBwwl
>反論を潰しに行っていない/無視)して自分の主張を繰り返した点
>指示/説明下手
ここだよ。お前の主題はここだろうが、そんな前置きではなく
2020/03/30(月) 00:04:56.52ID:E+6h8qU6
この会話のならなさはなんとかの一つ覚えのようにURL貼った本人ではないか?w
2020/03/30(月) 00:11:53.59ID:quKNoAsp
35 のレスが「本当に?」だけで URL がなかった場合の 36 の返は申し分ないよ

逆に URL だけだったら 36 のような返しはしなかっただろう?

35 のURL 側を潰さなかった/35 の URLをあたかも無視したような解が下手だと言っている
2020/03/30(月) 00:25:17.30ID:KcLwWOXD
なに言ってるのこのシトw
2020/03/30(月) 00:27:11.66ID:quKNoAsp
いつもレスバに負けるから ID 変えて書き込む癖が抜けてないようですね
2020/03/30(月) 00:33:42.38ID:KcLwWOXD
>>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
2020/03/30(月) 00:49:16.05ID:quKNoAsp
書いてある内容は正しいって一番最初にいってるんでそこ何度説明されてもね
平行線みたいなんでやめるね
2020/03/30(月) 00:59:54.39ID:KcLwWOXD
平行線も何もあんた変な論は変な論というデバッグwし終えたてとこかな
>>36はちゃんとフォローしてる、疑問疑義を否定している、>>41なんてイチャモンもいいとこだったということで

てかさ、ちゃんと>>34を読んだらあんなURL張るはずもないもんだな、そこのURL先で Arithmetic Precision and Operations が>>35のURLのリンクじゃん
謎だなw
2020/03/30(月) 01:46:38.97ID:+SXbvp8E
ガガイ
2020/03/30(月) 17:34:28.23ID:wadsBXpT
エイプリールフールはまだだぞ
56デフォルトの名無しさん
垢版 |
2020/04/02(木) 14:38:12.64ID:BA8GpIv4
Windows 10, WSL, Ubuntu 18.04 に、Ruby のバージョンマネージャーのrbenv を、
rbenv-installer を使ってインストールしたのですが、
https://github.com/rbenv/rbenv-installer/blob/master/bin/rbenv-installer

これの34行目について、
rbenv="$(command -v rbenv ~/.rbenv/bin/rbenv | head -1)"

これを、bash スクリプト内に書いて、スクリプトを実行すると、
xxx="$(command -v rbenv)"

xxx は、~/.rbenv/bin/rbenv とパスが入り、

これを端末で直接実行すると、
xxx は、rbenv となって、パスが入らない!

bash スクリプト内に書いて、それを実行した時と、
端末に直接入力した時では、結果が異なってしまう!
2020/04/02(木) 14:41:15.78ID:o0fN+e0O
>>56
あのさ、シェルで変数Aに123って代入して
別のプログラム実行したら、変数Aに123が入ってなかった!
みたいな間抜けなレスは要らないから
2020/04/02(木) 19:04:30.73ID:mH0OQczo
>>56
command -V rbenv
type rbenv
してみ、端末で直接実行時に
最優先実行対象を返すんだからその結果で何もおかしなことはないよ
5956
垢版 |
2020/04/02(木) 21:38:05.69ID:BA8GpIv4
端末で、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
}
2020/04/02(木) 22:11:52.53ID:mH0OQczo
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
以下省略するが読め
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html
2020/04/03(金) 12:01:03.87ID:liYJ7DEW
ちゃんとリンク,引用までしてあげて親切だなぁ。
黙ってNGすりゃいいのに。
2020/04/04(土) 12:25:48.39ID:teSfSC9d
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ipcs.html
ipcsコマンドとかのXSI通信系コマンドを使ったことある人いる?
どういう場面で使ったのか知りたい。
2020/04/04(土) 13:26:30.10ID:x+avwAnv
IPC使ったことがないとしか思えない。XSIに限らず他のIPCすらも
IPC使ったことがあるならそんなの聞かないだろう
2020/04/05(日) 08:45:21.55ID:UxA0hjaO
使ったことがないから聞いてるんだろうに使ったことがないとしか思えないとはとんちかな
2020/04/05(日) 13:50:07.19ID:TlWLT3Mj
無知だからしょうがないんだろうがとんちんかんすぎ
シェルスクリプトとは関係ない、IPC使う場合の場面に決まってるだろってことだよ
2020/04/05(日) 19:18:45.75ID:hACSBNMn
誰かawkの互換性についてまとめてる人いない?
どれだけの実装があって、POSIXにどれだけちゃんと準拠してるとのとか
awkはどのLinuxにも入ってるって前提でいいのか?とか
2020/04/06(月) 18:02:52.46ID:h+IdnJJv
まずは隗より始めよ
68デフォルトの名無しさん
垢版 |
2020/04/07(火) 11:20:12.53ID:OVrvsyTh
脱ケージ活動 ワロタw
(ケージ=鳥かご、おり、捕虜収容所)
まあそうなるよね。シェルスクリプト(笑)

ハンズラボとユニケージのあゆみ
https://www.hands-lab.com/tech/entry/5600.html

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

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

ユニケージからの脱却、通称脱ケージ活動は現在社を上げた取り組みの一つです。
負債の解消に向けて、様々な取り組みを実施しています。
69デフォルトの名無しさん
垢版 |
2020/04/07(火) 14:58:20.98ID:rrWnJIGn
>>62
共有メモリとかセマフォとかメッセージキューとかの確認で使ったことあるよ。そういうのを使うプログラムのデバッグ中とか動作確認でな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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