X



トップページLinux
122コメント40KB
シェルスクリプト質問スレ
0041login:Penguin
垢版 |
2021/06/06(日) 22:12:52.88ID:EGRoOpIk
標準出力の速度を制限したり、通信速度を表示するコマンドってありますか?
0042login:Penguin
垢版 |
2021/06/07(月) 02:12:34.71ID:a9qe7L9c
マルチは死ねば良いのに
0043login:Penguin
垢版 |
2021/06/07(月) 11:25:30.38ID:vEYRV92+
>>42
ありがとうございましたーーーー!
0044login:Penguin
垢版 |
2021/06/15(火) 12:05:40.24ID:WDa66Wnu
標準入力をreadして変数に溜め、望みの時間sleepして標準出力にechoするだけのwhileループじゃん
0045login:Penguin
垢版 |
2021/06/18(金) 16:00:55.53ID:bouE9vru
テキスト行の末尾に改行があればそのまま、なければ改行を追加、みたいなフィルタはどう書くのが簡単?

sed -z ...でできるんだけど、実はもっとあっさり!だったりしないかな。
0046login:Penguin
垢版 |
2021/06/18(金) 16:13:51.93ID:xODAv2nB
>>45
改行のない行の末尾って何よ。
0047login:Penguin
垢版 |
2021/06/18(金) 17:47:38.78ID:bnil1fLC
$ cat sample.txt
(snip)
This line is end of file.[EOF]



$ cat sample.txt
(snip)
This line is end of file.
[EOF]

にしたいってことじゃね?
0048login:Penguin
垢版 |
2021/06/26(土) 13:29:06.46ID:3hhiwe6I
cat aaa | awk '1'

これなら、sedよりあっさり?
とは言えないか。
0049login:Penguin
垢版 |
2021/07/03(土) 19:05:53.16ID:QPB5ysNZ
行末に改行があろうがなかろうが改行文字(\n)を削除してから
行末文字($)を改行文字(\n)で置き換える(行末に改行文字を追記する)
cat sample.txt | tr --delete '\n' | sed 's/$/\n/'
0050login:Penguin
垢版 |
2021/07/03(土) 22:59:15.09ID:EIKNeueg
よくこんな暗号みてぇなもん覚えられんなw
0051login:Penguin
垢版 |
2021/07/03(土) 23:33:42.29ID:jCdyWCtw
インタラクティブにシステムコール呼べたら楽かなと思ってbashのヒアストリングをgccに食わせたんだけど
gcc -o ${blob} <<ccode
\#include <...>
...
${fun}(${argv})
ccode
ld:/dev/fd/nn見つからないよ
collect2: ld returned 1

gccがldを非同期実行し、fdが回収された後にもldが動いてるのかと思い
(gcc ... & 1s)のように遅らせてもダメな謎
とりあえずmktempで動きはするけど、中間ファイル要らないクリーンなやり方ないかな

大体こんな雰囲気

code=$(mktemp --suffix \.c)
blob=…
(include/漁って型取得、引数成形)
IFS=, declare argv="$*"
cat <<c >|${code}
\#include <...>
...
${fun}(${argv})
...
c

gcc ${code} -o ${blob}
rm -rf ...
0052login:Penguin
垢版 |
2021/07/04(日) 18:31:48.85ID:kHg5RL8R
単にgccが標準入力をソースコード扱いしたりはしないってだけでは
/usr/lib/gcc/中略/cc1なら標準入力を取るけどこのパスの特定は面倒だし、素直に中間ファイル作ったほうが良さげでは
perlとかpythonで済むならそっちでも
0053login:Penguin
垢版 |
2021/07/05(月) 04:04:46.24ID:mQ20rymu
>>52
ファイル作ると監視システムに見つかるから、
それを避けたいって話じゃないの?
0054login:Penguin
垢版 |
2021/07/05(月) 19:18:48.07ID:Pk2boC0r
>>49
「行末に改行があろうがなかろうが」
すまん意味がわからん。
テキストファイルはCRLFかLFの改行コードを入れて
初めて行末になるもんだと思ってたが、
それ以外の行末もあんの?
0056login:Penguin
垢版 |
2021/07/05(月) 19:43:42.34ID:DgsJIMGq
ファイル末尾と言いたかったんじゃないの。
>>45はバグった仕様書を書くとタイプ。>>49は腐った仕様書に疑いを挟まずコーディングするタイプ。
0057login:Penguin
垢版 |
2021/07/05(月) 20:37:17.76ID:AjlMGFnC
>>56は理解力がゼロなタイプ。w
0058login:Penguin
垢版 |
2021/07/07(水) 16:25:53.24ID:ITjV3pwU
>>52
返信遅くなってごめん

