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

■ このスレッドは過去ログ倉庫に格納されています
2021/10/05(火) 22:49:30.91ID:KsbWuyFp
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。

前スレ: シェルスクリプト総合 その36
https://mevius.5ch.net/test/read.cgi/tech/1614212414/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】11
https://mao.5ch.net/test/read.cgi/linux/1627507889/
・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/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
2022/07/13(水) 17:17:56.15ID:ygLQXjBv
見えるようになってない
2022/07/13(水) 17:39:24.41ID:SQcVdjvN
なんで見えないのにレスできるんだよwww
2022/07/13(水) 18:23:16.73ID:ccIVitkd
>>775
好きにすればいいと思う
2022/07/13(水) 18:48:04.93ID:EtP8dxEe
Ruby のoptparse なら、
ruby ./a.rb -a -b1 --foo --bar x

require 'optparse'

# ARGV.replace %w(-a -b1 --foo --bar x)

opt = OptionParser.new
p params = opt.getopts( ARGV, "ab:", "foo", "bar:" )

#=> {"a"=>true, "b"=>"1", "foo"=>true, "bar"=>"x"}
785デフォルトの名無しさん
垢版 |
2022/07/13(水) 19:41:24.35ID:8ZGfs65M
>>780も見えなくした
786デフォルトの名無しさん
垢版 |
2022/07/14(木) 16:46:11.67ID:mBJkiOUt
>>783
分かった
ありがとう
2022/07/14(木) 16:48:02.99ID:rMT+3vzc
どうしたまして
2022/07/14(木) 17:15:45.36ID:mlhFFI9d
short/longと前置/後置の両方サポートしたければ
getoptもgetoptsもダメだよね?
2022/07/21(木) 12:16:57.01ID:T68Jlsts
realpathコマンドは、Windowsだと何に相当しますか?

シンボリックリンクとか仮想ドライブ経由の実ファイルを特定する方法は、Linuxだとちゃんとあるけど、Windowsはどうしてるんだろ?
790デフォルトの名無しさん
垢版 |
2022/07/26(火) 20:15:56.25ID:Yo0JxkCi
trapコマンドなるもの知ったので試そうと以下のシェルを実行したんだが上手く行かない
どうしてだろう

<test.sh>
#!/bin/bash
sleep 15 && echo "15 seconds have passed"
trap 'echo SIGINT' SIGINT

$ ./test.sh

15秒経つ前にVSCodeからCtrl + Cしても音沙汰無し(念のためteratermからもやってみたけど同じ)

15秒待てばechoされるのは確認済み
最後に「trap -p」を追加してみるとちゃんとSIGINTが設定されてるのが出るんだけど
791デフォルトの名無しさん
垢版 |
2022/07/26(火) 20:23:32.74ID:Yo0JxkCi
自己解決しました
trap~の行を先頭に持って行ったら上手く行きました
2022/07/27(水) 01:33:17.01ID:IYeKVuXU
トラップ?いいか、物語
793デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:31:59.58ID:8I1dQN/H
トラップ一家物語って子どもの頃は怖かった
マリア?だっけが怒られるシーンとか苦手
2022/07/27(水) 05:21:39.36ID:IYeKVuXU
そういやデブだっていじめられてたっけ?

マリアはデブ。MariaDB
795デフォルトの名無しさん
垢版 |
2022/07/28(木) 20:48:38.50ID:oYIQQ6EM
MariaDBは新規に採用されることはもうないだろうな。
2022/08/20(土) 12:16:27.18ID:/HP/Kkeq
exec cmd1 | cmd2

