シェルスクリプト質問スレ (227レス)
上下前次1-新
1: 2019/04/12(金)20:22 ID:ga+nyK60(1) AAS
シェルスクリプトに関する質問スレです。
2: 2019/04/13(土)08:00 ID:mHs4A1+v(1) AAS
宿題は自力でやること
3(1): 2019/10/27(日)23:06 ID:Q9HmdE9E(1/2) AAS
質問お願いしましす。
リモートで最新の1つを残してログを削除したいです。
$ ssh host 'rm -f `ls -1t /home/app/201910/*.log | tail -n+2`'
これを複数のディレクトリで実行しようとしたのが、
var1=201909
var2=201910
array=($var1 $var2)
for var in ${array[@]}
do
ssh host rm -f $(tail -n+2 $(ls -1t /home/app/${var}/*.log))
省5
4: 2019/10/27(日)23:07 ID:Q9HmdE9E(2/2) AAS
上げさせてください。
5: 2019/10/27(日)23:37 ID:KbsZ4Niq(1) AAS
こっちでやれ
シェルスクリプト総合 その32
2chスレ:tech
6(1): 2019/10/28(月)12:28 ID:GFu2H5Oy(1) AAS
>>3
>質問お願いしましす。
お願いされても...特に質問はありません
7: 2019/10/28(月)15:42 ID:p0ChFQHF(1) AAS
>>6
もげろ!
8: 2019/10/29(火)02:44 ID:CaAjlyZm(1) AAS
お願いされたから反応したのに、もげろってどういうことよ
9: 2020/04/17(金)21:01 ID:ueg9oyq0(1) AAS
ビデオ(Totem)で曲4つをループして聴くシェルスクリプトを作ったのですが、1曲目だけで終わってしまいます。
以下ソースです
#!/bin/bash
while true
do
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/WinterSong.ogg ;
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/世界中の誰よりきっと.mp3 ;
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/サイレント・イヴ.ogg ;
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/Itsuka no Merry Christmas.mp3
done
省1
10: 2020/04/18(土)02:06 ID:jLP8+C0w(1) AAS
日本語のパス・ファイル名は、使えるの?
.ogg/.mp3 も、両方とも使えるの?
それと、あちこちに、echo `date`
を入れて、時刻を見た方がよい
do
echo `date`
/usr/bin/totem 何々
echo `date`
/usr/bin/totem 何々
echo `date`
省1
11: 2020/09/25(金)17:01 ID:rcXzyqi8(1) AAS
#cat test.sh
line=aaa,bbb,ccc
arr=($(IFS=,; echo $line))
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
#sh test.sh
aaa
bbb
ccc
省10
12(1): 2020/11/28(土)15:04 ID:MDlmtOMg(1) AAS
bash(1)にはgotoという文言は見えないが、gotoに類した命令ある?
13: 2020/11/28(土)15:46 ID:MhK0ESFR(1) AAS
そういやシェルスクリプトにgotoがないっていうのは
シェルスクリプト(のオリジナル)が作られた時期から見て
先見の明を持ってるんじゃねーか?
当時の言語はgotoはあって当然だったと思うんだが
14: 2020/11/28(土)16:07 ID:YtZOOFJV(1) AAS
シェルスクリプトは完全逐次処理やろ。
gotoを実装するのはかなり難しいと思うが。
先見の明よりも、たんに面倒だったのでは。
15: 2020/11/28(土)20:19 ID:e4eFQGLq(1) AAS
逐次処理って、DOSのBATファイルじゃあるまいし。
つか、BATにすらGOTOあるのに。
16: 2020/11/28(土)21:21 ID:H/pve6/s(1) AAS
gotoなんてラベルの場所に飛ぶだけじゃん
17(1): 2020/12/04(金)02:23 ID:mk+BcjcR(1/2) AAS
また先頭から読み直すの?
当時のメモリの量を知らないわけでもあるまいに
18: 2020/12/04(金)02:40 ID:PAEzIreY(1) AAS
>>17 の意味を、誰か説明してくれ。
19: 2020/12/04(金)13:13 ID:ywaWilQb(1) AAS
メモリは使ったら無くなるんですよ?
再起動しなければどんどん減っていきます。
と言ってるんだろ
20(1): 2020/12/04(金)23:02 ID:mk+BcjcR(2/2) AAS
大容量16KBのメモリしかないシステムでgotoを実現しようと思ったら
スクリプトファイルを読み直す以外の対応はできないだろ
その間にファイルが書き換わっていたらどうすんの?
とか考えもせずに簡単とか言い出すようなバカには理解できなかったか
21(1): 2020/12/04(金)23:14 ID:+G9n1HNW(1) AAS
gotoなんてアセンブラで2〜4バイト程度で実現できるやろ
16KBなんて広大だ
22: 2020/12/04(金)23:32 ID:29P9oGAn(1) AAS
>>21
お花畑で裏山。w
23: 2020/12/05(土)02:05 ID:Ts+UhpZc(1/2) AAS
MSXは16KBの機種もあってgotoがあるBASIC搭載ですが
スクリプト?読み直す?何を言ってるんでしょうか?
24: 2020/12/05(土)02:27 ID:aPsfjGiM(1/2) AAS
スクリプトスレで「スクリプト?」とか言い出すようなお爺ちゃんは黙っててくれよ
25(2): 2020/12/05(土)03:09 ID:s8sjtagm(1/2) AAS
>>20
だから何が言いたいんだ?
例えば、大容量640KBのメモリしかないDOSのBATファイルならスクリプトファイルを読み直してるんだろ。動作中にファイルが書き換わってたら、変わったように動作するんだから。
そんなの実現方法の一つに過ぎんだろ。
26(1): 2020/12/05(土)04:50 ID:aPsfjGiM(2/2) AAS
>>25
君みたいながさつな人間にはそんな仕様で問題ないのかもしれんが
sh作った人はそうじゃなかったってことだよ
27: 2020/12/05(土)09:01 ID:Ts+UhpZc(2/2) AAS
>>25
お前はバッチファイル特有の話をしただけだったってことが真相かw
28(1): 2020/12/05(土)10:16 ID:s8sjtagm(2/2) AAS
>>26
sh作った人の志向であったというなら、ハナからそう言えばいい。
小メモリだとGOTOを実装できないなどという、知ったかぶりにも満たない妄言は要らない。
29(2): 2020/12/05(土)22:26 ID:gKsDqE5D(1) AAS
>>28
とりあえず、gotoを追加するパッチでも提出してこいよ?
30(3): 2020/12/06(日)00:58 ID:cfA/TiGD(1/7) AAS
>>29
breakとかcontinueがそれ
gotoの乱用を防ぐために、ループの開始と終わりにしか
gotoできないようになってる
31(2): 2020/12/06(日)01:03 ID:pAeBLops(1/2) AAS
>>30
それこそ、知ったかぶりにも満たない妄言なんしゃねえの?w
32: 2020/12/06(日)01:52 ID:cfA/TiGD(2/7) AAS
>>31
どういう意味?
breakとかcontinueは実際にジャンプしてるんだが?
33: 2020/12/06(日)01:56 ID:/kQnwSfL(1) AAS
>>31
>>30 の言うことは正しい。
そもそも、WHILE、FOR は GOTO [後方] の亜種だし、IF THEN は本質的に IF GOTO だ。
つまり、GOTO が技術的理由で実現できなければ、全てのフロー制御は実現できない。というか、GOTO 機能自体は単なるマシン語命令なので、実現できない理由は特に無い。
言語の基礎知識レベルの話だが、これ等が知ったかぶりや妄言に聞こえるようでは、救いようが無いね。
34: 2020/12/06(日)02:08 ID:cfA/TiGD(3/7) AAS
GOTO禁止ブームや構造化プログラミングがでたのっていつなんだろう?
シェルスクリプトにGOTOがないのはその話を踏まえた上の設計だよね?
35: 2020/12/06(日)02:08 ID:jGLSVz7n(1) AAS
スクリプト言語の制御構造をマシン語命令とか言うバカ、初めて見た
36: 2020/12/06(日)02:09 ID:cfA/TiGD(4/7) AAS
1968年か
1968年の投書「goto文は有害」
外部リンク:ja.wikipedia.org
37(1): 2020/12/06(日)02:11 ID:cfA/TiGD(5/7) AAS
最初のシェルは1971年だから、やっぱりGOTO有害論のあとか
外部リンク:ja.wikipedia.org
38: 2020/12/06(日)02:16 ID:pAeBLops(2/2) AAS
>>37
しかし、「有害論」の影響なのかどうかはわからない。
その後でも、gotoのある言語もない言語もあるわけで。
39: 2020/12/06(日)02:30 ID:cfA/TiGD(6/7) AAS
> Thompson Shell のデザインは、Multics の模倣を意図したものだった。
> プログラムの分岐処理で欠かせない if や goto といった語ですら、別々のコマンドとして実装されていた[1]。
って書いていたから当時はまだgotoあったんだな
改良するにつれてなくしたと
40: 2020/12/06(日)02:33 ID:cfA/TiGD(7/7) AAS
POSIXシェルの前身であるBourne Shellでようやくgotoが消えたっぽい
外部リンク:ja.wikipedia.org
41: 2021/06/06(日)22:12 ID:EGRoOpIk(1) AAS
標準出力の速度を制限したり、通信速度を表示するコマンドってありますか?
42(1): 2021/06/07(月)02:12 ID:a9qe7L9c(1) AAS
マルチは死ねば良いのに
43: 2021/06/07(月)11:25 ID:vEYRV92+(1) AAS
>>42
ありがとうございましたーーーー!
44: 2021/06/15(火)12:05 ID:WDa66Wnu(1) AAS
標準入力をreadして変数に溜め、望みの時間sleepして標準出力にechoするだけのwhileループじゃん
45(3): 2021/06/18(金)16:00 ID:bouE9vru(1) AAS
テキスト行の末尾に改行があればそのまま、なければ改行を追加、みたいなフィルタはどう書くのが簡単?
sed -z ...でできるんだけど、実はもっとあっさり!だったりしないかな。
46: 2021/06/18(金)16:13 ID:xODAv2nB(1) AAS
>>45
改行のない行の末尾って何よ。
47: 2021/06/18(金)17:47 ID:bnil1fLC(1) AAS
$ cat sample.txt
(snip)
This line is end of file.[EOF]
を
$ cat sample.txt
(snip)
This line is end of file.
[EOF]
にしたいってことじゃね?
48: 2021/06/26(土)13:29 ID:3hhiwe6I(1) AAS
cat aaa | awk '1'
これなら、sedよりあっさり?
とは言えないか。
49(2): 2021/07/03(土)19:05 ID:QPB5ysNZ(1) AAS
行末に改行があろうがなかろうが改行文字(\n)を削除してから
行末文字($)を改行文字(\n)で置き換える(行末に改行文字を追記する)
cat sample.txt | tr --delete '\n' | sed 's/$/\n/'
50: 2021/07/03(土)22:59 ID:EIKNeueg(1) AAS
よくこんな暗号みてぇなもん覚えられんなw
51: 2021/07/03(土)23:33 ID:jCdyWCtw(1) AAS
インタラクティブにシステムコール呼べたら楽かなと思ってbashのヒアストリングをgccに食わせたんだけど
gcc -o ${blob} <<ccode
\#include <...>
...
${fun}(${argv})
ccode
ld:/dev/fd/nn見つからないよ
collect2: ld returned 1
gccがldを非同期実行し、fdが回収された後にもldが動いてるのかと思い
(gcc ... & 1s)のように遅らせてもダメな謎
省14
52(2): 2021/07/04(日)18:31 ID:kHg5RL8R(1) AAS
単にgccが標準入力をソースコード扱いしたりはしないってだけでは
/usr/lib/gcc/中略/cc1なら標準入力を取るけどこのパスの特定は面倒だし、素直に中間ファイル作ったほうが良さげでは
perlとかpythonで済むならそっちでも
53(1): 2021/07/05(月)04:04 ID:mQ20rymu(1) AAS
>>52
ファイル作ると監視システムに見つかるから、
それを避けたいって話じゃないの?
54(1): 2021/07/05(月)19:18 ID:Pk2boC0r(1) AAS
>>49
「行末に改行があろうがなかろうが」
すまん意味がわからん。
テキストファイルはCRLFかLFの改行コードを入れて
初めて行末になるもんだと思ってたが、
それ以外の行末もあんの?
55: 2021/07/05(月)19:33 ID:AjlMGFnC(1/2) AAS
>>54
ファイル終端
56(1): 2021/07/05(月)19:43 ID:DgsJIMGq(1) AAS
ファイル末尾と言いたかったんじゃないの。
>>45はバグった仕様書を書くとタイプ。>>49は腐った仕様書に疑いを挟まずコーディングするタイプ。
57: 2021/07/05(月)20:37 ID:AjlMGFnC(2/2) AAS
>>56は理解力がゼロなタイプ。w
58: 2021/07/07(水)16:25 ID:ITjV3pwU(1) AAS
>>52
返信遅くなってごめん
進捗
プロトタイプはマクロだらけの生ヘッダよりman 2/3から抽出してテキストに纏めると楽にできた
手間は掛かったけどシェルから色々実験できて楽しい、見返りはあった
特定の変数に入れて返されるエラーコードはハードコードして拾うしか無さそうだけど、そこまではいいかな…
フロントエンドのgccでなく直接cc等呼ぶのも試してみる、ありがとう
59: 2021/07/07(水)16:38 ID:L74nIjWf(1) AAS
>>53
個人PC上での個人的な便利ツールなのでそこまで考えてないです
たまにrm失敗するので何らかのデーモンが見に来てるとは思いますが、呼ぶたびに前回のtmpをsuffixで識別&一掃してます…
60: 2021/07/21(水)12:49 ID:pz8Jt368(1/2) AAS
あるフォルダが存在するか否かによって分岐させたく
if [ -d ./$DIR]; then
hogehoge
という形でスクリプトを書いているのですが
現状~/shell_scriptにパスを通してここにそのスクリプトを置いて実行しているので~/shell_scriptに$DIRが存在するかで判定されてしまいます
これをなんとか実行するディレクトリでフォルダの有無を確認するようにしたいのですが何かいい方法はないでしょうか
61: 2021/07/21(水)13:01 ID:rGKkhVvF(1) AAS
./$DIRで既にカレントディレクトリからの相対のはずなので、どこかでcdしていなければ
スクリプトの置き場所が影響するなんてないはずだけど
わざわざ ~/shell_script に移動してから実行とかしてない?
62: 2021/07/21(水)13:07 ID:pz8Jt368(2/2) AAS
即レスありがとうございます
純粋にフォルダの指定方法が間違っていただけでした
ありがとうございます
63: 2021/07/29(木)16:33 ID:wWzOvGhA(1) AAS
環境変数指定のコマンドラインについて質問。
ENV=VALUE cmdline1
ENV=VALUE cmdline2
これをまとめたくて、次のようにするとエラー。
ENV=VALUE ( cmdline1 ; cmdline2 )
しかたがないので、次のようにしてます。
省3
64(1): 2021/07/30(金)03:08 ID:Ju9d/5Jx(1) AAS
( ENV=VALUE; cmdline1; cmdline2 )
65: 2021/07/30(金)11:42 ID:nK/W8CHf(1) AAS
>>64
たしかに。w
そう書いたときもあったのに、なぜかなんか別物あつかいでした。
ありがとう。
66(4): 2021/08/01(日)13:30 ID:yremFR/t(1) AAS
#!/bin/sh -xってやると評価結果とかが色々表示されるけど、
スクリプトの中で別のスクリプト呼んでるような時に
その呼ばれたスクリプトも含めて色々表示させる方法ってありますか
そのスクリプトにいちいち-x付けてると面倒だし消し忘れとかもあるかなと
/bin/shを、/bin/sh -xして動かすようなものにしてみたけど
全てのシェルスクリプトの動作が変わり、OSがおかしくなって後悔した
67: 2021/08/02(月)04:10 ID:4HLiG8xo(1) AAS
簡単な方法は思いつかないけど…
MY_DEBUG みたいな適当な環境変数でも使って、呼ばれるスクリプトの冒頭で
if [[ -n MY_DEBUG ]]; then set -x; fi
みたいにするとか。
68: 2021/08/02(月)04:32 ID:FScFnmXW(1/2) AAS
なんでそんなにデバッグコードを仕込みたくないのか分からんが、どうしてもと言うなら
sed -f inject_debug_cmd.sed production_code.sh | sh -s
ファイル全部-xデバッグはちょっとアウトプット多すぎて辛いと思うけど
変な動きしてるブロックを囲んで、単語分割が予想通りかくらいしか確かめるくらい
まあそこが一番のハマりどころだから重宝するが
69: 2021/08/02(月)04:41 ID:FScFnmXW(2/2) AAS
最終的に残らなければいいだけなら、デバッグコードの行末にでも#dbgみたいなタグ付けといて、edでインプレースに消せばいいと思うけど
ソースツリー全体のシバンを消し忘れたくないだけならfind -name \*.shとかで列挙してデストロイ
70: 2021/08/02(月)21:04 ID:G1slmfmk(1) AAS
>>66
> /bin/shを、/bin/sh -xして動かすようなものにしてみたけど
そういう方向なら、もうちょっと凝って、呼び出し側のパスや特定の環境変数を見て切り替わるようにすればいいんでは。
無差別にやるから、init.rcとかで壊れるんやろ。
71(1): 2021/08/03(火)17:17 ID:D5seBhyr(1) AAS
Bashのsourceコマンドについて確認。
source内では、その呼び出し側で設定していたset -eとか-uは無効?
source対象は、呼び出し側で実行されるんだから、それ以前のsetオプションは有効のままだと思ってたけど、実際にはそうではなかったみたいなので。
72: 2021/08/04(水)01:07 ID:WvUJWj2l(1) AAS
確認( ー`дー´)キリッ
ソース読めよsourceだろ?
73: 2021/08/04(水)18:00 ID:+0tgCecS(1/5) AAS
>>71
自分でテストしろ
74(2): 2021/08/04(水)18:07 ID:+0tgCecS(2/5) AAS
>>66
仮にシェルスクリプトの中でzcatコマンド使っているとして
そのzcatコマンドがシェルスクリプトだったらどうすんの?
zcatコマンドもデバッグログ出ても問題ないんか?
75(1): 2021/08/04(水)18:12 ID:MbNyhIMz(1/3) AAS
>>74
> 後悔した
と書かれてあるだろう。
上下前次1-新書関写板覧索設栞歴
あと 152 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.023s