進捗
プロトタイプはマクロだらけの生ヘッダよりman 2/3から抽出してテキストに纏めると楽にできた
手間は掛かったけどシェルから色々実験できて楽しい、見返りはあった
特定の変数に入れて返されるエラーコードはハードコードして拾うしか無さそうだけど、そこまではいいかな…

フロントエンドのgccでなく直接cc等呼ぶのも試してみる、ありがとう
0059login:Penguin
垢版 |
2021/07/07(水) 16:38:49.73ID:L74nIjWf
>>53
個人PC上での個人的な便利ツールなのでそこまで考えてないです
たまにrm失敗するので何らかのデーモンが見に来てるとは思いますが、呼ぶたびに前回のtmpをsuffixで識別&一掃してます…
0060login:Penguin
垢版 |
2021/07/21(水) 12:49:56.05ID:pz8Jt368
あるフォルダが存在するか否かによって分岐させたく

if [ -d ./$DIR]; then
hogehoge

という形でスクリプトを書いているのですが
現状~/shell_scriptにパスを通してここにそのスクリプトを置いて実行しているので~/shell_scriptに$DIRが存在するかで判定されてしまいます

これをなんとか実行するディレクトリでフォルダの有無を確認するようにしたいのですが何かいい方法はないでしょうか
0061login:Penguin
垢版 |
2021/07/21(水) 13:01:20.15ID:rGKkhVvF
./$DIRで既にカレントディレクトリからの相対のはずなので、どこかでcdしていなければ
スクリプトの置き場所が影響するなんてないはずだけど
わざわざ ~/shell_script に移動してから実行とかしてない?
0062login:Penguin
垢版 |
2021/07/21(水) 13:07:40.35ID:pz8Jt368
即レスありがとうございます
純粋にフォルダの指定方法が間違っていただけでした
ありがとうございます
0063login:Penguin
垢版 |
2021/07/29(木) 16:33:07.23ID:wWzOvGhA
環境変数指定のコマンドラインについて質問。

ENV=VALUE cmdline1
ENV=VALUE cmdline2

これをまとめたくて、次のようにするとエラー。

ENV=VALUE ( cmdline1 ; cmdline2 )

しかたがないので、次のようにしてます。

ENV=VALUE bash -c 'cmdline1 ; cmdline2'

なんかわかりにくいし、コマンドラインのクォートが面倒でもあるし、イヤな感じ。
もっときれいな書きかたはありませんか?
0064login:Penguin
垢版 |
2021/07/30(金) 03:08:07.29ID:Ju9d/5Jx
( ENV=VALUE; cmdline1; cmdline2 )
0065login:Penguin
垢版 |
2021/07/30(金) 11:42:44.94ID:nK/W8CHf
>>64
たしかに。w
そう書いたときもあったのに、なぜかなんか別物あつかいでした。
ありがとう。
0066login:Penguin
垢版 |
2021/08/01(日) 13:30:05.46ID:yremFR/t
#!/bin/sh -xってやると評価結果とかが色々表示されるけど、
スクリプトの中で別のスクリプト呼んでるような時に
その呼ばれたスクリプトも含めて色々表示させる方法ってありますか

そのスクリプトにいちいち-x付けてると面倒だし消し忘れとかもあるかなと

/bin/shを、/bin/sh -xして動かすようなものにしてみたけど
全てのシェルスクリプトの動作が変わり、OSがおかしくなって後悔した
0067login:Penguin
垢版 |
2021/08/02(月) 04:10:48.82ID:4HLiG8xo
簡単な方法は思いつかないけど…

MY_DEBUG みたいな適当な環境変数でも使って、呼ばれるスクリプトの冒頭で

