タグ付けされた質問 「shell-script」

シェルスクリプト、シェルによって解釈される実行可能ファイル(bash、zshなど)に関する質問。

6
トラップ、ERR、およびエラー行のエコー
トラップを使用してすべてのエラーで関数を呼び出すエラー報告を作成しようとしています: Trap "_func" ERR ERR信号の送信元の行を取得することはできますか?シェルはbashです。 それを行うと、使用されたコマンドを読んで報告し、いくつかのアクションを記録/実行できます。 それとも私はこれですべて間違っていますか? 私は以下でテストしました: #!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf" そして$LINENO2を返しています。動作していません。


5
$ REPLYが数値の範囲内にあるかどうかを確認します
Bashを使用してLinux用のシェルスクリプトを作成し、ビデオファイルをMP4に変換しています。そのために、私はavconvwith libvorbisfor audio を使用しています。 スクリプト内で、ユーザーに質問があります。 read -p "- Audio Quality [scale from -2 to 10] ? " if [ -n "$REPLY" ] ; then ABITRATE="-aq $REPLY" fi 私の「ABITRATE」文字列は最終的なavconvコマンドラインに入ります。 しかし、ユーザーにKb(キロビット)の値でその質問に答え、それをlibvorbis使用するスケールに変換する機会をユーザーに与えたいと思います。「-2から10までのスケール」は次のとおりです。 Quality Kbit/s Normalization ----------------------------- -2 ~32 y -1 ~48 y 0 ~64 y 1 ~80 y 2 ~96 y 3 ~112 …

1
bash caseステートメントはカスケードできますか?
私はこのようなことをしようとしています: case $level in 3) echo "Level Three" 2) echo "Level Two" 1) echo "Level one" ;; esac $ level = 3の場合、出力されます Level Three Level Two Level One 一方、$ level = 1の場合、出力のみになります Level One しかし、試してみると、エラーが発生しましsyntax error near unexpected token ')'た;;。 私が知っている他のすべての言語はこれを許可していますが、bashでそれを行う方法はありますか?「次のケースをあたかも一致したかのように実行する」という意味のキーワード

