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

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

3
シェルコマンドを使用してすべての行に行番号を追加するにはどうすればよいですか?
私のファイル、 PSS-A (Primary A) PSS-B (Primary B) PSS-C (Primary C) PSS-D (Primary D) PSS-E (Primary E) PSS-F (Primary F) PSS-G (Primary G) PSS-H (Primary H) PSS-I (Primary I) SPARE (SPARE) 出力ファイル、 1> PSS-A (Primary A) 2> PSS-B (Primary B) 3> PSS-C (Primary C) 4> PSS-D (Primary D) 5> PSS-E (Primary …

5
別の変数に応じて、変数に異なる値を簡潔に割り当てるにはどうすればよいですか?
このシェルスクリプトを短縮するにはどうすればよいですか? CODE="A" if test "$CODE" = "A" then PN="com.tencent.ig" elif test "$CODE" = "a" then PN="com.tencent.ig" elif test "$CODE" = "B" then PN="com.vng.pubgmobile" elif test "$CODE" = "b" then PN="com.vng.pubgmobile" elif test "$CODE" = "C" then PN="com.pubg.krmobile" elif test "$CODE" = "c" then PN="com.pubg.krmobile" elif test "$CODE" = "D" then …

1
「#!/ bin / sh -a」の-aがsedに影響し、「set -a」が影響しないのはなぜですか?
次の.shファイルを実行した場合: #!/bin/sh -a echo "a" | sed -e 's/[\d001-\d008]//g' 結果はエラーです: sed:-e expression#1、char 18:無効な範囲終了 しかし、次の.shファイルを実行すると: #!/bin/sh set -a echo "a" | sed -e 's/[\d001-\d008]//g' エラーなしで実行されます。2番目のコードは最初のコードと同等であると想定されていませんか?最初のエラーはなぜですか?

1
POSIXは、コマンド置換内の引用されたヒアドキュメントに何を必要としますか?
で、この質問の誰かが使用して問題を報告し、ここで文書を内部に引用された区切り文字の単語で$(...)コマンド置換バックスラッシュ、\文書トリガーの内部の行末の改行結ぶラインの継続が、ここでは同じながら、文書外予想通りコマンド置換の作品を。 簡単なドキュメントの例を次に示します。 cat <<'EOT' abc ` def ghi \ jkl EOT これには、行末に1つのバックティックと1つのバックスラッシュが含まれます。区切り文字は引用符で囲まれているため、本体内で展開は発生しません。すべてのBourne-alikesで、これはコンテンツを逐語的に出力します。次のようにコマンド置換内に同じドキュメントを配置した場合: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" その後、それらは同じ動作をしなくなります。 dash、ash、zsh、ksh93、BusyBoxのはash、mksh、とSunOS 5.10 POSIXは、sh以前のように、すべて、文書の逐語的な内容を与えます。 Bash 3.2では、一致しないバックティックに対して構文エラーが発生します。一致したバックティックを使用して、コマンドとしてコンテンツを実行しようとします。 Bash 4.3は、「ghi」と「jkl」を1行にまとめますが、エラーはありません。--posixオプションでは、この影響を与えません。Kusalananda はpdksh、同じように振る舞うと言っています(ありがとう!)。 元の質問で、これはBashのパーサーのバグだと言いました。それは...ですか?[更新:yes ] POSIXからの関連テキスト(すべてシェルコマンド言語定義から)は、次のとおりです。 §2.6.3コマンドの置換: $(command)形式では、開き括弧から対応する閉じ括弧までのすべての文字がコマンドを構成します。commandには、任意の有効なシェルスクリプトを使用できます。ただし、不特定の結果を生成するリダイレクトのみで構成されるスクリプトは除きます。 §2.7.4ヒアドキュメント: 単語の一部が引用されている場合、区切り文字はwordの引用削除を実行して形成され、ヒアドキュメントの行は展開されません。 §2.2.1エスケープ文字(バックスラッシュ): <バックライン>の後に<改行>が続く場合、シェルはこれを行の継続と解釈します。<backslash>と<newline>は、入力をトークンに分割する前に削除されます。 §2.3トークンの認識: 場合io_hereトークンが文法によって認識されている(シェル文法を、一つ以上のすぐ隣次以降の行の)改行が一つ以上のここで、ドキュメントの本体を形成トークンとの規則に従って解析されなければなりませんHere-ドキュメント。 io_hereを処理していない場合、シェルは、入力内の次の文字に以下の最初の適用可能なルールを適用することにより、入力をトークンに分割します。... ... 現在の文字が<バックスラッシュ>、一重引用符、または二重引用符であり、引用されていない場合、引用されたテキストの最後までの後続の文字の引用に影響します。引用のルールは、引用で説明されています。トークンの認識中、実際には置換は行われず、結果のトークンには、入力に含まれる文字(<newline>を除く)が含まれます。引用テキストの。 これについての私の解釈は$(、終了するまでのすべての文字が)逐語的にシェルスクリプトを構成するということです。ヒアドキュメントが表示されるため、ヒアドキュメントの処理は通常のトークン化の代わりに行われます。ヒアドキュメントには、引用符で囲まれた区切り文字があり、その内容は逐語的に処理されます。エスケープ文字が含まれることはありません。しかし、このケースは単に対処されておらず、両方の動作が許容されるという議論を見ることができます。関連するテキストをどこかでスキップした可能性もあります。 この状況は他の場所でより明確になっていますか? (理論上)移植可能なスクリプトは何に依存できるはずですか? …

3
ファイルへの書き込みアクセスを非侵襲的にテストする方法は?
シェルスクリプトで、実際にファイルを変更せずに、ファイルへの書き込みアクセスを簡単かつ非侵襲的にテストするにはどうすればよいですか? の出力を解析することはできましたがstat、実装と時間によって統計出力がどれだけ異なるかはわかりませんが、それは本当に複雑で、おそらく壊れやすいようです。 ファイルの最後に追加して、それが成功するかどうかを確認することもできますが、考えられる2つの理由から、潜在的に危険です。 ここで追加を削除する必要があり、他のプロセスがファイルに書き込む場合、私の行が最後ではないため、これはすぐに重要になります。 ファイルを読み取るプロセスには、そのファイルの内容に関する任意の要件がある場合があり、そのアプリケーションが壊れている可能性があります。

4
別のシェルで開始されたプログラムを待つ方法
私は、動作するすべてのデータが使用可能になったときにcronによって開始される大量の作業(約4〜5時間かかる)を行うプログラムを持っています。時々、それが終了するのを待っているときに、終了時に別の(インタラクティブ)プログラムを開始したいことがあります。待機コールは有望に見えますが、子供を待つだけです。


5
リストされているファイルのサイズを合計する方法はありますか?
これはいくつかのファイルをリストするために使用しているコマンドです: find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \; -rw-r--r-- 1 qa1wrk15 test 1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys 等々。 次に、5番目の列を合計して、これらのファイルの合計サイズを計算します。を使用awkしてこれを行うことを考えたので、特定のディレクトリで次をテストしました …


1
構文エラー:ファイルの予期しない終了— Bashスクリプト[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 4年前に閉鎖されました。 スプリッツアプリを作成しようとしています。すべて正常に動作していましたが、昨日からこのエラーが発生し続けています。 ./spritz:176行目:構文エラー:予期しないファイルの終わり スクリプトファイルを確認しましたが、すべてが完璧に思えます。私は混乱しています、私はついにifステートメントを持っています、そしてそれは正しいようです!最後の部分は次のとおりです。 #checks if speed is 150 157 if [[ $2 -eq 150 ]]; 158 then 159 starttime=$SECONDS 160 FS=$'\n' 161 for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`; 162 do 163 #Reads the text file in the centre of the screen 164 echo " ___________________" …

6
一貫したマシン固有IDを生成する
uuuidgenなど、PCごとに一意のIDを生成できますが、ハードウェアの変更がない限り変更されませんか?CPUIDとMACADDRをマージしてハッシュして一貫したIDを生成することを考えていましたが、bashスクリプトを使用してそれらを解析する方法がわかりません。 dmidecode -t 4 | grep ID そして ifconfig | grep ether 次に、これらの16進文字列を結合し、sha1またはmd5を使用してハッシュして、固定長の16進文字列を作成する必要があります。 その出力をどのように解析できますか?

4
長い出力を2列に分割する
スクリプトの1つからの出力を列に並べる簡単なユーティリティまたはスクリプトはありますか?私は何らかの形でデータを持っています: A aldkhasdfljhaf B klajsdfhalsdfh C salkjsdjkladdag D lseuiorlhisnflkc E sdjklfhnslkdfhn F kjhnakjshddnaskjdh ただし、これが2倍になった場合は、次の形式でデータを記述します(依然として垂直に並べられている場合)。 A aldkhasdfljhaf D lseuiorlhisnflkc B klajsdfhalsdfh E sdjklfhnslkdfhn C salkjsdjkladdag F kjhnakjshddnaskjdh マンページを読んだことから、これがcolumn適切だとは思いませんが、よくわかりません。フォームに分割するのは簡単です: A B C D E F \n2行ごとに印刷するだけです(現在のスクリプトの機能)。何か案は?ありがとう!

3
シェルスクリプトをデーモンとして実行する「適切な」方法
daemontoolsやdaemonizeなどの外部ツールを使用せずに、起動時にデーモンとして実行したいシェルスクリプトを書いています。 Linux Daemon Writing HOWTO Linux Daemon Writing HOWTOによると、適切なデーモンには次の特性があります。 親プロセスからの分岐 クローズすべてのファイル記述子を(すなわち、stdin、stdout、stderr) 書き込み用のログを開きます(設定されている場合) 作業ディレクトリを永続的なものに変更します(通常/) ファイルモードマスク(umask)をリセットします 一意のセッションID(SID)を作成します デーモン化入門 デーモン化導入はまた、典型的なデーモンを述べ、さらに行きます: 制御端末(存在する場合)との関連付けを解除し、すべての端末信号を無視します プロセスグループとの関連付けを解除します ハンドル SIGCLD どのように私はこのすべてを行うだろうsh、dashまたはbash唯一の共通のLinuxツールとスクリプト? Debianは主な焦点ですが、スクリプトは追加のソフトウェアなしでできるだけ多くのディストリビューションで実行できるはずです。 注:またはの使用を推奨するStackExchangeネットワーク上の答えがたくさんあることは知っていますが、これらの方法はいずれも上記の要件のすべてに対応していません。nohupsetsid EDIT:デーモン(7)のmanページには、古いスタイルのいくつかの違いがあるように見えるが、また、いくつかのポインタを与えるSysVデーモンと新しいsystemdもの。さまざまなディストリビューションとの互換性が重要なので、答えが違いを明確にするようにしてください。

4
dirnameおよびbasename vsパラメーター展開
ある形式を他の形式よりも優先する客観的な理由はありますか?パフォーマンス、信頼性、移植性? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" 生産物: /some/long/path/to /some/long/path/to a_file a_file (v1はシェルパラメーター展開を使用し、v2は外部バイナリーを使用します。)


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