if [[ -n MY_DEBUG ]]; then set -x; fi

みたいにするとか。
0068login:Penguin
垢版 |
2021/08/02(月) 04:32:43.59ID:FScFnmXW
なんでそんなにデバッグコードを仕込みたくないのか分からんが、どうしてもと言うなら
sed -f inject_debug_cmd.sed production_code.sh | sh -s

ファイル全部-xデバッグはちょっとアウトプット多すぎて辛いと思うけど
変な動きしてるブロックを囲んで、単語分割が予想通りかくらいしか確かめるくらい
まあそこが一番のハマりどころだから重宝するが
0069login:Penguin
垢版 |
2021/08/02(月) 04:41:51.79ID:FScFnmXW
最終的に残らなければいいだけなら、デバッグコードの行末にでも#dbgみたいなタグ付けといて、edでインプレースに消せばいいと思うけど
ソースツリー全体のシバンを消し忘れたくないだけならfind -name \*.shとかで列挙してデストロイ
0070login:Penguin
垢版 |
2021/08/02(月) 21:04:35.17ID:G1slmfmk
>>66
> /bin/shを、/bin/sh -xして動かすようなものにしてみたけど

そういう方向なら、もうちょっと凝って、呼び出し側のパスや特定の環境変数を見て切り替わるようにすればいいんでは。
無差別にやるから、init.rcとかで壊れるんやろ。
0071login:Penguin
垢版 |
2021/08/03(火) 17:17:31.55ID:D5seBhyr
Bashのsourceコマンドについて確認。

source内では、その呼び出し側で設定していたset -eとか-uは無効?