cmd1 | exec cmd2 ってどっちが親のプロセスになるかってだけで同じだよね
どっちのほうがいいとかってあったりする?
2022/08/20(土) 14:20:05.28ID:kiVzxibA
>>769
どちらも子プロセスだアホ
親プロセスはそれを呼び出したシェルカシェルスクリプトだ
798デフォルトの名無しさん
垢版 |
2022/08/20(土) 14:20:29.69ID:yCCCo4Qv
>>797
安価間違ってますよ
799デフォルトの名無しさん
垢版 |
2022/08/20(土) 14:21:03.89ID:kiVzxibA
>>789
自動補完しろ
800デフォルトの名無しさん
垢版 |
2022/08/20(土) 15:34:56.76ID:l3DwVL0Z
800
2022/08/20(土) 15:44:54.21ID:VTC7uJpL
801(やおい)
802デフォルトの名無しさん
垢版 |
2022/08/22(月) 23:52:48.15ID:4DKxAEVF
bashの変数展開って可読性低いかな
803デフォルトの名無しさん
垢版 |
2022/08/23(火) 12:11:27.31ID:ZigpqJDA
PATH=$ADD_PATH:$PATH
でPATHにすでに$ADD_PATHが含まれてない場合にだけ追加するやり方ない?ループとか回さずにいい感じにやるやり方
804デフォルトの名無しさん
垢版 |
2022/08/23(火) 13:24:30.27ID:IsFqNvj1
https://stackoverflow.com/questions/17086292/how-to-insert-a-new-path-into-system-path-variable-if-it-is-not-already-there
805デフォルトの名無しさん
垢版 |
2022/08/23(火) 13:32:35.69ID:IsFqNvj1
こんなのもあるのか
www.rapidee.com/en/command-line
2022/08/23(火) 16:25:42.99ID:QjLy6Z4J
>>803
パスの前後に:をつけてパスの前後に必ず:が付いた状態でgrepかけるのはダメ?
if ! grep -q ":${ADD_PATH}:" <<< ":${PATH}:" ; then
PATH="${ADD_PATH}:$PATH"
export PATH
fi
2022/08/24(水) 12:04:37.37ID:mIEON09S
[[ :$PATH: != *:$ADD_PATH:* ]] && PATH="$ADD_PATH${PATH:+:$PATH}"

[ "$PATH" != "$ADD_PATH" ] && [ "$PATH$PATH$PATH" = "${PATH#$ADD_PATH:}${PATH#*:$ADD_PATH:}${PATH%:$ADD_PATH}" ] && PATH="$ADD_PATH${PATH:+:$PATH}"
808デフォルトの名無しさん
垢版 |
2022/08/24(水) 15:25:47.26ID:pB12lFr9
てrst
809デフォルトの名無しさん
垢版 |
2022/08/24(水) 15:29:23.30ID:pB12lFr9
ほらよ。お前ら自分でコードもかけんのか?

prepend_path() {
case ":$PATH:" in
*:"$2":*) return 0
esac
PATH="$2${PATH:+:}$PATH"
}

prepend_path "$ADD_PATH"
2022/09/30(金) 01:19:18.32ID:hEL3H+Kq
シェルショッカーのせいのでこのスレ廃れたな
811デフォルトの名無しさん
垢版 |
2022/09/30(金) 13:44:24.20ID:Yhp7EPAh
シェルが一番楽でいい
大好き
2022/09/30(金) 20:48:28.54ID:lIBPtEW1
Twitterの#シェル芸とか、うんことか変な吹き出しとか
おっさん臭キツイんだけど、あれ何が楽しくてやってるの?
2022/09/30(金) 22:18:24.47ID:6qvEDMgz
シェル芸と言えば、USP 研究所の上田隆一。
シェルスクリプトを芸にまで高めた香具師

でも、上田の本を見たら、解答がRuby などのスクリプト言語でも書いてあるw
814813
垢版 |
2022/09/30(金) 22:22:22.63ID:6qvEDMgz
シェル芸で、ここはRuby の1 Liner を使ってとか、

シェル芸には、Rubyなどのスクリプト言語の1 Liner も含むw
2022/09/30(金) 22:38:49.73ID:6fU78nEj
> シェルスクリプトを芸にまで高めた香具師

これが間違ってる
シェル芸=シェルスクリプト芸じゃないぞ
2022/10/01(土) 00:37:08.33ID:nJiCANZy
つか、シェル芸って、シェルスクリプトの機能ってほとんど使わんやん
パイプぐらいでしょ?
817デフォルトの名無しさん
垢版 |
2022/10/01(土) 01:49:51.63ID:WNV5xseU
何を以てシェル芸というのか
2022/10/01(土) 01:53:22.04ID:A++1DWcf
ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8
819デフォルトの名無しさん
垢版 |
2022/10/01(土) 02:14:51.81ID:WNV5xseU
>>818
ワンライナー縛りだったのか
820デフォルトの名無しさん
垢版 |
2022/10/01(土) 03:05:59.90ID:r/3KV4QL
>>818
上田さんが書いたページですか?
2022/10/01(土) 03:56:20.81ID:nJiCANZy
>>820
> 上田さんが書いたページですか?
本人がwikipediaに書いたのかもねw

