探検


シェルスクリプト質問スレ

209login:Penguin
垢版 |
2025/07/07(月) 10:36:25.85ID:a7b43M24
falseより[ ]の方が使いでがあるように最近思えてきた
タイプ数も少ないし、見た目でブラケットの中に何もないことから、空(falsy)意味論を理解するのも容易
210login:Penguin
垢版 |
2025/07/07(月) 10:40:46.91ID:a7b43M24
まあさすがに変数に入れる時はさすがにtrueと対になって対称性のあるfalseを使うけど

avail-p=false

if
avail-p; then
cmd do-smething-not-available
fi

avail-p=true
if avail-p; then
cmd do-smething-available
fi

おれは大体こんな感じでフラグ管理してる
211login:Penguin
垢版 |
2025/07/07(月) 19:16:50.58ID:lSyk0nlH
>>208
プログラム技術板にもあったけど活気があったのはUNIX板の奴だった気が

UNIX系の板自体がもはやかつての活気はないし、今後はAIに質問するのが主流になるだろうから
たてても過疎るだけじゃないかな
212login:Penguin
垢版 |
2025/07/07(月) 19:28:15.68ID:lSyk0nlH
>>209
[ ] なんて使ったことなくて、この書き込みで初めて知ったわ

知らずに他人のソース読んでる際にこの表現がでてきたら
「なにか式を書こうとしてそのまま忘れたんだろうなぁ(、何が入るか全くわからん...)」
になるので他人には優しくないかも
213login:Penguin
垢版 |
2025/08/27(水) 21:47:15.09ID:36SOHlNb
いや、if false;then∼fiなんて、複数行のコメントアウトに使うものw

