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

スクリプトの先頭にある「#!」文字列に関する質問の場合は、タグ/ shebangを使用します


2
引数 '-v'および '-x'はbashを意味しますか?
私は、次のシバンでいくつかのシェルスクリプトを見ました。 #!/bin/bash -x -v しかし、man bashどのようなこれらの引数を説明していない-xと-v、彼らが所属している場合は、静置bashすべてで。 それで、それら-xと-v(および他の可能な引数)はどういう意味ですか?
17 bash  shebang 

3
どのシェルインタープリターがシバンなしでスクリプトを実行しますか?
アカウントのデフォルトのシェルがzshであるが、ターミナルを開いてbashを起動し、という名前のスクリプトを実行したとしますprac002.sh。どのシェルインタープリターを使用して、スクリプト、zshまたはbashを実行しますか?次の例を考えてみましょう。 papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf [sudo] password for papagolf: papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh # papagolf's default shell is zsh papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash # I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.) papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh …

6
スクリプトの開始後にインタープリターを選択します(例:hashbang内のif / else)
スクリプトを実行しているインタープリターを動的に選択する方法はありますか?2つの異なるシステムで実行しているスクリプトがあり、使用したいインタープリターは2つのシステムの異なる場所にあります。最終的に私がしなければならないのは、切り替えるたびにハッシュバングの行を変更することです。私はこれと論理的に同等の何かをしたいと思います(この正確な構成は不可能であると認識しています): if running on system A: #!/path/to/python/on/systemA elif running on system B: #!/path/on/systemB #Rest of script goes here または、最初のインタープリターを使用しようとし、見つからない場合は2番目のインタープリターを使用するように、これがさらに良いでしょう。 try: #!/path/to/python/on/systemA except: #!path/on/systemB #Rest of script goes here 明らかに、私は代わりに、/path/to/python/on/systemA myscript.py または /path/on/systemB myscript.py 現在の場所に応じて実行でき ますが、実際にはを起動するラッパースクリプトがmyscript.pyあるため、手作業ではなくプログラムでpythonインタープリターへのパスを指定したいと思います。

6
Bourneシェルがディストリビューションで利用できない場合、hashbangで/ bin / shを使用するのは正しいですか?
一般に、シェルスクリプトには、スクリプトファイルの最初の行に次のコメントが含まれています#!/bin/sh。私が行った研究によれば、これは「ハッシュバン」と呼ばれ、従来のコメントです。このコメントは、このファイルがディレクトリ下のBourne Shellによって実行されることをUnixに通知します/bin。 私の質問はその点から始まります。今までこのようなコメントを見たことはありません#!/bin/bash。いつも#!/bin/shです。ただし、UbuntuディストリビューションにはBourne Shellプログラムがありません。Bourne Again Shell(bash)があります。 その点で、#!/bin/shUbuntuディストリビューションで書かれたシェルスクリプトにコメントを入れるのは正しいですか?

2
ダブルハイフン(-)で始まるこのシバンはどのように機能しますか?
RosettaCodeページで次のようなシバンを見つけました。 --() { :; }; exec db2 -txf "$0" Db2でも機能し、Postgresでも同様です。しかし、私は全体の行を理解していません。 ダブルダッシュはSQLのコメントであり、その後、ファイル自体をファイルとして渡すいくつかのパラメーターを使用してDb2実行可能ファイルを呼び出します。しかし、括弧、中括弧、コロン、セミコロン、および実際のシバン#を置き換える方法はどうでしょうか。? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL


3
「ps ax」が「#!」ヘッダーなしで実行中のbashスクリプトを見つけられないのはなぜですか?
このスクリプトを実行すると、殺されるまで実行することを意図しています... # foo.sh while true; do sleep 1; done ...を使用して見つけることができませんps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ...ただし#!、スクリプトに共通の " "ヘッダーを追加するだけの場合... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ...その後、同じpsコマンドでスクリプトが検索可能になります... >./foo.sh // In a separate shell: >ps …

