[過去ログ] シェルスクリプト総合 その26 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
2(3): 名無しさん@お腹いっぱい。 [sage] 2017/03/20(月) 12:18:18.85 AAS
すまん、立てたはいいがセキュリティ違反か何かでテンプレが貼れない
誰か貼れないか
4(3): 名無しさん@お腹いっぱい。 [sage] 2017/03/20(月) 14:13:27.13 AAS
>>11(1): 名無しさん@お腹いっぱい。 [sage] 2017/03/20(月) 12:07:26.41 AAS
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
外部リンク:src.illumos.org
外部リンク[html]:heirloom.sourceforge.net
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
2chスレ:unix
> □お約束
> □初心者へのアドバイス:
> □回答者への注意事項:
□じゃなくて■にして欲しい
148(3): 名無しさん@お腹いっぱい。 [sage] 2017/04/26(水) 01:01:14.37 AAS
くだらない話題で申し訳ないんすけど
シェルスクリプトで使う変数の規則とかってどう決めてます?
自分は_HOGEがいいかなって思ってるんですけど、マジョリティはどうかなと(ここがマジョリティかどうかは別だけど)
161(4): 名無しさん@お腹いっぱい。 [sage] 2017/05/06(土) 19:56:59.36 AAS
Debian GNU/Linuxでのbashなのですが、指定時間指定ユーザのログインが無ければ
シャットダウンするシェルスクリプト
外部リンク:pastebin.com
を勉強を兼ねて作ってみました。
正常に動作していますが、何か変なところありますか?
171(3): 名無しさん@お腹いっぱい。 [sage] 2017/05/07(日) 10:22:50.37 AAS
15分でシャットダウンって考えられない
まあ習作だからいいんだろうが
192(6): 名無しさん@お腹いっぱい。 [] 2017/05/19(金) 20:34:10.11 AAS
シェルってオブジェクト指向で書けないの?
暗黙的ルール多すぎだろ
213(4): sage [] 2017/06/02(金) 20:17:29.65 AAS
(head ; tail ) < file
で、先頭10行・末尾10行が出るのはどういう仕組み?
FreeBSD+ash、bash で確認。
man にはそれらしい記述がないように見える。
235(3): 名無しさん@お腹いっぱい。 [age] 2017/07/31(月) 07:52:04.50 AAS
# 使用しているのは GNU/Linux なので微妙にスレチかもしれないです。
GNU/Linux では /bin/sh が /bin/bash へのシンボリックリンクになっています。
私が利用している Fedora 26, Linux Kernel 4.11.11 では
bash$ readlink -e `which sh`
/usr/bin/bash
でした。(Fedora では /bin 全体が /usr/bin へのシンボリックリンクです。そういう方針です)
ファイルシステム等と共にシェルスクリプトの高速化を図ろうと,
Bourne Shell 互換で GNU bash より低機能で処理が高速な GNU dash を
/bin/sh へのシンボリックリンクにしました。
bash# rpm -qa | grep -E "^dash"
dash-0.5.9-2.fc26.x86_64
bash# unlink `which sh` && ln -s /usr/bin/dash /usr/bin/sh
再起動すると Xorg およびディスプレイマネージャは正常に起動したのですが,
ログイン後デスクトップ環境(Xfce4)が起動しません。
エラーログを取得しようにもコンソールl(/dev/tty1とか)にさえログインできず,
結局外部から /bin/sh を /usr/bin/bash に割り当て直して無事ログインできました。
原因はデスクトップ環境を構築しているシェルスクリプトのどこかに bash 独自の機能を要する文法があると思われます。
そこで質問なのですが,実際にログインプロセスを踏まずにそれを再現できるシェルスクリプトの作り方を教えてください。
長くて申し訳ないです。よろしくおねがいします。
236(3): 名無しさん@お腹いっぱい。 [sage] 2017/07/31(月) 07:59:41.19 AAS
内緒で妻のパソコンでインターネットして
ヌードとかHな写真を見まくっていたのですが、なんと
なにかの表紙に見ていたエロ画像がパソコンの後ろに
表示されたままになって元に戻せません!
前はプーさんの画像だったのに、今はアソコにバイブを挿した豊丸の画像です・・・。。
再起動しても表示されたままなんです。
早く直さないと妻が夜勤から帰ってきてしまします!(看護婦なので・・・・)
至急助けてください!!!
OSはウィンドウズXPです。
よろしくお願いします。
247(3): 名無しさん@お腹いっぱい。 [sage] 2017/08/01(火) 02:25:49.77 AAS
>>245ありがとうございます。
5000 箇所くらい不適合が見つかりました。
パッケージ管理されているシェルスクリプトも多くあり,
全部直すとシステムの破壊も(今更かもしれないですが)心配なのでやはり bash のままにしようかなとも考えています。
>>246246(1): 名無しさん@お腹いっぱい。 [sage] 2017/07/31(月) 16:15:55.29 AAS
/bin/shを差し替えるなんてFedora側で想定した使い方じゃないんだから
そもそもそんなことやっちゃいけない
その通りなんですが dash は bash の4倍早いと聞いたのでつい……。
313(3): 名無しさん@お腹いっぱい。 [sage] 2017/09/14(木) 10:48:20.75 AAS
みなさんコマンドの頭にバックスラッシュって付けてます?
私は安全を期して付けているのですが そうしているシェルスクリプトが以外に少ないので
気にしなくてもいいんですかね
331(4): 名無しさん@お腹いっぱい。 [age] 2017/09/18(月) 17:34:05.37 AAS
新しい関数として
ls () {
\ls --width=`\echo $COLUMN`
}
という関数を作って,ls のエイリアスとして動作させたいのですが,
コマンドラインで $ ls と入力すると無限ループに陥ります。
多分というか確実に関数 ls が自分自身を呼び出している為に生じる現象だと思います。
これを回避し,ls という関数を安全に作製するにはどうすればいいでしょうか。
常用しているシェル bash です。
bash 独自の拡張でそのような(関数の再帰を防ぐ)機能があれば教えて下さい。
367(4): 名無しさん@お腹いっぱい。 [] 2017/10/13(金) 18:57:11.77 AAS
ログイン時に読み込まれる ~/.profile ファイルは,「誰が」読み込んでいるのでしょうか。
普通 sh もしくはその代替シェルかなと思うのですが,実際はどうなのか気になります。
というのも,私が普段使っている Debian GNU/Linux ではデフォルトシェルは bash に指定しているのですが,~/.profile の中に bash っぽい変数 (${HOGE} という書き方) があったので。
370(4): 名無しさん@お腹いっぱい。 [sage] 2017/10/14(土) 00:33:15.35 AAS
>>369369(1): 名無しさん@お腹いっぱい。 [sage] 2017/10/13(金) 19:12:36.61 AAS
${HOGE}はbashに限らないよ
誰へのレス?
430(3): 名無しさん@お腹いっぱい。 [sage] 2017/12/02(土) 09:15:00.24 AAS
すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます
そうならない方法はあるのでしょうか
exec < file.tsv
while read LINE
do
ARRAY=(${LINE})
done
481(3): 名無しさん@お腹いっぱい。 [age] 2018/01/16(火) 15:07:55.74 AAS
POSIX xargs
外部リンク[html]:pubs.opengroup.org
には-0オプションがありませんが,どうにかしてxargsにナル文字区切りのデータを渡せませんかね。
もしくは xargs -0 がエラーになるOSをご存知でしたら教えて下さい。
FreeBSD, MacOS, Debian GNU/Linuxともにxargsに-0オプションはありました。
555(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/05(月) 21:25:58.36 AAS
そしてこっちの方で回答きたよ
くだらねえ質問はここに書き込め!Part 230
2chスレ:linux
同じ文章なのになんでこう反応が違うんだろうね
同じ文章なんだからレスする側の問題があるだろうね
質問する側と回答する側、立場は対等だって言ったら怒りそう
589(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/06(火) 23:49:32.51 AAS
>>583583(2): watarie [] 2018/03/06(火) 22:03:33.11 AAS
よろしくお願いします。
mac で bashです。 mdfindからパイプつないだ先でcpしたら
検索が間に合わなかったのかコピーし損ねがでてきます。
再度コピーしそこねたファイル名リストを同じようにこれに掛けると、
幾つか成功していくつかはコピーし損ねます。
function readMdfind() {
while read LINE;
do
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | xargs -J % cp -p "%" "$1" 2>/dev/null
done <${2}
引数の1はファイル名のリストが入ったテキストで、2はコピー先のフォルダになります。
ファイル名は殆どが一意にしてあるので、とりあえずヒットしたら良い感じです。
一度で取りこぼしのない良い方法はありませんでしょうか。
mdfindを知らんので問題解決に直接ならないけれど`done < ${2}`ではなく`done < "$2"`のほうがいいよ〜
もっと言うなら`cat "$2" | while read LINE;`のほうがいいかもね〜
* POSIX sh互換シェルは変数名に数字が来たらそこで読み取りを中断するので波括弧で変数名の範囲を明示しなくていい
* 変数$LINEに^Dとかが渡された時catコマンドと<リダイレクトで違いがある
短いんだけど参考: 外部リンク[html]:pubs.opengroup.org
604(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/08(木) 16:44:02.99 AAS
それ使うと出力側はこんな感じかな
while :;do sed -e 's/\(.*\)/^[[32m\1^[[m/' np1 & sed -e 's/\(.*\)/^[[33m\1^[[m/' np2 >&2; done
632(4): 名無しさん@お腹いっぱい。 [sage] 2018/03/10(土) 23:17:51.17 AAS
func() :
↑これ確かにシェバンを #! /bin/sh にすると通るけど
#! /usr/bin/env bash にすると撥ねられるな。
外部リンク[html]:pubs.opengroup.org
一応現行POSIXのシェル関数の定義はここに書いてあるけど、func() : は恐らく適合してるな。
多分bashの文法チェックが少しばかりおせっかいすぎるんだろう。
でもPOSIXに準拠した記法なのにエラーになるって嫌だなぁ
693(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/20(火) 08:25:32.50 AAS
「AACの場合」の前後の fi と if ... の2行を else に置き換えた上で、mediainfo コマンドの直後に
「HE-AAC だった場合」以降の if/else 文を移動、ではだめかな。
$? はすぐに別のコマンドの結果を格納してしまうので、
. mediainfo ...
. MEDIAINFO_RET=$?
. ...
. if [ $MEDIAINFO_RET = 0 ] ; then ...
みたいにコマンド実行直後に別の変数に回収してみるといいかもね。
700(8): 名無しさん@お腹いっぱい。 [sage] 2018/03/21(水) 23:13:42.44 AAS
>>690690(1): 名無しさん@お腹いっぱい。 [sage] 2018/03/20(火) 01:44:18.89 AAS
新Mac板から来ました。
カレントディレクトリ内にaacファイルがあれば、mediainfoでHE-AACかLC-AACか調査して、
l-smash muxerを使ってHE-AACとLC-AACでは別のコマンドにてm4aに詰め込みたいです。
以下のままだと、aacが無い場合は
-----
aacファイルはありません.
-----
iTunes MP4 muxing mode
./test.sh: 3 行: 27777 Segmentation fault: 11 muxer -i $file 〜
と表示されてしまいます。
AACファイルがない場合はmuxerのコマンドに進まないようにするにはどう書くといいんでしょうか?
続く
>>691691(1): 名無しさん@お腹いっぱい。 [sage] 2018/03/20(火) 01:44:57.18 AAS
続き
#!/usr/bin/env bash
for file in *.aac; do
if [ -e $file ] ; then
# aacファイルが存在する場合
mediainfo $file | grep '^Format profile *: LC$' >/dev/null 2>&1
#es=$?
else
echo "-----"
# aacファイルが存在しない場合
echo "aacファイルはありません."
fi
#------------------------------------
# HE-AACだった場合
if [ $? = 1 ] ; then
echo "-----"
muxer -i $file?sbr --file-format m4a -o ${file%.aac}.m4a
fi
#------------------------------------
#AACの場合
if [ $? = 0 ] ; then
echo "-----"
muxer -i $file --file-format m4a -o ${file%.aac}.m4a
fi
# .aacで終わるファイル名だけど、HEでもLEでもどちらでも無い場合はどうやるんだろうか
done
>>693
上の場合はmediainfoの終了ステイタスで判断して次にさらにif〜と進んでいるんですが、
LCかHE-AACかそのどっちでも無いかをcace〜muxer〜っとやるほうが確実なのかなと思いました。
その場合、
mediainfo $FILE | grep -E '^Format profile *: LC$|^Format profile *: HE-AAC / LC$'
で出てきた文字列をcaseに渡したいんですが、
case HOGE in
"*: LC" ) muxer〜;;
"*: HE-AAC / LC" ) muxer〜;;
* ) "AACではない";;
ecase
だった場合、HOGEにはどう書けばいいんでしょうか?
761(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/29(木) 10:03:19.16 AAS
空白制御文字入りファイル名は
for i in *
で扱えるので、工夫次第だな。
findと組み合わせるには-print0は役に立たんから-execで頑張るしかないけど。
791(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/29(木) 16:20:44.05 AAS
でも、find -exec じゃシェル関数に渡せないからなぁ
findは諦めろってことかな
817(3): 名無しさん@お腹いっぱい。 [sage] 2018/03/31(土) 01:12:03.45 AAS
aliasって面白いなー。これでなんか面白いことできそう
#!/bin/sh
alias foo="foo() { echo before; foo_; echo after; }; foo_"
foo() {
echo foo
}
unalias foo
foo
# ↓
# before
# foo
# after
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.064s