emacslispの(if nil (progn∼)と同じ
214login:Penguin
垢版 |
2025/09/10(水) 14:33:05.43ID:J9+LxTbs
>>212
if [ 1 -eq 2 ]; then
echo "絶対に成立しない条件"
fi

などと書いておけば、コメントすらいらない。
2025/09/10(水) 15:00:13.07ID:NIhEJxA7
[ ] だと "]" のパースがはいるのに対してfalseは引数の処理が要らないからfalseのほうがいいんじゃないか(パラノイア
2025/09/10(水) 19:43:28.20ID:tqss3UDy
確かにそうなのか…
でもそれ言っちゃうならif分岐しないで
普通にコメント行でいい気もビレゾン
217login:Penguin
垢版 |
2025/10/02(木) 23:22:18.76ID:yBrdr//C
>>215
その実行速度差に意味があるなら、どういう使い方をしているのは説明しろよ!
218login:Penguin
垢版 |
2025/10/09(木) 17:30:59.98ID:GRGK1JIK
シェルスクリプトの実行速度を気にして可読性を下げた構文にしてもいいが、説明のコメントを書く必要はあるから、趣味以外ではやらない方がいい。
2025/10/10(金) 11:34:27.53ID:BTJmyFDx
linuxじたいの超絶初心者です
apacheのルートディレクトリの変更で手こずってて
何回もapache restartや
condigtesとかやったり
同じようなフォルダに行ったり
config関連のファイルを開いて書き換えたりしてます

何回も同じ文字列を打つのが面倒なのですが
そういうのを解決するのは、シェルスクリプトなんでしょうか?
そんなくらい手で打つほうが楽って上級者ばかりなのでしょうが
自分は、そのつど検索して打ち直したり、ターミナルの履歴たどってやったり

input-remapperというソフトがあったので
テンキーの1を押したら、再起動のコマンド文が入力されるようにしようかと思ったけど
apacheの文字出すだけでも
一文字ごとに+を入れないとダメみたいで、なかなか手間がかかりそうなのでとりあえずやめときました

なにか良いアイデアはあるでしょうか?
2025/10/10(金) 11:35:40.88ID:eylOxkng
>>219
condigtesとかやったり
↑
configtestの打ち間違いです
221login:Penguin
垢版 |
2025/10/10(金) 12:53:12.54ID:CR56Lou9
エイリアス使え
222login:Penguin
垢版 |
2025/10/10(金) 13:53:53.00ID:nw5JVwKx
tab補完
history
があるよ
2025/10/10(金) 15:34:10.73ID:j6HXVbm2
エイリアス、関数、シェルスクリプト、zsh-autosuggestions
2025/10/11(土) 09:32:27.19ID:C5a7utix
検索してみます
ありがとう
2025/11/29(土) 13:15:00.97ID:RooyRT2w
そもそもシェルスクリプトなんて、ターミナルのコマンドライン上で書いて、再利用できそうなら、適当なテキストファイルに貼っとくもんだw
226login:Penguin
垢版 |
2026/01/28(水) 12:46:13.10ID:12deMOZP
いい歳して今更オライリー頼んじゃった><
227login:Penguin
垢版 |
2026/01/29(木) 05:25:59.51ID:osGa1Y0N
今は何でもLLMに質問できるからな……
2026/07/21(火) 20:09:32.07ID:jNQYpuZQ
今日、初めて、zshの**(再帰検索)を知った。
めっちゃ便利やん。
find使わんでもfindを使ったような一括処理ができる
find . -type f -name "*.webp" -exec bash -c 'for f; do magick mogrify -format jpg "$f" && rm "$f"; done' _ {} +
と今まで書いていたのが
for f in **/*.webp; do magick mogrify -format jpg "$f" && rm "$f"; done
で済む
2026/07/22(水) 05:19:06.57ID:XaMozcjW
便利だね

ちなみにAIによると、bashでもver4.0以降なら
shopt -s globstar nullglob # ←これ必要
for f in **/*.webp; do magick mogrify -format jpg "$f" && rm -- "$f"; done
が出来るんじゃないかな
230login:Penguin
垢版 |
2026/07/22(水) 17:45:20.24ID:2vbXf8Gh
bash でも shopt -s globstar 実行したら ** が使えるらしい
ドット開始のファイル/フォルダ名も処理対象にしたいなら shopt -s dotglob も追加
231login:Penguin
垢版 |
2026/07/23(木) 05:36:43.65ID:Nwxr/JU4
ほー、
今までディレクトリ以下のファイル内にgrepするとき
grep keyword *.py
grep keyword */*.py
grep keyword */*/*.py
ってやってたけど
grep keyword **/*.py
で出来るんだ
2026/07/23(木) 06:52:10.68ID:S8xk3zuY
一つ一つmogrifyするんじゃなくて
見つけた.webを以下のように一気に並列処理するとどうだろうか

(magick mogrify -format jpg "01.web" && rm -- "01.web") &
(magick mogrify -format jpg "02.web" && rm -- "02.web") &
 …
(magick mogrify -format jpg "98.web" && rm -- "98.web") &
(magick mogrify -format jpg "99.web" && rm -- "99.web") &
wait

.webpが多いとハングアップ状態になると思うので
数個単位で分割とかCPU負荷に応じて並列実行数を可変にするとか
2026/07/23(木) 06:53:17.80ID:S8xk3zuY
> (magick mogrify -format jpg "01.web" && rm -- "01.web") &

↓

(magick mogrify -format jpg "01.webp" && rm -- "01.webp") &

拡張子間違ったw
234login:Penguin
垢版 |
2026/07/23(木) 11:30:46.05ID:H7rg7K1S
繰り返しは for 文か xargs 使おうぜ。
xargs で4並列実行の例:
printf "%s\n" {01..99}.webp | xargs -d $'\n' -n 1 -P 4 bash -c 'magick mogrify -format jpg "$1" && rm -- "$1"' --

# 通常は printf じゃなくて find . -name '*.webp' に差し替えで
235login:Penguin
垢版 |
2026/07/23(木) 11:32:13.65ID:vtHrtAQx
>>231
grep なら伝統的に -r オプションがあるだろ。
と筆が走ったはいいが、自分でほぼ使ったことがないので調べると、4行目のようにするらしい。

1 $ mkdir -p a/b/c/d
2 $ echo 'keyword' | tee a/b/c/d/keyword.py > a/b/c/d/keyword.txt
3 $ cd a
4 $ grep -r --include='*.py' 'keyword'
5 b/c/d/keyword.py:keyword
6 $
2026/07/23(木) 13:15:08.74ID:S8xk3zuY
>>234
xargsって並列個数指定出来るんだ

GNU parallelも良いかな
https://thinkit.co.jp/article/38957
237login:Penguin
垢版 |
2026/07/30(木) 19:19:43.23ID:3tgLljX9
シェルスクリプトは可読性も大事
238login:Penguin
垢版 |
2026/08/10(月) 21:35:37.59ID:un2GkJsF
いやーやっぱshellって凄いな。感謝しかないわ。
何なのこの効率のよさ。何処までも俺のガラクタ脳みその能力を最大限引き出してくれる感じ。覚えたbad knowhowを無駄なんかないぜって活かしてくれる駄目な俺の守護神。
何日もこなさないといけない事柄を考え抜いて、これ書くのまた何日かかるんだろ、これは簡単じゃないし、AIに聞いても助けにならない難易度のやつ、苦労するなと思ってたらshellで動きを確かめたら、あれ?これひょっとしてと思ったら、そのまま一時間ぐらいで書ききれてしまった。

浮いた時間は...精進する為に使えって事なんだね。攻めるぜ!
239login:Penguin
垢版 |
2026/08/10(月) 21:39:33.29ID:ad6JJENu
>>237
いまはAIあるから、問題ない。
読みやすくして、コメントつけて解説して
と指示したらいい。
240login:Penguin
垢版 |
2026/08/10(月) 21:40:24.18ID:ad6JJENu
>>238
書き込む前にAIで校正してもらったほうがいい。
241login:Penguin
垢版 |
2026/08/10(月) 22:58:42.30ID:WggsIsjK
shellcheckとshfmtすごいな
2026/08/11(火) 22:35:10.72ID:q9yeERdD
シェルスクリプトをshellと略すのはやめた方が良いようです

VS Code + Bash Debug
でbashシェルスクリプトをIDEでステップ実行・デバッグできるらしい
ということを知ったので時間ある時実験してみたい
243login:Penguin
垢版 |
2026/08/13(木) 13:34:10.43ID:UohDn0mz
俺はどうにもvscodeで動かないので端末からbashdbでやってる
このbashdbもmainブランチだと最新bashに対応してないので別ブランチを持ってこないと駄目だとか色々大変でした
244login:Penguin
垢版 |
2026/08/13(木) 13:35:45.11ID:O9dtbIvv
>>242
AIに任せたら全部正しくしてくれるから、デバックなんて作業しなくなった。
245login:Penguin
垢版 |
2026/08/13(木) 14:11:42.69ID:UohDn0mz
デバッグ作業が楽しいのにねえ
246login:Penguin
垢版 |
2026/08/13(木) 14:13:29.73ID:O9dtbIvv
>>245
AIに一度任せてみたら?いかに無駄な作業かわかるから。
2026/08/13(木) 14:22:58.62ID:bZYVXLxM
その作業をすることで得られる知見も有るから一概に無駄と片付けるのもどうかと
248login:Penguin
垢版 |
2026/08/13(木) 14:24:08.34ID:O9dtbIvv
>>247
そういう時代もあったけど、その知見も必要なくなっているのが今。
249login:Penguin
垢版 |
2026/08/13(木) 17:57:16.89ID:UohDn0mz
ちゃんとAIも併用してるから安心して
そう鼻息荒く説かなくて良いよw
250login:Penguin
垢版 |
2026/08/13(木) 18:41:43.71ID:O9dtbIvv
>>249
時代遅れ。
2026/08/13(木) 22:45:57.46ID:JohXWfgJ
AIが書いたコードを読まずに動かすのは怖いな

bashスクリプトをよく書いてもらってるけど
・空白混じりのファイル名を扱うところでバグる
・ファイルが存在しないのに実行するとバグる
・まるで勘違いのシステム操作
などといった超凡ミス・クリティカルミスがたびたびある
バグってシステム壊れたりお宝ファイルが消滅するリスクがある

人間が作ったコードはテストされていてそんなミスは少ないと思う
AIが書いたコードはレビューもテスターも自分が第一号
252login:Penguin
垢版 |
2026/08/13(木) 23:59:59.96ID:SfHC8Sm4
変数をダブルクォーテーションで括らない(=空白混じりの文字列を
複数引数としてパーズしてしまう)癖があるのは確かに気になる

コンパイル言語で括らないほうを好むように学習してしまってるんだろうな

ただ逆に自分より賢い/よりノウハウが詰め込まれた汎用性の高いコードを
返してくることもあるので侮れない
2026/08/14(金) 00:07:12.97ID:WBiwKfs4
定番なのに今まで自分は知らなかった手法を書いてくれた時は感動する
何やってるか分からないところは分かるまでAIに質問攻めしたり調べたりして
全て理解してからじゃないと実行しない
2026/08/14(金) 06:42:03.11ID:VWod7kn+
ChatGPTな登場してスクリプトの理解度が上がった
わからない行は丁寧に教えてくれるし、
知らなかった文法や、アルゴリズムも新しい知識として得られる
Linuxと生成AIって相性が本当によい
255login:Penguin
垢版 |
2026/08/14(金) 07:59:50.72ID:KOm0o+8U
もっともらしい嘘をつくのもAIなんだが
256login:Penguin
垢版 |
2026/08/14(金) 11:18:45.81ID:bVU+G+he
Google でコマンド調べてるとたまに存在しないコマンドラインオプション提示してくるよね...
2026/08/14(金) 16:17:13.99ID:y2KVGNtr
>>255
ハルシネーション前提で使い、必ず裏どりをしてから使えば問題はない。
自分で思い付かない方法や知らなかったことに対して気づきを与えてくれるのがAIの利点。
レスを投稿する


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