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

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

3
シェルスクリプト:内部にオプションがある変数を作成する
次のパラメーターを指定したrsyncコマンドがあります。 rsync -avz --{partial,stats,delete,exclude=".*"} そのパラメーターを変数内に配置して、スクリプトで後で再利用したいと考えています。このようなもの: #!/bin/bash VAR=rsync -avz --{partial,stats,delete,exclude=".*"} $VAR /dir1 /dir2 引用符、単一引用符、角かっこで試したが、成功しなかった。

3
$ HOME / bin dirが$ PATHにありません
私~/.profileには次のbin/ directoryように私の個人をロードする最後のブロックがあります: # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi しかし、ロードされていないようです: echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games なぜこれが機能しないのですか?(私の殻はbashです。) ティガーの編集 echo $0 => bash echo $HOME => /home/student whoami => student less /etc/*-release => PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" …

3
BASHとキャリッジリターンの動作
簡単な質問があります。 bash(私は4.4.11を使用しています)が分離されている/プレーンで終わる行/テキストを表示しないのは正常\rですか? この動作を見て、私は少し驚きました: $ a=$(printf "hello\ragain\rgeorge\r\n") $ echo "$a" george しかし、「こんにちは」というテキストはまだそこにあり、どういうわけか「隠されています」: $ echo "$a" |od -w32 -t x1c 0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a h e l l o \r a g a i n …

2
シェルスクリプトがソースにするファイル拡張子の公式の標準/規則
実行する代わりにソースしたいシェルスクリプトのファイルタイプ拡張子に規約があるかどうか疑問に思いました。例えば: このスクリプトをサブシェルで実行する場合。 ./script.sh 現在のシェルからこのスクリプトを実行することを覚えておきたい場合。 . script.source 2番目の例のファイルタイプには(POSIXなどの)規則がありますか?.sourceまたはのような何か.sourceme? 更新 この質問はいかなる意見についても尋ねるものではありません。この種のスクリプトに標準化されたファイル拡張子があるかどうかを知りたいと明確に述べました。この質問は、同様の問題についてよく寄せられるこの質問よりも意見ベースではありません(bashスクリプトには.shまたは.bash拡張子を使用しますか?)。

