Shebang を使用して Lubuntu(Xenial) Minimal(+LXDE) VM でスクリプトを実行することはできません。

Shebang を使用して Lubuntu(Xenial) Minimal(+LXDE) VM でスクリプトを実行することはできません。

単純なタイプミスと深い無知のため、ここで少し恥ずかしいです。悲しみを和らげてください。

  1. hasbangs/shebangsには常に先頭の/文字が必要です。#!/bin/bash
  2. もっと正確に
  3. コピーと貼り付けを有効にせずにホストとゲスト(仮想)システム間で作業している場合は、停止してください。タイプミスはコードや問題を台無しにする可能性があります(人を迷惑にする可能性があります)。タスクをコピーして貼り付ける方法、または1台のコンピュータで作業する方法を学びます。手動で再入力するのは愚かなことです。
  4. ありがとうございます。ここに本当に役に立つ人がいます。
  5. どちらもLinuxですが、ディストリビューションごとにシェルとスクリプトの面で独自の特性がある可能性があります。 (ここにはディストリビューションのフルバージョンと最小バージョンの両方が含まれています。)シェルを確認してください(ps -p$$ -ocmd=私に役立ちました)源泉)。ディレクトリを手動で作成する必要があります(特に最小展開の場合)。
  6. 私にとっては、これはほとんどのシステム(たとえば「ポータブル」)で最もうまく機能するため、#!/usr/bin/env <SHELL>SHELLなどを使用してスクリプトを起動しますbash。多くのガイドラインのウェブサイトでは、説明や警告なしに「常に開始」だけをsh話しているようです。#!/bin/bash本物ではありません。
  7. 住宅検査。このツールは非常に便利です。 (クレジット取引 -ロエマ)

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/bashUbuntu 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使用します。

おすすめ記事