8
スクリプトを実行するために、パターンに一致するファイルがあるかどうかをテストします
if特定のパターンに一致するファイルがあるかどうかをテストするステートメントを作成しようとしています。ディレクトリにテキストファイルがある場合、指定されたスクリプトを実行する必要があります。 現在の私のコード: if [ -f /*.txt ]; then ./script fi いくつかのアイデアを教えてください。.txtディレクトリ内にある場合にのみスクリプトを実行します。


7
スクリプトの絶対パスを取得するポータブルな方法?
(zsh)スクリプトが絶対パスを決定するための移植可能な方法は何ですか? Linuxでは、次のようなものを使用します mypath=$(readlink -f $0) ...しかし、これは移植性がありません。(たとえば、readlinkダーウィンでは-fフラグを認識せず、同等の機能もありませんreadlink。) よりポータブルな方法は何ですか?

4
Bashシェルスクリプトの出力の配置
私のスクリプト: date echo -e "${YELLOW}Network check${NC}\n\n" while read hostname do ping -c 1 "$hostname" > /dev/null 2>&1 && echo -e "Network $hostname : ${GREEN}Online${NC}" || echo -e "${GRAY}Network $hostname${NC} : ${RED}Offline${NC}" done < list.txt sleep 30 clear done 次のような情報を出力しています: Network 10.x.xx.xxx : Online Network 10.x.xx.xxx : Offline Network 10.x.xx.xxx : …

4
RAMに一時ファイルを作成する方法は?
出力をにパイプするスクリプトがあります|tee scriptnameYYMMDD.txt。出力が生成されるforループの各サイクルの後tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt、ログの出力がブラウザーウィンドウに表示され、最新の行が一番上に表示されるように、ファイルの内容を逆にします。 これを並行して行うスクリプトがいくつかあります。ディスクアクティビティを最小化しようとしているので|tee scriptnameYYYYMMDD.txt、RAMdiskへの出力が最適です。フォルダーにmktempファイルを作成しますが、/tmpそれはオフディスクではないようです。

3
sedを使用して、solarisのコマンドからの出力に色を付ける
Linuxとsolarisの両方で動作するkshスクリプトがあります。特定のコマンドの出力を色付けしようとしています。Linux(特にRHEL6)では動作しますが、solaris(SunOS 5.10)では動作しません。 Linuxのコマンド(出力「テスト」は正しく赤で表示されます): [amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,' test solarisのコマンド(出力「テスト」は色付けされていません): [amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,' x1B[31mtestx1B[0m 出力に生のコードなしで、出力が赤になるようにこのコマンドを作成する方法はありますか?「echo」コマンドを変更することはできません。これは、実際に実行しているコマンドの入力にすぎないためです。

3
`{{(exit 1); 出口1; }; } `意味?
config.statusによって生成されconfigureたからの次のコードスニペットを引用しました。 if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi コードスニペットでは、何をし{ (exit 1); exit 1; };ますか?exitサブシェルでのみ行う目的は何ですか?

11
シェルが「猫の無駄な使用」を自動的に修正しないのはなぜですか?[閉まっている]
多くの人々は、ラインに沿ってコードを含むonelinersとスクリプトを使用します cat "$MYFILE" | command1 | command2 > "$OUTPUT" cat技術的には/usr/bin/cat、コマンドが実行された場合にこれを回避できる新しいプロセス(多くの場合)を開始する必要があるため、最初は「catの無駄な使用」と呼ばれます。 < "$MYFILE" command1 | command2 > "$OUTPUT" シェルは起動するcommand1だけでstdin、指定されたファイルをポイントするだけです。 シェルがこの変換を自動的に行わないのはなぜですか?「猫の無用な使用」構文は読みやすく、無用な猫を自動的に取り除くのに十分な情報がシェルにあるはずです。catシェルはパスにバイナリを使用する内部代わりに、それを実装することができなければならないので、POSIX規格で定義されています。シェルには、1つの引数バージョンのみの実装と、パス内のバイナリへのフォールバックさえ含めることができます。

5
「for」と同じ行に「do」を配置する必要があるのはなぜですか?
1.まとめ わかりません。なぜE010 bashate ruleが必要なのですか。 2.詳細 私はファイルをリントするためにbashateを使用してい.shます。E010ルール: やると同じライン上にないため for bashate: 正しい: #!/bin/bash for f in bash/*.sh; do sashacommand "$f" done エラー: #!/bin/bash for f in bash/*.sh do sashacommand "$f" done 任意の有効な引数は、なぜ私が必要であるforとdo同じ行に? 3.役に立たない 私の質問に対する答えが見つかりません: グーグル コーディングのベストプラクティスに関する記事(例) bashateドキュメンテーション。私が見つけるだけ: 制御ブロックで物事の一貫性を保つのに役立つ一連のルール。これらは、継続のある長い行では無視されます。これは、一種の「興味深い」展開だからです。

1
&&および||の後のbash行の継続はどこですか 文書化?
このコンストラクトをスクリプトでよく見て、自分で使用しましたが、ドキュメンテーションで見つけることができないように思われます。 例: [ -f file1 ] && [ -f file2 ] && echo "Both files exist." || echo "One or the other file doesn't exist." これは、次のように、改行の前にバックスラッシュを使用して行うこともできますman bash。 If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, it …

4
シェル関数のローカル変数の範囲
24.2を読んだ後。ローカル変数、varキーワードで変数を宣言するlocalことvarは、関数の波括弧で区切られたコードブロック内でのみ値にアクセスできることを意味すると考えました。 ただし、次の例を実行した後、私はそれが判明var読み、またアクセスすることができ、関数から書かれたコードのブロックによって呼び出される-すなわちたとえvar宣言されているlocalにouterFunc、innerFuncまだそれを読んで、その値を変更することができます。 Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" 出力: global: before outerFunc: [var:] …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.