2
bash配列の要素数をカウントします。配列の名前は動的です(つまり、変数に格納されます)。
質問の簡単な説明: 配列の完全なコピーを作成したり、配列を使用したりせずに、配列の名前が動的である(つまり、変数に格納されている)bash配列の要素数をカウントする組み込みのbashメソッドはありevalますか? 詳しくは: bashパラメータ置換を使用すると、次のことができます。 配列の長さを決定します myArr=(A B C); echo ${#myArr[@]}。 変数を名前で間接的に参照します NAME=myVar; echo ${!NAME}(これは配列要素にも適用されます): NAME=myArr[1]; echo ${!NAME} しかし、配列の名前が別の変数に格納されている場合、配列内の要素の数をどのように決定できますか?(これは、上記の2つのパラメーター置換の組み合わせと見なすことができます。)例: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What is the right way? 以下は、すべて失敗する複数の試行です。 # Setup …

4
findを使用して見つかったファイルのコンテンツを1つのファイルに分類するにはどうすればよいですか?
貴重なデータを保持するパーティションを再フォーマットすることで、痛いところ(本当に悪いところ)をなんとか撃ちました。もちろんそれは意図的なものではありませんでしたが、起こりました。 しかし、ほとんどのデータを使用testdiskしphotorecて回復することができました。これで、すべてのデータがほぼ25,000のディレクトリに分散されました。ほとんどのファイルは.txtファイルで、残りは画像ファイルです。各ディレクトリには300を超える.txtファイルがあります。 私がすることができますgrep使用するか、またはfindファイルに.txtファイルを出力してから特定の文字列を抽出します。たとえば、次の行は、データが復元されたファイルにあることを確認するために使用しました。 find ./recup*/ -name '*.txt' -print | xargs grep -i "searchPattern" 「searchPattern」をファイルに出力することはできますが、そのパターンが得られるだけです。これが私が本当に達成したいことです: すべてのファイルを調べ、特定の文字列を探します。その文字列がファイルで見つかった場合、そのファイルのすべての内容を出力ファイルにcatします。パターンが複数のファイルで見つかった場合は、後続のファイルの内容をその出力ファイルに追加します。検索しているパターンを出力したくないだけで、パターンが見つかったファイルのすべてのコンテンツを出力したいことに注意してください。 これは可能だと思いますが、特定のパターンをそこからgrepした後で、ファイルのすべてのコンテンツを取得する方法がわかりません。

4
Bash、バックグラウンドプロセスを実行させて他のプロセスを待つ方法は?
私は別の持っている(まだ)wait、 &、&&制御フローの質問を.. 次のようなスクリプトで、できるだけ多くの作業を同時に実行したいとします。 # may take some hours something InputA > IrrelevantA & something InputB > IrrelevantB & # may take an hour ( somethingElse InputA > OutputA & somethingElse InputB > OutputB & )&& combine OutputA OutputB > Result ...morestuff 質問1:スクリプトではcombine、両方のsomethingElseプロセスが完了するまで、両方のプロセスが完了するのを待ちsomethingますか? 質問2:そうでない場合(そうではないと思われる場合)、上記のプロセスがバックグラウンドで動作している間combine、両方のsomethingElseプロセスのみを待機するにはどうすればよいsomethingですか?

7
$ 0には常にスクリプトへのパスが含まれますか?
上部のコメントセクションからヘルプとバージョン情報を印刷できるように、現在のスクリプトをgrepしたいと思います。 私はこのようなことを考えていました: grep '^#h ' -- "$0" | sed -e 's/#h //' しかし、スクリプトがPATHにあるディレクトリにあり、ディレクトリを明示的に指定せずに呼び出された場合はどうなるのだろうと思いました。 特殊変数の説明を検索したところ、次の説明が見つかりました$0。 現在のシェルまたはプログラムの名前 現在のスクリプトのファイル名 スクリプト自体の名前 実行されたときのコマンド これらのいずれ$0も、スクリプトがディレクトリなしで呼び出された場合にの値にディレクトリが含まれるかどうかを明確にしません。最後の1つは、実際にはそうではないことを意味します。 私のシステムでのテスト(Bash 4.1) / usr / local / binにscriptnameという実行可能ファイルを1行echo $0で作成し、別の場所から呼び出しました。 これらは私の結果です: > cd /usr/local/bin/test > ../scriptname ../scriptname > cd /usr/local/bin > ./scriptname ./scriptname > cd /usr/local > bin/scriptname bin/scriptname > cd /tmp …

1
bashで行われたPOSIXでの間接変数展開?
それは可能ですか、またはBashで行うことができるようにPOSIXで間接変数展開を行うためのエレガントなハックがありますか? コンテキストについては、私は次のことをしようとしています: for key in ${!map_*} do # do something done 編集:明確にするために、で始まるシェル変数にアクセスしたいと思いますmap_。

4
シェルスクリプトの連想配列
連想配列をシェルスクリプトに実装するトリックを見ました。たとえば、key = apples print array["apples"]としてスクリプト化できますecho \$array$key。 ただし、配列を反復処理するためのキーを生成する方法については言及されていません。スペースで区切られた変数にキーを格納して、forループを使用して配列を反復できるようにすることしか考えられませんでした。 それで、後で使用するためにキーを格納する他の方法はありますか?

3
環境変数に基づく条件付き割り当て
bashスクリプトでは、値が外部のグローバル環境変数($MYAPP_ENV)に依存するように、ローカル変数を割り当てています。 if [ "$MYAPP_ENV" == "PROD" ] then SERVER_LOGIN=foobar123@prod.example.com else SERVER_LOGIN=foobar987@test.example.com fi 上記の割り当てを書くためのより短い(まだクリーンな)方法はありますか?(おそらく何らかの条件演算子/インラインを使用している場合)

5
ディスク使用率が90%を超えた場合にアラートメールを送信するシェルスクリプト
ディスク使用率が90%を超えると自動的に電子メールアラートを送信し、95%を超えると2番目の電子メールアラートを送信するスクリプトをサーバーに実装したいと思います。私のファイルシステムはabc:/xyz/abcで、マウントポイントは/pqrです。 私はこれを試しました: ADMIN="someone@def.com" ALERT=90 df -H | grep -vE 'abc:/xyz/pqr | tmpfs |cdrom' | awk '{ print $5 " " $1 }' | while read output; do usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) partition=$(echo $output | awk '{ print $2 }' ) if [ …


4
コマンドの戻りステータスをテストしてバージョン管理システムを検出するBashスクリプト
いくつかの種類のVCSで使用したいbashスクリプトを作成しています。典型的なinfoコマンドを実行し、戻りコード、成功またはエラーを確認することにより、ディレクトリがシステムのリポジトリであるかどうかをテストすることを考えています。擬似コードでは: if a svn command succeded; Then run svn commands elif a darcs command succeded; Then run darcs commands elif a mercurial command succeded; then run hg commands else something else fi 私は、例えば、コマンドを実行することができます darcs show repoし、使用$?そのリターンコードを取得します。 私の質問は、戻りコード番号を1行で実行して返すためのきちんとした方法はありますか?例えば if [ 0 -eq `darcs show repo`$? ]; または、関数を定義する必要がありますか? 追加の要件として、stderrとstdoutの両方を印刷する必要があります。

2
#!/ usr / bin / env bashがシステムで動作しないのはなぜですか?
彼らが不満を言ういくつかのインストールスクリプトを実行すると、私はいくつかの問題に遭遇しましたbad interpreter。 ささいな例を作成しましたが、問題が何であるか理解できません。以下を参照してください。 #!/usr/bin/env bash echo "hello" 上記のスクリプトを実行すると、次のエラーが発生します [root@ech-10-24-130-154 dc-user]# ./junk.sh bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory /usr/bin/envファイルには、以下を参照してください、存在します。 [root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env [root@ech-10-24-130-154 dc-user]# ls -l /bin/env -rwxr-xr-x 1 root root 23832 Jul 16 …

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