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

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

1
このDockerfileエントリポイントで「set-」は何をしますか?
このDockerエントリポイントが何をするのかを理解しようとしています。 Dockerfileを作成するとき、これは非常に一般的なパターンのようですが、私のbashスキルは限られているため、すべての特別なbashシンボルkung fuについてはわかりません。 また、「-」、「$!」をグーグルで検索するのは困難です。など。bashの世界ではこれらは何と呼ばれていますか? 要約すると、以下の行は何をしようとしているのですか? if [ "${1#-}" != "$1" ]; then set -- haproxy "$@" fi
41 shell-script  set 

4
すべてのディレクトリにcdし、そのディレクトリ内のファイルに対してコマンドを実行し、前の現在のディレクトリに戻る
多くの単一レベルのサブディレクトリを持つ特定のディレクトリで実行されるスクリプトを記述しようとしています。スクリプトは各サブディレクトリにcdし、ディレクトリ内のファイルに対してコマンドを実行し、cdアウトして次のディレクトリに進みます。これを行う最良の方法は何ですか?

5
ファイル内の環境変数を実際の値に置き換えますか?
ファイル内の環境変数を置換/評価する簡単な方法はありますか?私がconfig.xml含むファイルがあるとしましょう: <property> <name>instanceId</name> <value>$INSTANCE_ID</value> </property> <property> <name>rootPath</name> <value>/services/$SERVICE_NAME</value> </property> ...等。$INSTANCE_IDファイル内のINSTANCE_ID環境変数$SERVICE_NAMEの値とSERVICE_NAMEenv varの値を置き換えます。どの環境変数が必要かを先験的に知りません(または、誰かが構成ファイルに新しい環境変数を追加した場合にスクリプトを更新する必要はありません)。ありがとう!


3
文字列に部分文字列が含まれているかどうかをテストします
私はコードを持っています file="JetConst_reco_allconst_4j2t.png" if [[ $file == *_gen_* ]]; then echo "True" else echo "False" fi file「gen」が含まれているかどうかをテストします。出力は「False」です。いいね! 問題は、「gen」を変数に置き換えることですtestseq: file="JetConst_reco_allconst_4j2t.png" testseq="gen" if [[ $file == *_$testseq_* ]]; then echo "True" else echo "False" fi これで、出力は「True」になります。どうだった?問題を修正するには?

4
nvmコマンドはbashスクリプトでは使用できません
nvm最終的にノードがインストールされるスクリプトを作成しようとしています。cURLで インストールnvmしました。.profileor .bashrcファイルの変更を確認し(両方とも)nvm、bashプロンプトでを入力すると、使用可能なオプションなどが表示されます。 したがって、nvmは機能します。手動でノードをインストールできますが、nvmコマンドをシェルスクリプトに入れるとすぐに: nano test.sh #!/bin/bash nvm そしてそれを実行します: chmod 755 test.sh ./test.sh 私は得る: ./test.sh: line 2: nvm: command not found それが見つからない場合nvm、私も考える必要はありません nvm ls-remote または nvm install ... Ubuntu 14.04をインストールしました。Bashは私のシェルです。

2
bash引数をスペースを含む単一の文字列に結合する
Bash関数のすべての引数を、各引数をスペースで区切った1つの文字列に結合しようとしています。また、文字列全体を単一引用符で囲む必要があります。 ここに私がこれまで持っているものがあります... $array=("$@") str="\'" for arg in "${array[@]}"; do let $str=$str+$arg+" " done let $str=$str+"\'" 明らかにこれは機能しませんが、これを達成する方法があるかどうか疑問に思っていますか?

2
awk '!a [$ 0] ++'はどのように機能しますか?
このワンライナーは、事前ソートなしでテキスト入力から重複行を削除します。 例えば: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ インターネットで見つけた元のコードは次のとおりです。 awk '!_[$0]++' _Perlのようにawkで特別な意味を持つようになったので、これはさらに困惑しましたが、それは単なる配列の名前であることが判明しました。 これで、ワンライナーの背後にあるロジックがわかりました。 各入力行はハッシュ配列のキーとして使用されるため、完了すると、ハッシュには到着順に一意の行が含まれます。 私が学びたいのは、この表記がawkによってどのように解釈されるかです。たとえば、バング記号(!)の意味とこのコードスニペットの他の要素。 どのように機能しますか?

1
GNUパラレルvs&(バックグラウンドを意味する)vs xargs -P
.shスクリプトで一連のタスクを実行することの違いまたは利点(ある場合)を使用して混乱しているGNU parallel 例えば、Ole Tangeの答え: parallel ./pngout -s0 {} R{} ::: *.png それらをループしてバックグラウンドに置くと言うよりも&。 例えばfrostschutzの答え: #copied from the link for illustration for stuff in things do ( something with stuff ) & done wait # for all the something with stuff 要するに、それらは単に構文的または実際的に異なっていますか?そして、実際に異なる場合、それぞれをいつ使用する必要がありますか?

3
すべてのLinuxベースのディストリビューションで利用可能な標準コマンドはどれですか?
すべてのLinuxシステムで使用可能な標準コマンドはどれかを知りたいです。 たとえば、debian / ubuntu / redhat / suse / arch / slackwareなどを入手した場合、次のようなコマンドが常に表示されます。 cd、mkdir、ls、echo、grep、sed、awk、pingなど 上記のコマンドの一部はシェルに組み込まれていますが、他のコマンドはそうではありませんが、それらは常にそこにあります(これまでの私の知識と経験に基づいて)。 一方、gawk、parted、traceroute、および他の非常に有名なコマンドのようなコマンドは、異なるLinuxディストリビューションではデフォルトでインストールされません。 さまざまなWeb検索を行いましたが、これに対する直接的な答えは見つかりませんでした。 目的は、シェルスクリプトを作成し、スクリプトで使用されているコマンドがシステムで使用できるかどうかを確認するためです。そうでない場合は、必要なバイナリをインストールするようにユーザーに求める必要があります。

2
if ... fiの75倍の速度で&&を使用している理由と、コードを明確にする方法
私は次の作業コードを持っています: largest_prime=1 for number_under_test in {1..100} do is_prime=true factors='' for ((divider = 2; divider < number_under_test-1; divider++)); do remainder=$(($number_under_test % $divider)) [ $remainder == 0 ] && [ is_prime ] && is_prime=false && factors+=$divider' ' done [ $is_prime == true ] && echo "${number_under_test} is prime!" || echo "${number_under_test} is …



4
コマンドラインを使用して特定の行をコメント/コメント解除する最も簡単な方法
コマンドラインを使用してshell / config / ruby​​スクリプトをコメント化/コメント解除する方法はありますか? 例えば: $ comment 14-18 bla.conf $ uncomment 14-18 bla.conf これは、追加または削除するだろう#サインオンをbla.conf行に14します18。通常、を使用しますがsed、これらの行の内容を知ってから検索置換操作を実行する必要があり、複数の針がある場合に間違った結果が得られます(N番目のみを交換したいだけです) 1)。

3
chmod +サイレントモード+エラーにもかかわらず終了コード0を強制する方法
chmodを実行し、コマンドからのエラーを無視することは可能ですか 例(file.txtは例を示すために存在しないことに注意してください) 入力するとき chmod 777 file.txt 出力でエラーが発生します chmod: cannot access file.txt : no such file or directory そこで、次のようにコマンドに-fフラグを追加します(大文字と小文字を示すためにfile.txtは存在しません) chmod -f 777 file.txt echo $? 1 しかし、例からchmodは1を返します エラーにもかかわらずchmodコマンドに強制終了コード0を与える方法をアドバイスしてください

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