つか、本人のブログへのリンクあるじゃん
https://b.ueda.tech/?page=01434

> シェル芸の定義バージョン1.1
> マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、
> あらゆる調査・計算・テキスト処理をCLI端末へのコマンド入力一撃で終わらすこと。
> あるいはそのときのコマンド入力のこと。
>
> 要は
> Unix系OSのシェル上でのワンライナーのことです。勝手に名前つけてすんません。

ソースコードを残さない時点でシェルスクリプトじゃないし、
これが定義ならシェルからワンライナーで実行するならperlとかも使っていい
POSIX原理主義とは真っ向から対立してる
822813
垢版 |
2022/10/01(土) 09:15:00.12ID:WF3iEAg3
上田は、シェル芸の定義まで作っていたのかw

まあ、しゃーない。
シェル芸を生み出したのは上田だから
2022/10/01(土) 09:52:04.30ID:vUFg+rJu
シェル芸って昔からあるワンライナーの日本語訳みたいなもんでしょ?
上田が生み出したとは言えないのでは
824デフォルトの名無しさん
垢版 |
2022/10/01(土) 10:26:42.87ID:SMOLsqD3
なんだ?上田ってやつはワンライナーを言い換えた程度で
wikipediaのページまで作ってるのかw
2022/10/01(土) 10:44:12.58ID:a2GTR0qK
その手のワンライナーがスイスイ書けるならそれでいいがワンライナーにするために考え込むぐらいなら普通に複数行使って書いた方が早いし使い回ししやすい
2022/10/01(土) 10:57:25.49ID:SMOLsqD3
> コマンド入力一撃で終わらすこと。

試行錯誤で何度も実行してるよねw
2022/10/01(土) 17:43:09.08ID:0xrmLtr7
普通にスクリプト書いて終わりでいいじゃん
2022/10/01(土) 22:13:37.09ID:WF3iEAg3
シェル芸は、雑誌で連載していた人気企画だったのに終わってしまった

今でも、勉強会などでやっているのかも
2022/10/01(土) 23:27:02.91ID:SMOLsqD3
今は手作業じゃなくて自動化の時代ですしw
2022/10/02(日) 00:38:08.91ID:WZvawmk5
ワンライナーはともかくシェル芸やってる人って
競技プログラミングやってみるみたいなもので
現実の問題を解くというより、問題のための問題を
解くって感じだから実用的じゃないよね
2022/10/02(日) 12:49:06.04ID:nQhJJvDz
15年位前まで仕事でシェルスクリプト触ってたけど
ワンライナーの人は難読化させてたように思うね
自身しかわからないようにして仕事がなくならないようにしてた
832デフォルトの名無しさん
垢版 |
2022/10/02(日) 13:20:01.30ID:QRKSlI6k
最近はワンライナーもpythonで書いてるわ。
2022/10/02(日) 23:04:22.94ID:P9RAxpp0
ワンライナーなら、PythonよりはPerlやろ。
2022/10/03(月) 02:57:52.90ID:bidh+76+
Pythonの文法でワンライナーって可能なのか?
ワンライナーならPerlとRubyだろうな
一行でコードを書ける
2022/10/03(月) 03:17:23.26ID:VpzdjDDF
引数で入力テキスト取れるんだからそりゃ書けるけど、インデントと改行文字埋め込みが辛い
あとperlみたいにfeature全部盛りオプションがないのでボイラープレートが割と要る
836デフォルトの名無しさん
垢版 |
2022/10/03(月) 16:27:05.78ID:M4csbtG9
awkとか使うと一行になっちゃう
2022/10/03(月) 17:26:07.03ID:bidh+76+
ならねーだろ。つか一行100文字超えるなや
2022/10/03(月) 17:46:22.23ID:ZyVxlvNn
自分勝手すぎ
2022/10/03(月) 18:10:34.89ID:pcuzjq2H
Ruby の1 liner では、
-r で、モジュールを読み込める。require

例えば、csv を使うのなら、-rcsv とする。
だから、awk はいらない
2022/10/03(月) 20:56:25.38ID:fL6GSL1h
rubyしか使いません使いたくありませんって言ってるだけだな
2022/10/04(火) 03:06:20.40ID:F9I3VOct
rubyを使うとかアホらしい
そのモジュールにバグとかあったらどうするんだ?

