シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
探検
シェルスクリプト総合 その34
■ このスレッドは過去ログ倉庫に格納されています
2020/08/21(金) 15:17:55.64ID:mArnj/tT
2020/08/21(金) 15:18:16.96ID:mArnj/tT
・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
参考 https://unix.stackexchange.com/questions/145522/
特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)
・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
Debian系 … dash CentOS系 … bash Alpine … ash(busybox) Android … mksh
FreeBSD … ash Solaris,OpenBSD … ksh
macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・ログインシェルは/bin/shでない場合があります。例 macOS … zsh
・シェルスクリプトは可搬性を持たせるために可能な限りPOSIXに準拠しましょう
仕様 http://pubs.opengroup.org/onlinepubs/9699919799/
参考 https://en.wikipedia.org/wiki/POSIX
・bash依存はなるべく避けましょう。自覚なきbashism。シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
#!/bin/shを使うならシェル依存は厳禁です。bash依存するなら#!/bin/bashです
・BourneシェルはPOSIX標準化前に主にUNIXで使われていたシェルで多くの亜種が存在します
Bourneシェル≒Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
歴史的資料 https://www.in-ulm.de/~mascheck/
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
aproposやman -kでそれらしい単語による簡単な検索もできます
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題はスレ違い(正規表現スレへ)
・シェル芸はシェルスクリプトとは異なります
・シェルスクリプトのことをシェルってゆうな
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/08/21(金) 15:19:27.93ID:mArnj/tT
関連スレ
【Bash】Windows Subsystem for Linux【WSL】8
https://mao.5ch.net/test/read.cgi/linux/1590742701/
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/
【Bash】Windows Subsystem for Linux【WSL】8
https://mao.5ch.net/test/read.cgi/linux/1590742701/
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/08/21(金) 15:25:17.16ID:MuUIpq44
>>1
おっつん
おっつん
5デフォルトの名無しさん
2020/08/24(月) 18:01:20.80ID:xVB6pD3/ こんにちは
Macでzshを使っています
フォルダに
memo20200810.txt
memo20200817.txt
memo20200824.txt
のようなファイルがあったとして(週に1つずつ増える)
最新のファイルをechoで見たいとしたらどうするのがいいでしょうか???
Macでzshを使っています
フォルダに
memo20200810.txt
memo20200817.txt
memo20200824.txt
のようなファイルがあったとして(週に1つずつ増える)
最新のファイルをechoで見たいとしたらどうするのがいいでしょうか???
2020/08/24(月) 18:06:26.10ID:xVB6pD3/
すみませんechoではなくcatでした
別にコマンドは何でもいいので最新のテキストの内容を見る方法を知りたいです
別にコマンドは何でもいいので最新のテキストの内容を見る方法を知りたいです
2020/08/24(月) 18:08:35.17ID:eDLiikcy
cat "$(/bin/ls *.txt | tail -1)"
2020/08/24(月) 18:14:51.49ID:xVB6pD3/
ありがとうございました!
9デフォルトの名無しさん
2020/08/24(月) 19:06:43.25ID:8Ar+AlN+ ファイルが大量にあった場合には大きい順でソートして1行目を取り出すみたいに書いた方が速くないか?
10デフォルトの名無しさん
2020/08/24(月) 19:12:31.00ID:8Ar+AlN+ ただし ls で引数に指定するのはディレクトリ。
2020/08/25(火) 08:17:19.49ID:kX+0EEJG
>>7
ちなみにlsだけフルパスなのは? lsがエイリアスである可能性を考慮とか?
ちなみにlsだけフルパスなのは? lsがエイリアスである可能性を考慮とか?
2020/08/25(火) 08:57:33.67ID:c6c4SV8K
Unixで「複数のパスを区切る」といえばコロン区切りが普通だと思うんだけど
(例えばPATH,CDPATH,NLSPATHとか)
POSIXの
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03
でも言われている通りコロンが含まれているパスを指定することができない。
もちろん自分で勝手にPOSIXを逸脱して,バックスラッシュでコロンを
エスケープする,みたいなことをしてもいいんだけど,
なるたけ標準に合わせたい。
環境変数で複数のパスを指定するときに,
コロンを含めるようにしているユーティリティの例とか知らない?
(例えばPATH,CDPATH,NLSPATHとか)
POSIXの
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03
でも言われている通りコロンが含まれているパスを指定することができない。
もちろん自分で勝手にPOSIXを逸脱して,バックスラッシュでコロンを
エスケープする,みたいなことをしてもいいんだけど,
なるたけ標準に合わせたい。
環境変数で複数のパスを指定するときに,
コロンを含めるようにしているユーティリティの例とか知らない?
2020/08/25(火) 09:30:33.15ID:lHpt9rtN
PATHがコロン含められないのにコロン使えるようにするの?
チャレンジャーだなw
Unixはパスに使えない文字を決めたほうが良かったと思うね
MS-DOS/Windowsはちょっと多すぎだけど
チャレンジャーだなw
Unixはパスに使えない文字を決めたほうが良かったと思うね
MS-DOS/Windowsはちょっと多すぎだけど
2020/08/25(火) 12:32:57.49ID:c6c4SV8K
2020/08/25(火) 14:21:00.18ID:qvclnJmh
>>14
シェルスクリプトには関係なくね?
シェルスクリプトには関係なくね?
2020/08/25(火) 14:22:05.05ID:qvclnJmh
そういや環境変数名に記号とか改行とか使えるの知ってる?w
2020/08/27(木) 12:47:09.11ID:Di05+wlc
コマンドの戻り値を反転させたい、つまり0のときは非0に、非0のときは0に変えたいんだけど、どうすれば?
set -e状態のスクリプトで、特殊なコマンドを使いたい場合に。
また、makeで使うときにmake専用の記法(-とか@とか)がもしあればそれも。
set -e状態のスクリプトで、特殊なコマンドを使いたい場合に。
また、makeで使うときにmake専用の記法(-とか@とか)がもしあればそれも。
2020/08/27(木) 13:37:00.71ID:Q9F08mvx
2020/08/27(木) 13:56:01.63ID:Di05+wlc
2020/08/27(木) 14:11:33.44ID:Di05+wlc
ちなみに、makefileの場合は、次のように一行にまとめてしまえばごまかすことはできるが、set -eスクリプトだとやっぱりダメなもよう。
コマンド; test $? -ne 0
コマンド; test $? -ne 0
2020/08/27(木) 14:24:40.22ID:eXOTJM+N
!
2020/08/27(木) 15:13:00.41ID:Q9F08mvx
>>19
まあ大体そうなんだろうとは思ったが
どういうときにコマンドの戻り値を反転させたいのか気になるけど
処理をmain関数に入れてしまってこれでできるはず
( main ) && return 1
return 0
! ( main ) でも一応良いはずなんだけど ifを使わずにコマンドの頭に
!をつけるだけだと動かないシェルがあった気がする
今回はサブシェルが間に入っているから大丈夫かもだけど
あとは、思いつきだけどこんな感じでも出来る気がする
#!/bin/sh
set -e
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
任意のコマンド
まあ大体そうなんだろうとは思ったが
どういうときにコマンドの戻り値を反転させたいのか気になるけど
処理をmain関数に入れてしまってこれでできるはず
( main ) && return 1
return 0
! ( main ) でも一応良いはずなんだけど ifを使わずにコマンドの頭に
!をつけるだけだと動かないシェルがあった気がする
今回はサブシェルが間に入っているから大丈夫かもだけど
あとは、思いつきだけどこんな感じでも出来る気がする
#!/bin/sh
set -e
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
任意のコマンド
2020/08/27(木) 15:13:43.83ID:Q9F08mvx
ちなみにmakefileは知らんw
24デフォルトの名無しさん
2020/08/27(木) 15:30:52.02ID:aM8Ck5Vz 0/1の二択なら1から引けばいいじゃんね
2020/08/27(木) 15:33:26.32ID:Q9F08mvx
set -eでエラー終了した時は$?が1とは限らん
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
trap 'exit $(($? > 0 ? 0 : 1))' EXIT # 一文字短縮化w
trap 'exit $(($? == 0 ? 1 : 0))' EXIT
trap 'exit $(($? > 0 ? 0 : 1))' EXIT # 一文字短縮化w
2020/08/28(金) 15:22:32.20ID:hYmDe1I0
2020/08/28(金) 19:08:43.38ID:0gWrnmZ1
trap 'exit $(($? > 0 ? 0 : 1))' EXIT
これいいね
これいいね
2020/08/29(土) 14:16:28.94ID:fysUNitN
MirBSDの記事として書き込まれてたけど
このスレの前々スレくらいでもちょっと議論されてた
「ASCII区切り文字による表形式」についての話
https://www.mirbsd.org/permalinks/wlog2020_e20200620.htm#e20200620_wlog2020
このスレの前々スレくらいでもちょっと議論されてた
「ASCII区切り文字による表形式」についての話
https://www.mirbsd.org/permalinks/wlog2020_e20200620.htm#e20200620_wlog2020
2020/08/29(土) 15:32:00.60ID:tFn2MGZe
>>28
あー、その記事読んだ。FSってフィールドセパレータだと思っちゃうよねw
たまたま俺は、レコードとフィールドと、ファイル区切りもいるかなぁ?って
考えながら探してたから、お、4つもあるじゃんって感じで気付いたが
あー、その記事読んだ。FSってフィールドセパレータだと思っちゃうよねw
たまたま俺は、レコードとフィールドと、ファイル区切りもいるかなぁ?って
考えながら探してたから、お、4つもあるじゃんって感じで気付いたが
30デフォルトの名無しさん
2020/08/29(土) 16:27:42.59ID:2GmTjly/ >>16
知ってる。
知ってる。
31デフォルトの名無しさん
2020/08/29(土) 16:39:43.91ID:2GmTjly/2020/08/29(土) 16:42:17.42ID:2GmTjly/
あ。上の方からゆっくり読んで下まで読まずに書いたら途中で色々と話が進んでいたorz
2020/08/30(日) 18:43:29.75ID:CLO3al/P
https://mevius.5ch.net/test/read.cgi/tech/1537584801/206
この問題のレベル2を実装できないw
レベル1は
foo() { set -- $2 $1 $(shift 2; printf ' %s' "$@"); bar "$@"; }
↑こんな感じのが正解の一つだと思うんだが,
これだと
foo 1 2 3 4 '5 includes space'
という引数を指定した場合に
$ foo 1 2 3 4 '5 includes space'
begin
2
1
3
4
5
includes
space
end
というような出力になってしまう。
この問題のレベル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
というような出力になってしまう。
2020/08/31(月) 12:38:22.81ID:pjiHotrY
age
2020/09/02(水) 11:33:18.91ID:ifuz91bD
シェルスクリプトマスターしてしまったので
シェルスクリプト難しいって言ってる人が
何が難しいのかわからなくなった
シェルスクリプトが難しいんじゃなくて
初心者だから難しいだけなんじゃ?
シェルスクリプト難しいって言ってる人が
何が難しいのかわからなくなった
シェルスクリプトが難しいんじゃなくて
初心者だから難しいだけなんじゃ?
36デフォルトの名無しさん
2020/09/02(水) 19:16:56.69ID:orWCnyGy >>33
age
age
37デフォルトの名無しさん
2020/09/03(木) 02:22:39.28ID:weiyro1+ >>33
いくつかやり方があると思うがヒントな
位置パラメータが 1 2 3 4 5 の状態から
1 2 3 4 5 2 1 3 4 5 を作り出すことができれば
あとはshift 5をするだけで
2 1 3 4 5 にすることができる
この問題を解くカギは、終了条件をどうするか?なんだよ
いくつかやり方があると思うがヒントな
位置パラメータが 1 2 3 4 5 の状態から
1 2 3 4 5 2 1 3 4 5 を作り出すことができれば
あとはshift 5をするだけで
2 1 3 4 5 にすることができる
この問題を解くカギは、終了条件をどうするか?なんだよ
38デフォルトの名無しさん
2020/09/03(木) 02:23:25.90ID:ZRdxhfh3 1 2 3 4 5 2 1 3 4 5 を作り出すことができれば
スペース入れたつもりだったが見やすくならなかったな
スペース入れたつもりだったが見やすくならなかったな
2020/09/03(木) 21:49:28.77ID:cH7nhQ1J
2020/09/03(木) 23:57:53.85ID:BJh39Y3Y
補足 わかると思うけど
この問題を解くカギは、「ループの」終了条件をどうするか?なんだよ
この問題を解くカギは、「ループの」終了条件をどうするか?なんだよ
2020/09/06(日) 11:36:07.13ID:r+7yP+3C
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「日本が戦争に一歩踏み出す危機感」官邸前で抗議デモ 高市総理“台湾有事”発言の撤回求める 中国メディアの姿も [蚤の市★]
- 【沖縄】『ジャングリア沖縄』開業4か月で「ガラガラ」「当然の結果」衝撃の閑散ぶりで気になる来場者数 [煮卵★]
- 「やっぱり顔採用かよ…」就活生を襲う“見えないルッキズム”の現実★2 [七波羅探題★]
- 【テレビ】片山さつき財務相 18兆円の補正予算案、財政規律派に「無駄にどこかに消えちゃうお金は一銭もない」 [少考さん★]
- 【特撮】今森茉耶降板の「ナンバーワン戦隊ゴジュウジャー」代役・志田こはく初登場 「潜入調査のために変えてもらったこの顔と声」 [Ailuropoda melanoleuca★]
- 【クマ】「人間が優先で何をしてもいいとなったら、世の中はおかしなことになる」「クマがいる自然を自慢してもいい…」北海道獣医 [少考さん★]
- 【高市悲報】「早苗バッグ」世界で脚光🤩注目度はサッチャー氏以来。女性指導者で持ち歩きは少数派【産経】🏮 [359965264]
- 小林鷹之「経済の中国依存から脱却して将来的にはゼロに近づける。世論が高市首相を批判すれば誰が得をするか考えて欲しい」 [931948549]
- フィレオフィッシュが大好きなケンモメン、あつまれー!! [881676371]
- うんち一口食う or 全身うんち風呂につかる
- 【悲報】立憲原口氏 高市総理を擁護してしまう
- <台湾外交部も困惑>高市発言で孤立するニッポン「悪夢の米中接近」サプライチェーンから除外の致命的局面へ…自力で打開が困難に [931948549]