6
シバン(スクリプト宣言)行が多すぎる-その量を減らす方法はありますか?
約20個の小さな.shファイルで構成されるプロジェクトがあります。一般に、20行を超えるコードを持つファイルはないため、これらを「小さい」と命名します。私はモジュール式のアプローチを採用しました。そのため、Unixの哲学に忠実であり、プロジェクトを維持しやすいからです。 各.shファイルの最初に、を入れました#!/bin/bash。 簡単に言えば、スクリプト宣言には2つの目的があることを理解しています。 これらは、ユーザーがファイルを実行するために必要なシェルを思い出すのに役立ちます(たとえば、ファイルを使用せずに数年後に)。 別のシェルが使用された場合の予期しない動作を防ぐために、特定のシェル(その場合はBash)でのみスクリプトが実行されるようにします。 プロジェクトが5ファイルから20ファイル、または20ファイルから50ファイルに成長し始めると(この場合ではなく、単に説明のため)、20行または50 行のスクリプト宣言があります。一部の人にとっては面白いかもしれませんが、プロジェクトごとに20または50を使用するのではなく、プロジェクトのメインファイルに20または50を使用するのは少し冗長に感じます。 いくつかのメインファイルで「グローバル」スクリプト宣言を使用して、この20または50の冗長性、またはスクリプト宣言の非常に多くの行を回避する方法はありますか?

3
スクリプトの配布:シバンには/ bin / gawkまたは/ usr / bin / gawkを使用する必要がありますか?
gawkは通常/ binまたは/ usr / binにありますか?私は一緒に行きます#!/usr/bin/env gawkが、引数は使用できません。現在、私はを使用してい#!/bin/gawk -fます。スクリプトは非常に長く、多数の単一引用符が含まれており、stdinで動作します。 GNU Awkマニュアルのセクション1.1.4実行可能awkプログラムでは、例では#!/ bin / awkを使用していますが、次のように続けています。 多くのシステムでawkは、/usr/binではなくにあることに注意してください/bin。買い手責任負担。 ほとんどの人は何をしますか?私は、sedは/ binで標準化されていると思われるのに対し、perlは/ usr / binで標準化されていると読みました(sedリンクと同じページですが、この投稿に3つ目のリンクを作成することはできません)。awk / gawkはどうですか?どちらがより一般的または人気があるか知っていますか?
12 awk  shebang  env 

1
そのようなファイルやディレクトリはありませんが、私はそれを見ることができます!
winSCPを使用してヘッドレスRaspberry PIでPythonスクリプトを実行しようとすると、次のエラーメッセージが表示されます。 Command '"./areadetect_movie_21.py"' failed with return code 127 and error message /usr/bin/env: python : No such file or directory. ターミナルから実行すると、次のようになります。 : No such file or directory. 同じディレクトリで、同じpython shebang、同じ権限、同じユーザーpiを使用して、同様のpythonスクリプトを試してみます。 またls、ファイルを表示できるので、なぜ実行されないのかわかりません。

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 …


1
シバンラインがcr-lfで機能しない
次の基本スクリプトのシバン部分が機能しないのはなぜですか。 $ cat hello.sh #! /bin/sh echo Hello $ ./hello.sh bash: ./hello.sh: /bin/sh^M: bad interpreter: No such file or directory $ cat hello.py #! /usr/bin/env python3 print("Hello") $ ./hello.py : No such file or directory 一方、インタプリタを手動で呼び出すことは機能しています: $ sh hello.sh Hello $ python3 hello.py Hello

2
1つのbashファイルに複数のシバン
私は他の人から見たスクリプトがあります(注:これは単一のファイルです)。 #!/bin/bash some commands some commands #!/bin/bash some commands some commands #!/bin/bash some commands some commands 2番目と3番目のシバンの目的は何ですか?それは間違っているのか、それとも故意ですか?

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