俺が作ったcsvライブラリを使え
awkで作った
2022/10/04(火) 03:08:24.97ID:F9I3VOct
俺が作ったcsvパーサーをインストールされば
rubyをインストールしないですむ
俺が作ったcsvパーサーはGitHubでスター68個もある
2022/10/04(火) 03:10:11.52ID:F9I3VOct
俺が作ったcsvパーサーなら、ファイルを適切なところにコピーするだけで動く
rubyのインストールは難しい。誰にでもできるような作業じゃない
2022/10/04(火) 03:13:47.12ID:F9I3VOct
俺が作ったcsvパーサーはコメント除いて200行ちょっとしかない
たった200行書くだけでrubyは不要になる
200書く方がインストールよりも簡単だ
2022/10/04(火) 03:50:56.15ID:PkeNAHz9
押しが強いのばかりだな。なんでお前らそんなのきもいのか
846デフォルトの名無しさん
垢版 |
2022/10/04(火) 06:08:41.35ID:d4cMYyPK
何かワロタw
2022/10/04(火) 15:15:12.62ID:M2uNOhVe
とはいえCSVの扱い方っていうのはまあまあのバカ発見器だと思う
848デフォルトの名無しさん
垢版 |
2022/10/04(火) 15:36:06.28ID:VPNCWU/y
というと?
2022/10/04(火) 16:05:16.77ID:d0x64lde
Rubyのインストールが難しいとか言ってるやつの書いたCSVパーサーww

使ってるやつ絶対アホ
2022/10/04(火) 16:14:37.74ID:LlVt6c8r
ダブルクォーテーション内のコンマ改行、エスケープ文字、空白、空行、末尾コンマ、行ごとの列数ブレの扱いや、エンコード、読み込みバッファの使い方とかかしら
2022/10/04(火) 21:21:17.34ID:GpOlx84l
クォートがダブルクォーテーションとは限らないしそもそもクォートされてるとも限らない
2022/10/04(火) 23:27:34.84ID:CNGS9dK7
シェル芸では、CSV をAWK で書くけど、

ダブルクォーテーション内に、
ダブルクォーテーション、行区切り文字の改行、列区切り文字のカンマがあるとバグる

だから問題では、それらは存在しない事になっていて、現実的ではない。
シェル芸は、あくまでもパズル。頭の体操
2022/10/05(水) 01:52:54.69ID:SF0K7+3w
>>852
シェルスクリプトで書いた
200行のawkスクリプトを使えば
シェル芸出来る
2022/10/07(金) 21:40:47.14ID:/7BkWz35
おまえらこういうのがシェルゲイだよ
/bin/sh -c 'while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-32));date;tput rc;done &'
855デフォルトの名無しさん
垢版 |
2022/10/08(土) 07:32:17.40ID:sJ7nSBE8
さすがに一行すぎるwww
2022/10/08(土) 08:58:04.16ID:ZJ2MUJ2n
シュル芸って一行ならなんでもいいのけ?
1000行ぐらいのシェルスクリプトだって
セミコロンでつなげば一行になると思うが?
857デフォルトの名無しさん
垢版 |
2022/10/08(土) 17:52:45.45ID:sJ7nSBE8
ネタをネタとわからない人は・・・
2022/10/09(日) 10:39:58.10ID:CEIVYWT/
./自作便利コマンド.rb

こういうのもシェル芸になるのかな?w



./OSS便利コマンド