source対象は、呼び出し側で実行されるんだから、それ以前のsetオプションは有効のままだと思ってたけど、実際にはそうではなかったみたいなので。
0072login:Penguin
垢版 |
2021/08/04(水) 01:07:23.38ID:WvUJWj2l
確認( ー`дー´)キリッ

ソース読めよsourceだろ?
0074login:Penguin
垢版 |
2021/08/04(水) 18:07:10.99ID:+0tgCecS
>>66
仮にシェルスクリプトの中でzcatコマンド使っているとして
そのzcatコマンドがシェルスクリプトだったらどうすんの?
zcatコマンドもデバッグログ出ても問題ないんか?
0075login:Penguin
垢版 |
2021/08/04(水) 18:12:17.43ID:MbNyhIMz
>>74
> 後悔した

と書かれてあるだろう。
0076login:Penguin
垢版 |
2021/08/04(水) 18:13:46.82ID:+0tgCecS
>>75
後悔したあとに
何をしたいと言ってるのか
よく考えてみよう
0077login:Penguin
垢版 |
2021/08/04(水) 18:25:48.40ID:MbNyhIMz
>>76
○○なのか。後悔しない別の方法を探しているのだろう。
0078login:Penguin
垢版 |
2021/08/04(水) 18:55:26.52ID:+0tgCecS
だから後悔しない別の方法を探してるやつに
教えてやってんだろ
0079login:Penguin
垢版 |
2021/08/04(水) 20:28:55.97ID:MbNyhIMz
>>77
後悔しない別の方法がこれか。

> デバッグログ出ても問題ないんか?

数時間前の自身の発言すら記憶にないわけか。本物だな。
0080login:Penguin
垢版 |
2021/08/04(水) 21:50:09.74ID:+0tgCecS
ヤバイwこいつマジで日本語わかってないw

ワクチン打ちたくないって言ってる人に
コロナで死んでも問題ないんか?って言ったら

コロナで死ぬこと=後悔しないことだと思っちゃう人か
0081login:Penguin
垢版 |
2021/08/05(木) 01:52:55.30ID:wTkH8tWI
>>80
アホくさ。さらしage

>>66 (質問者)
> /bin/shを、/bin/sh -xして動かすようなものにしてみたけど
> 全てのシェルスクリプトの動作が変わり、OSがおかしくなって後悔した

>>74 (オマエ)
> 仮にシェルスクリプトの中でzcatコマンド使っているとして
> そのzcatコマンドがシェルスクリプトだったらどうすんの?
> zcatコマンドもデバッグログ出ても問題ないんか?
0082login:Penguin
垢版 |
2021/08/05(木) 10:14:38.35ID:ArLNvaBB
>>81
そこは質問じゃねーだろ
アホなのはお前だよ

>>66(質問者)
> #!/bin/sh -xってやると評価結果とかが色々表示されるけど、
> スクリプトの中で別のスクリプト呼んでるような時に
> その呼ばれたスクリプトも含めて色々表示させる方法ってありますか

↓こっちは質問じゃなくて経緯
> /bin/shを、/bin/sh -xして動かすようなものにしてみたけど
> 全てのシェルスクリプトの動作が変わり、OSがおかしくなって後悔した
後悔したから、それ以外の方法で
> スクリプトの中で別のスクリプト呼んでるような時に
> その呼ばれたスクリプトも含めて色々表示させる方法ってありますか
って聞いてんだよ

日本語勉強しな
0083login:Penguin
垢版 |
2021/08/05(木) 18:22:33.65ID:wTkH8tWI
>>82
何が、そこは質問じゃねーだよ。
つまり、質問を全文読まなかったため、質問者の後悔した事とほぼ同内容のレスを、当の質問者に返してしまったというオチか。
なんだか言い訳すればするほど語るに落ちるやつだな。
0084login:Penguin
垢版 |
2021/08/05(木) 18:41:49.01ID:amyLRgLX
語るに落ちるって、、
0085login:Penguin
垢版 |
2021/08/06(金) 04:06:13.46ID:01/4SE7K
ああ、「質問者の後悔した事とほぼ同内容のレス」だと思ってんのか
これこそ語るに落ちるだな
0086login:Penguin
垢版 |
2021/08/06(金) 04:11:09.65ID:01/4SE7K
質問者は/bin/shを/bin/sh -x に変えたからだめだと思ってんだよ
だから「後悔した後に」特定のスクリプト以下なら大丈夫だろうと思って質問してるんだろ
だからそれじゃだめだよってzcatの実例を出してるんだろ

まったく本当に理解力がないやつだな
0087login:Penguin
垢版 |
2021/08/06(金) 06:11:49.17ID:JRdsxYSZ
そこまで大規模な調査をするのなら、神ツール・strace でも使えば?

バグの場所を突き止めることは、同じ
0088login:Penguin
垢版 |
2021/08/06(金) 18:35:53.85ID:8QWMGd91
>>85
どんどん落ちるね。

> 全てのシェルスクリプトの動作が変わり、OSがおかしくなって後悔した

と、想定外のスクリプトへの影響を悔いているところに、想定外のzcatスクリプトもありまっせなんてのは言わずもがな。
質問者の後悔を再提示しているだけだよ。お前の中では懸隔しているとしてもね。
0089login:Penguin
垢版 |
2021/08/07(土) 01:18:14.18ID:eQXGjGlL
>>88

この2行も読めないの?

> だから「後悔した後に」特定のスクリプト以下なら大丈夫だろうと思って質問してるんだろ
> だからそれじゃだめだよってzcatの実例を出してるんだろ

質問者が後悔したあとに
またやろうとしてるんだから
再提示するのは当たり前やろw

zcatの問題に気づいてないんだから
0090login:Penguin
垢版 |
2021/08/07(土) 06:40:17.95ID:bukJwykK
>>89
また落ちた。それはお前の空想。
質問者は
> またやろうとして
いない。「色々表示させる方法」を尋ねている。表示させる方法イコールsh -xはお前の短絡思考。

まぁ想定外スクリプトも、質問者は言及済みであり、余人には言うまでもない当然の事でバカバカしい限りだが、お前の中では蒸し返す必要のある重要事だったんだろう。
無用の親切だが、親切であるのは悪いことではない。
0091login:Penguin
垢版 |
2021/08/07(土) 08:36:34.67ID:eQXGjGlL
> 表示させる方法イコールsh -xはお前の短絡思考。

表示させる方法イコールsh -xなんて
一言も書いてないんだが

それこそお前の短絡思考じゃんw
0092login:Penguin
垢版 |
2021/08/07(土) 08:37:18.30ID:eQXGjGlL
> まぁ想定外スクリプトも、質問者は言及済みであり

どこにも言及されてない
0093login:Penguin
垢版 |
2021/08/08(日) 16:34:09.41ID:uaAZpGm/
set -x
export SHELLOPTS
じゃだめなん?
0094login:Penguin
垢版 |
2022/02/01(火) 04:05:13.76ID:3LA5ehtE
WLANのデバイス名を環境変数に入れたいんだけど、どうすればいい?
0095login:Penguin
垢版 |
2022/02/01(火) 13:11:21.77ID:Jt/r8+cT
WLANのデバイス名の取得の仕方か
知らんな
0096login:Penguin
垢版 |
2022/02/03(木) 13:41:25.48ID:UJnTdaDv
ifconfigかiwconfigの出力をawkで加工して環境変数にセット
0097login:Penguin
垢版 |
2022/02/22(火) 19:14:57.59ID:rLLu1q4J
yumで、パッケージ内の特定ファイルだけをインストールする方法はある?

パッケージファイルをダウンロードしてからrpmコマンドで特定ファイルを抽出したらいいんだけど、もっとあっさりしたやりかたはないんかなー、と。
0098login:Penguin
垢版 |
2022/02/23(水) 02:31:26.98ID:kQJL8BkX
そんな機能需要あるんか?
0099login:Penguin
垢版 |
2022/02/23(水) 13:13:15.40ID:C0MAsSUq
パッケージにもいろいろあるからな。
スクリプトつめあわせみたいなのから、いくつかだけ選ぶことはあってもよさそう。
0100login:Penguin
垢版 |
2022/02/23(水) 15:08:34.10ID:kQJL8BkX
ディスク容量の節約でもしたいってこと?
それならalpineとか使うべきだろう
0101login:Penguin
垢版 |
2022/02/23(水) 16:06:10.98ID:C0MAsSUq
おまえはそうしたいならそうしろ。
需要の有無ならある、て話。
0102login:Penguin
垢版 |
2022/02/24(木) 04:29:15.80ID:zujeXimD
なんのためにそうしたいのか聞いただけでこの反応w
やることが目的になってんのな
0103login:Penguin
垢版 |
2022/02/24(木) 05:06:58.27ID:36R3x1i1
なにがどうシェルスクリプトに関連するのか全然わからん
0104login:Penguin
垢版 |
2023/04/29(土) 15:20:27.08ID:lnHHFRE1
<main>
<sub_aaa id=A>
<sub_bbb>
</sub_bbb>
</sub_aaa>
<sub_aaa id=B>
<sub_ccc>
</sub_ccc>
</sub_aaa>
</main>


A.xml B.xml
<main> <main>
<sub_aaa id=A> <sub_aaa id=B>
<sub_bbb> <sub_ccc>
</sub_bbb> </sub_ccc>
</sub_aaa> </sub_aaa>
</main> </main>

と言った感じで<sub_aaa>タグ毎にファイル出力する方法教えてください。
0105login:Penguin
垢版 |
2023/04/29(土) 19:13:08.50ID:lnHHFRE1
すみません
スペースで埋めたところがスペース1個文しかインデントできてなくて見にくくてすみません。
0106login:Penguin
垢版 |
2023/04/30(日) 10:10:26.58ID:aW8IbgMG
シェルスクリプトって文字列を""で囲まなくてもいいんですか?
0107login:Penguin
垢版 |
2023/05/01(月) 10:46:14.14ID:+eCh8O00
>>104

cat ab.xml | sed -n '/<sub_aaa/,/<\/sub_aaa/'p | awk -F[=\>] '/<sub_aaa/{OUT=$2}{print $0 >> OUT".xml"}'
0109login:Penguin
垢版 |
2023/08/03(木) 22:45:13.09ID:NDiGHoK1
シェルスクリプトで教えてください

ファイル中の文字について、以下のような置換をしたいです
前 後
a →X
b →U
c →E
d →P
:::
y →A
z →M

前と後は1:1なのですが、変換後の並びは不規則です

sed -e 's/a/X/g' -e 's/b/U/g' 〜〜〜 とaからzまで並べることで
一応置換はできるのですが、長大な行となってしまっており、
どうにかならないかと思ってます
0110login:Penguin
垢版 |
2023/08/08(火) 20:00:07.01ID:A0ngI8KS
trコマンドが良いよ
0111login:Penguin
垢版 |
2023/08/08(火) 22:07:51.95ID:W7teOVBr
>>109
cat filename | tr [a-z] [XUEP〜AM]
というのはどうだろう
0112login:Penguin
垢版 |
2023/09/21(木) 10:24:58.83ID:QknJaCcR
mvを常にmv -iで実行するようにしたいのですがどうすればいいですか
0113login:Penguin
垢版 |
2023/09/21(木) 18:47:10.64ID:Vez6r55J
>112
"常に"がどういう意味かによる
ターミナルから自分の手でmvするとき常になのか、自分のユーザー名でmvするとき常になのか、全てのユーザーがmvするとき常になのか
たぶん下記のようにすればいいんだろうけどなにか副作用があるかもしれない

$ cat ~/.bashrc
mv() { command -p mv -i "$@"; } #or mv() { /usr/bin/mv -i "$@"; }

$ cat ~/bin/mv
#!/bin/sh
/usr/bin/mv -i "$@"

$ cat /usr/local/bin/mv
#!/bin/sh
/usr/bin/mv -i "$@"
0114login:Penguin
垢版 |
2023/09/22(金) 17:12:51.79ID:Ot0FYrO8
ありがとうございます
なるほど、あまり影響が大きいのは怖いですね、一番上がよさそうですね
強制的にリネームするときはmv -fとやるという運用を考えています
0115login:Penguin
垢版 |
2024/01/01(月) 04:07:52.94ID:U28b5u0i
コマンドラインより与えられ、$1や$2等に入れられたオプションを
以下のように表示したいと思ってます

./aaa.sh a bb ccc
$1=a
$2=bb
$3=ccc

以下のようなスクリプトで「$n=」まではできたのですが、その後のxxxxにあたる、
位置パラメータを示す$と、変数iを組み合わせてできた「$1」を
更に評価した結果である「a」や「bb」を得る方法が分かりません

#!/bin/bash
for i in `seq 1 $#`; do
echo "\$${i}=xxxx"
done

どのようにすればよいか教えてください
0116login:Penguin
垢版 |
2024/01/01(月) 21:58:23.87ID:d2imTNCC
>115
やりたいことを実現するだけなら、難しく考えずに最初の引数を表示したらshiftすればいいと思う

for i in $(seq 1 $#)
do
    echo "\$$((i))=\"${1}\""
    shift
done
0117login:Penguin
垢版 |
2024/01/31(水) 20:12:54.00ID:E0KTKxgk
引数が無限みたいな前提の書き方はやめた方がいい
0118login:Penguin
垢版 |
2024/01/31(水) 20:15:40.65ID:E0KTKxgk
>>115
オプションの概念がないのか?
引数の順番だけで判断すると、複雑なものになって想定外の使われ方、使い方をしてしまう
0119sage
垢版 |
2024/02/01(木) 04:56:02.13ID:Qr69cuyL
#/bin/sh
for i in `seq 1 $#`; do
eval echo \\\$$i=\$${i}
done
0120login:Penguin
垢版 |
2024/02/23(金) 20:08:14.18ID:rMPWJsz1
ラズパイOSの起動時にシェルが自動で動くよう試しています
打ち込みでシェルの内容が動くことは確認できるのですが、cronやsystemd では、思うように動きません。シェルの内容がおかしいのでしょうか

#!/bin/sh
cd /home/dtt/google-home-player/
nohup lt -s modulenotfound -p 3000 >/dev/null 2>&1 &
nohup /usr/local/bin/node server_for_line.js >/dev/null 2>&1 &
0121login:Penguin
垢版 |
2024/02/24(土) 23:29:05.40ID:gz5QbA2v
nohupコマンドを使っているが、フォアグラウンドとバックグラウンドもわかってないのかな?
0122login:Penguin
垢版 |
2024/02/25(日) 21:48:03.30ID:yfGJdlYS
>>121
hpのコピペなんで。systemdとforeverで分けて
レスを投稿する


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