タグ付けされた質問 「bash」

他のBourne / POSIXシェルとは対照的に、GNUのBourne Again SHellに固有の質問。Unixシェル全般に関する質問については、代わりに/ shellタグを使用してください。

6
pipefailと同様の方法でバックティックの失敗時にbashを終了させるにはどうすればよいですか?
したがって、エラーがキャッチされないように、できる限り(およびPython / Rubyのような言語に委任できない場合)にbashスクリプトを強化するのが好きです。 その流れには、次のようなものを含むstrict.shがあります。 set -e set -u set -o pipefail そして、他のスクリプトでそれを入手します。ただし、pipefailは次のことを認識します。 false | echo it kept going | true それは拾いません: echo The output is '`false; echo something else`' 出力は次のようになります 出力は '' Falseは、ゼロ以外のステータスとno-stdoutを返します。パイプでは失敗しますが、ここではエラーはキャッチされません。これが実際に後で変数に保存される計算であり、値が空白に設定されている場合、これはその後の問題を引き起こす可能性があります。 だから-バックティック内のゼロ以外のリターンコードを終了するのに十分な理由としてbashを取得する方法はありますか?

2
なぜprintfは「縮小」ウムラウトですか?
次の簡単なスクリプトを実行すると: #!/bin/bash printf "%-20s %s\n" "Früchte und Gemüse" "foo" printf "%-20s %s\n" "Milchprodukte" "bar" printf "%-20s %s\n" "12345678901234567890" "baz" 以下を印刷します: Früchte und Gemüse foo Milchprodukte bar 12345678901234567890 baz つまり、ウムラウト付きのテキスト(などü)は、ウムラウトごとに1文字ずつ「縮小」されます。 確かに、どこかに間違った設定がありますが、どの設定が可能なのかわかりません。 これは、ファイルのエンコードがUTF-8の場合に発生します。 エンコーディングをlatin-1に変更すると、配置は正しくなりますが、ウムラウトは正しくレンダリングされません。 Fr�chte und Gem�se foo Milchprodukte bar 12345678901234567890 baz
54 bash  unicode  printf 

10
bash:$ WORDが設定されているかどうかをテストします
bash変数$WORDが定義された単語の1つであるかどうかを判断するために、の構造を探しています。次のようなものが必要です。 if "$WORD" in dog cat horse ; then echo yes else echo no fi bashにはそのような構造がありますか?そうでない場合、最も近いものは何ですか?




6
2つの変数を下線で連結する
2つの変数を連結して、アンダースコアを持つファイル名を作成する必要があります。変数$FILENAMEを呼び出して$EXTENSION、ファイルからファイル名を読み取ることができます。 FILENAME=Hello EXTENSION=WORLD.txt 今... 私は次のことを試みましたが成功しませんでした: NAME=${FILENAME}_$EXTENSION NAME=${FILENAME}'_'$EXTENSION NAME=$FILENAME\\_$EXTENSION 私はいつも何らかの奇妙な出力を取得します。通常、最初にアンダースコアが使用されます。 私はそれが必要です echo $NAME Hello_WORLD.txt

5
区切り文字の最初の出現による文字列の分割
次の形式の文字列があります id;some text here with possible ; inside の最初の出現によって2つの文字列に分割したい;。だから、それは次のようになりますidし、some text here with possible ; inside 文字列を分割する方法は知っていますが(たとえば、cut -d ';' -f1)、;左部分の内側にあるため、より多くの部分に分割されます。

3
シェルスクリプトで環境変数を「エクスポート」する方法を教えてください。
複数のAmazon EC2アカウントがあり$EC2_HOME、スクリプトを使用してなどの変数をすばやく切り替えることができるようにしたいと考えています。 次のように設定されたシェルスクリプトがあります。 #!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME スクリプトを実行すると、EC2_HOME設定されていることがわかりexportますが、スクリプトの完了後に変数を使用すると変数が固定されると考えました。実行echo $EC_HOMEしても何も表示されないため、表示されません。 これは非常に初歩的なLinuxスクリプティングの知識でなければならないことは知っていますが、知りません。私は運のない関連する質問を探してみた-これが重複している場合、私の謝罪。

