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

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

3
「//」で始まるシバン?
次のスクリプトについて混乱しています(hello.go)。 //usr/bin/env go run $0 $@ ; exit package main import "fmt" func main() { fmt.Printf("hello, world\n") } 実行できます。(MacOS X 10.9.5の場合) $ chmod +x hello.go $ ./hello.go hello, world から始まるシバンについて聞いたことがありません//。また、スクリプトの先頭に空白行を挿入しても機能します。このスクリプトが機能するのはなぜですか?

3
「IFS = read -r line」を理解する
内部フィールド区切り変数に値を追加できることは明らかです。例えば: $ IFS=blah $ echo "$IFS" blah $ また、次の名前の変数にread -r lineデータを保存することも理解しstdinていますline: $ read -r line <<< blah $ echo "$line" blah $ しかし、コマンドはどのようにして変数値を割り当てることができますか?そして、それは最初からデータを格納しstdin、変数にline、その後の値与えるlineにはIFS?

12
関数でbashスクリプト全体を記述する理由
職場では、bashスクリプトを頻繁に記述しています。私のスーパーバイザーは、次の例のように、スクリプト全体を機能に分割することを提案しています。 #!/bin/bash # Configure variables declare_variables() { noun=geese count=three } # Announce something i_am_foo() { echo "I am foo" sleep 0.5 echo "hear me roar!" } # Tell a joke walk_into_bar() { echo "So these ${count} ${noun} walk into a bar..." } # Emulate a pendulum clock for a bit …

6
ls -lとllの違いは?
私は全体としてプログラミングが比較的新しく、いくつかのチュートリアルがls -lディレクトリのファイルを見るのに使用するように言っていて、他が言っていましたll。私はそれlsが短いリストであることを知っていますが、他の2つの間に違いはありますか?
59 shell  shell-script  ls 

4
シンボリックリンクを介して実行されたときに現在のスクリプトのパスを取得
いくつかのbashスクリプトを含むいくつかのディレクトリと、場合によっては各マシンの異なるディレクトリにある複数のマシンに展開されるサポートファイルで構成されるユーティリティがあります。スクリプトはそれ自体に関連するパスを参照できる必要があるため、現在実行中のファイルへのパスを取得できる必要があります。 dirname $0スクリプトが直接呼び出されたときに完全に機能するイディオムを知っています。残念ながら、まったく異なるディレクトリからこれらのスクリプトへのシンボリックリンクを作成し、依然として相対パスロジックを機能させたいという要望があります。 全体的な乾燥構造の例は次のとおりです。 / |-usr/local/lib | |-foo | | |-bin | | | |-script.sh | | |-res | | | |-resource_file.txt |-home/mike/bin | |-link_to_script (symlink to /usr/local/lib/foo/bin/script.sh) またはによって呼び出されるかどうか/usr/local/lib/foo/res/resource_file.txtからどのように確実に参照できますか?script.sh/usr/local/lib/foo/bin/script.sh~mike/bin/link_to_script




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を取得する方法はありますか?

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

6
ログを追跡し、ログにテキストが表示されたときにコマンドを実行する最良の方法
サーバーが稼働しているときに、ログファイルに特定のテキスト行を出力するサーバーログがあります。サーバーが起動したらコマンドを実行したいので、次のようなことをします。 tail -f /path/to/serverLog | grep "server is up" ...(now, e.g., wget on server)? これを行う最良の方法は何ですか?

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スクリプティングの知識でなければならないことは知っていますが、知りません。私は運のない関連する質問を探してみた-これが重複している場合、私の謝罪。


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