だって、これはシェル芸やろ?w
2022/10/09(日) 15:35:04.77ID:pTe7tmBB
見たやつにへぇーボタンを押させるかどうかよ すべってたり寒かったらスルーされるだけ
2022/10/09(日) 16:31:25.65ID:j4hTJmxG
すでに定義が貼られてるのにこれは?これは?って聞いてるのバカすぎるだろ
861デフォルトの名無しさん
垢版 |
2022/10/09(日) 17:24:33.51ID:CEIVYWT/
>>860
定義に自作コマンドを使ってはならないなんて書いてないぞ
だから使っていいよねって話
2022/10/09(日) 17:38:55.72ID:j4hTJmxG
>>861
うん、いいよ。だからいちいち聞かなくておk
863デフォルトの名無しさん
垢版 |
2022/10/09(日) 17:52:14.19ID:CEIVYWT/
>>862
最初からそういえばいいだろ?
なんで最初から「いいよ」って返信しなかったの?
2022/10/09(日) 18:05:06.86ID:0M9/zkAJ
聞く前から答えが分かってるからだろ馬鹿w
2022/10/09(日) 18:22:07.86ID:CEIVYWT/
>>864
だからその答えを言えばいいだけだろwww
866デフォルトの名無しさん
垢版 |
2022/10/09(日) 18:59:37.92ID:oIDn8Gmd
もめてんのか?
おっちゃんが仲裁してやろうか?
2022/10/09(日) 19:29:32.64ID:CEIVYWT/
>>866
どんな面白いことを言うのか
評価してやるからやってみ
868デフォルトの名無しさん
垢版 |
2022/10/10(月) 08:55:39.46ID:ASWlLsU8
道理にかなってるとかじゃなくて面白いかどうかなのに、
アスペにはわからない模様
2022/10/10(月) 09:26:26.12ID:87F2gLmT
>>868
それお前の感想ですよねw
2022/10/12(水) 21:53:12.49ID:MhrQ6ttv
tarの書き方で歳が分かる
2022/10/12(水) 22:20:40.52ID:HU6qoXxl
tarはPOSIXに準拠してないので使わない
872デフォルトの名無しさん
垢版 |
2022/10/15(土) 20:43:57.71ID:aC7xlUxJ
POSIXに準拠したtarを作ればいいじゃん
2022/10/16(日) 00:36:11.22ID:EpE6LQff
POSIX準拠とかこだわってどうするんだろう?
絶対に完全オフライン環境でも使えなければならない理由があるなら別だが、そうでなければ無いものはダウンロードすればいいだけなのに
2022/10/16(日) 01:44:06.87ID:AdicRi1j
>>873
おろかものめ。Pythonやライブラリを使うとソフトウェアの持続性が短くなる
シェルスクリプトはメンテンスフリーだ。古いOSから最新OSにまで対応できる
ファイルをコピーするだけでいいからインストールが簡単だ

POSIXは1988年に規格化されてからほとんど変わらない
POSIXに準拠していないものは移植性が低い
POSIXに準拠していればLinuxでもMacでもいつでもどこでも動く製品を開発可能だ
これはシェルスクリプト以外では不可能だ
POSIXだけが25年経ってもメンテナンスせずに動き続けるソフトウェアを作れるのだ
2022/10/16(日) 02:26:07.88ID:JzUhNpEc
まあブーブーいうなよ あんたもどうせそのPOSIXが標準化に失敗したtarを使ってるんだろう?
876デフォルトの名無しさん
垢版 |
2022/10/16(日) 22:42:44.89ID:ZGQtChBm
少なくとも、macOSはPOSIX準拠ってことになってるけど使えない機能あるけどな。
2022/10/17(月) 12:18:15.97ID:lr6vgl7q
>>874
> おろかものめ。Pythonやライブラリを使うとソフトウェアの持続性が短くなる
> シェルスクリプトはメンテンスフリーだ。

セキュリティホールあきっぱなしの /bin/sh 実装でもスクリプトが実行できるガバガバ運用ってだけでしょ。
メンテナンスせずに動き続けるって事こそが危険だから Python は下位バージョン切り捨ててるわけで。
2022/10/17(月) 20:48:54.25ID:gqwh4i+l
本当に何十年も使われることが想定されるものを作っているならいいけど、なんとなく「寿命長い方がいいよね」程度の理由でPOSIXに拘って結局暫くすれば使われなくなるなら結果的にかなり生産性悪い作業でしかない
879デフォルトの名無しさん
垢版 |
2022/10/17(月) 21:48:02.26ID:kiowcDiZ
>>877 >>878
そうやって今まで使っていたアプリケーションが
OSをアップデートしたらいきなり動かなくなって
長い間システム停止して大損害が発生するわけだ
その責任をお前らは取れるのか?

シェルスクリプトで作っていれば何十年後でも動くし
ファイルコピーだけで別の環境で動く。何も修正する必要はない

シェルスクリプトの可搬性が低いとか言ってるやつは
どのOSでも動く書き方を知らんだけだ
POSIXがあるのだからシェルスクリプトの可搬性は高い
2022/10/17(月) 23:36:35.68ID:ih01gahk
そんなことなら、Perl5が必要充分以上やな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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