2
シンボリックリンクを作成-存在する場合は上書き
ファイルを作成するたびにデータを削除し/path/to/data/folder/month/date/hour/minute/fileてシンボリックリンクし/path/to/recent/file、これを自動的に行いたいと思います。 事前に/path/to/recent/file存在するかどうかわからないと仮定して、作成(存在しない場合)または置換(存在する場合)を行うにはどうすればよいですか?私はそれが存在するかどうかを確認してから削除、シンボリックリンクを行うことができると確信していますが、私がしたいことをワンステップで行う簡単なコマンドがあるかどうか疑問に思っています。
54 bash  symlink 

4
globマッチから1つのパターンを除外する
同じベースファイル名を持つ複数のファイルがあります。1つを除くすべてを削除したい foo.org #keep foo.tex #delete foo.fls #delete foo.bib #delete etc 保持する必要がなければ、を使用できることを知っていますrm foo.*。 TLDPは^、一致を否定することを示します。試行錯誤を通して、私はそれを見つけることができました rm foo.*[^org] 私は必要なことをしますが、私は本当に構文を理解していません。 また、私のユースケースの制限ではありませんが、このパターンはfoo.oand も無視すると思いますfoo.or。どのように、どのような無視はグロブこのパターンの仕事でしょうないことだけ foo.orgのように見えますか?
54 bash  wildcards 

9
lsコマンドから出力の1列だけをエコーするにはどうすればよいですか?
lsコマンドを実行すると、出力は次のようになります。 file1 file2 file3 file4 出力の特定の列、この場合はfile2のみを表示することは可能ですか?私は次のことを試みましたが成功しませんでした: echo ls | $2 基本的に私がしたいのは、2番目の列のみをエコーすることです。この場合、エコーしたいのです。 file2
54 bash  ls  parameter  arguments 


4
Bash star *ワイルドカードは常に(昇順の)ソートされたリストを生成しますか?
私は、logXXXXが次のような2文字のゼロ詰めされた大文字の16進数であるような名前のファイルで満たされたディレクトリを持っています: log00 log01 log02 ... log0A log0B log0C ... log4E log4F log50 ... 一般に、合計で20または30個未満のファイルがあります。特定のシステムの日付と時刻は信頼できるものではありません(信頼できるNTPまたはGPS時刻ソースのない組み込みシステム)。ただし、上記のようにファイル名は確実に増加します。 私がしたいgrep、私は期待していた特定のタイプの単一の最新のログエントリのすべてのファイルを介しcatなど一緒にファイル... cat /tmp/logs/log* | grep 'WARNING 07 -' | tail -n1 しかし、bashor shまたはor zshなどの異なるバージョンが、どのように*展開されるかについて異なるアイデアを持っているかもしれないということが私には思いつきました。 このman bashページは、の拡張*が一致するファイル名のアルファベット順の完全に昇順のリストであるかどうかを示していません。利用可能なすべてのシステムで試してみるたびに上昇しているように見えますが、動作は定義済みですか、それとも実装固有ですか? 言い換えればcat /tmp/logs/log*、すべてのログファイルをアルファベット順に連結することに絶対に頼ることができますか?
53 bash  shell  wildcards 

6
/ bin / bashではなく/ bin / shを指すシェバンを持つ理由はありますか?
私が見たほとんどのシェルスクリプト(自分で書いていないスクリプトを除く)で、シバンがに設定されていることに気付きました#!/bin/sh。これは古いスクリプトでは本当に驚かないが、かなり新しいスクリプトでもそうだ。 好むための何らかの理由がある/bin/sh以上は、/bin/bash以来、bash十年以上前にうまくいって、多くのLinuxやBSDマシン上で、かなり多くの遍在し、多くの場合、デフォルト?
53 bash  shell  history  shebang 

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