単純なタイプミスと深い無知のため、ここで少し恥ずかしいです。悲しみを和らげてください。
- hasbangs/shebangsには常に先頭の
/
文字が必要です。#!/bin/bash
- もっと正確に
- コピーと貼り付けを有効にせずにホストとゲスト(仮想)システム間で作業している場合は、停止してください。タイプミスはコードや問題を台無しにする可能性があります(人を迷惑にする可能性があります)。タスクをコピーして貼り付ける方法、または1台のコンピュータで作業する方法を学びます。手動で再入力するのは愚かなことです。
- ありがとうございます。ここに本当に役に立つ人がいます。
- どちらもLinuxですが、ディストリビューションごとにシェルとスクリプトの面で独自の特性がある可能性があります。 (ここにはディストリビューションのフルバージョンと最小バージョンの両方が含まれています。)シェルを確認してください(
ps -p$$ -ocmd=
私に役立ちました)源泉)。ディレクトリを手動で作成する必要があります(特に最小展開の場合)。 - 私にとっては、これはほとんどのシステム(たとえば「ポータブル」)で最もうまく機能するため、
#!/usr/bin/env <SHELL>
SHELLなどを使用してスクリプトを起動しますbash
。多くのガイドラインのウェブサイトでは、説明や警告なしに「常に開始」だけをsh
話しているようです。#!/bin/bash
本物ではありません。 - 住宅検査。このツールは非常に便利です。 (クレジット取引 -ロエマ)
Shebang がある Lubuntu(Xenial) Minimal(+LXDE) VM でスクリプトを実行できません。なくても大丈夫です。
次の提案に従ってください前の記事、私はshebangだけで4つの異なるバージョンで非常に単純なスクリプトを作成しました。
echotest(shebangラインを除く):
#blantantly simple test to figure out script problems
echo "this is working - type something for me to repeat it"
read input
echo $input
エコテスト - 空 - 表示
#!bin/bash
#blantantly simple test to figure out script problems
echo "this is working - type something for me to repeat it"
read input
echo $input
#!bin/dash
そして、[編集:この文書のスクリプトではなく、以下に「bin」挿入]に対応する2つがあります#!bin/sh
。
ファイルは~/bin
どこかでフォーラムを読んだ後、手動で作成したディレクトリに保存されます。
そこで、テストスクリプトは以下を生成します。
x@computer:~$ echotest
this is working - type something for me to repeat it
test1
test1
言い換えれば、Shebangなしで動作しますが、
x@computer:~$ echotest-bin-bash
bash: /home/x/bin/echotest-bin-bash: bin/bash: bad interpreter: No such file or directory
x@computer:~$ echotest-bin-dash
bash: /home/x/bin/echotest-bin-dash: bin/bash: bad interpreter: No such file or directory
x@computer:~$ echotest-bin-sh
bash: /home/x/bin/echotest-bin-sh: bin/sh: bad interpreter: No such file or directory
もっと遠く、
x@computer:~$ ./echotest-bin-bash
bash: ./echotest-bin-bash: No such file or directory
フォーラム/ブログで読んだ他の提案をテストするためにスクリプトを削除して~/bin
ください/usr/local/bin
。
x@computer:~$ echotest
bash: /home/x/bin/echotest: No such file or directory
他のすべてのバリエーションも同様です。
しかし、
x@computer:~$ sudo /usr/local/bin/echotest
this is working - type something for me to repeat it
test
test
(つまり、働く)
x@computer:~$ sudo /usr/local/bin/echotest-bin-bash
sudo: unable to execute /usr/local/bin/echotest-bin-bash: No such file or directory
Hangup
すべての権限はchmod +x <filename>
または(一般的ではない)によって付与され、chmod 777 <filename>
2回確認されましたls -l /rele/vant/directory
。
x@computer:~$ echo $PATH
/home/x/bin:/home/x/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
この質問を初めて試したとき、以前の回答に答えるために、Lubuntu Minimalは次のものがインストールされていることを示しました。
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii dash 0.5.8-2.1ubu amd64 POSIX-compliant shell
ii bash 4.3-14ubuntu amd64 GNU Bourne Again SHell
フォーラムで収集した完全に理解できないコマンドを使用してください。
x@computer:~$ file "$(type -P bash)" 2>/dev/null
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=[redacted for the forum], stripped
x@computer:~$ type -p bash
/bin/bash
Murphy、この記事を読んでいたら、私はbin / bashを呼び出してプロンプトを受け取ることができませんでした。私のクエリがターゲットデータから多くのコンテンツを取得しているかどうかわかりません。
最後に、.desktopファイルで(つまりshebangなしで)関数スクリプトをテストしましたが、それは完全に機能しました(Exec=echotest
)。
Shebonが機能しないのはなぜですか?このスクリプトは#!bin/bash
Ubuntu Mate(Xenial)ホストで正しく機能します。
これは非常に基本的なエラーであると確信していますが、混乱しています。これは私の2番目のシナリオなので、基本的な資料を入手できることを嬉しく思います。
事前にありがとう
編集する
ありがとうJesse_b。
Edit1.1 - いいえ、私は間違っていました。 #!/bin/bash は動作します。端末の履歴を検索してみましたが、先ほどお話した項目が見つかりませんでした。
そして#!/usr/bin/env bash
完璧に動作します。
編集2
ありがとう、マーフィー
hashbangを使用し、#!/bin/sh
素晴らしい#!/bin/bash
作品。
もっと遠く
x@computer:~$ ls -l /bin/bash
-rwxr-xr-x 1 root root 1037528 May 16 2017 /bin/bash
x@computer:~$ /usr/bin/env | grep bash
SHELL=/bin/bash
x@computer::~$ ls -l /bin/*sh
-rwxr-xr-x 1 root root 1037528 May 16 2017 /bin/bash
-rwxr-xr-x 1 root root 154072 Feb 17 2016 /bin/dash
lrwxrwxrwx 1 root root 4 May 16 2017 /bin/rbash -> bash
lrwxrwxrwx 1 root root 4 Feb 17 2016 /bin/sh -> dash
最終編集- ディストリビューションごとに hashbang/shebang のフォーマット方法がやや厳しい。私が見つけたこの投稿そのうちの1つは、以前のバージョンのMint / XfceおよびLubuntu / LXDEと同様の問題を説明しました。
(Lubuntu Minimal / LXDEゲストのUbuntu Mateホストでスクリプトを手動で再入力したときに問題が発生しました。ディストリビューション間のさまざまな動作を観察していると思いましたが)a)shebang形式の重要性を理解していません。 、b)一部のサイトは良いアドバイスを提供していない場合があります。 c) スペルエラーが頻繁に発生します。実験的にスクリプトがshebangなしで動作することを確認してください。 )
答え1
ハッシュバンはスラッシュで始める必要があります。/
#!bin/bash
ほとんど確実に有効なディレクトリ/ファイルパスではありません。#!/bin/bash
シェルが存在するかどうかわからない場合は、いつでもls
またはを使用してパスが正しいことを確認できます。または、パスを作成するより移植可能な方法は次のとおりです。
#!/usr/bin/env bash
これにより、システムはbash
自動的にviaパスを検索し(または選択したインタプリタ)、最初に見つけたパスをenv
使用します。