bashスクリプトをプログラムで実行可能にする


12

ドライブを作成してマウントするには、bashスクリプトを作成する必要があります。したがって、2つの簡単なコマンド。コマンドラインで入力すると、両方とも「機能」します。

このスクリプトは、通常のユーザーがログインするたびに作成および実行されるため、その時点でこのスクリプトを実行可能にする方法が必要です。これまでのところ、これを機能させることはできません。たとえばmkdir /vvv/gggg、スクリプトが実行可能でないため、最初の部分は続行されません(推測しています)。

これが理にかなっていることを願っています。これは可能ですか?この作品の作り方に関するご意見をいただければ幸いです。

更新

ご回答ありがとうございます。Linuxを初めて使用すること以外の追加情報を追加する必要があります。

Ulteoと呼ばれるオープンソースの仮想デスクトップアプリケーションを使用しています。このアプリはUbuntuの上で動作し、ほとんどサポートされていません-その理由はここにいます。基本的に、私は火で学習しています。

そのため、アプリケーションにはログインスクリプト管理機能があり、スクリプトをユーザーに関連付けることができます。net useを使用した単純なWindowsスクリプトは完全に正常に機能します。ただし、Linux bashスクリプトを適用しようとしても何も起こりません。

chmod +xスクリプトを実行可能にするには、最初にスクリプトに対してaを実行する必要があるため、これが失敗する理由だと考えています。ところで、Ulteoはchroot刑務所で実行されます。スクリプトを作成して保存しましたが、スクリプトが見つかりませんでした。chroot刑務所の内側と外側の両方を検索しました。

私はdan08によるアプローチが、最初のスクリプトが手動で検索して実行可能にする別のスクリプトを参照するようにしています。同じ問題が発生しますか?

この追加情報は状況を明確にしますか?前もって感謝します。

写真が添付されています。

![ログインscipt管理コンソール] [1]

![動作するWindowsスクリプト] [2]

![動作しないシンプルなLinuxスクリプト] [3]

申し訳ありませんが、まだ画像を投稿できません


ユーザーがログインするたびにスクリプトを実行するcronジョブを作成しますか? このガイドは、それらを実行可能にするのにも役立ちます
睡眠不足のフシギダネ14

1
「通常のユーザーがログを記録するたびにスクリプトが作成および実行される」のはなぜですか?論理的に聞こえないので、これを修正します。スクリプトをユーザーとしてパラメーターとしてフィードし、作成後はスクリプトをそのままにします。
リンツウィンド14

1
質問には時制の奇妙な組み合わせがあり、現在何が起こっているのか、あなたが何をしたいのかについて私は混乱しています。現在の状況についてもう少し具体的に話していただければ助かります。
オリ

してください編集あなたの質問をし、私達にスクリプトを示しています。の出力も表示しますls -l scriptname。また、スクリプトの正確な作成方法と、スクリプトを一度だけ作成してそのまま残さない理由も明確にする必要があります。最後に、通常のユーザーは書き込みアクセス権を持って/varいないため、そこにディレクトリを作成できません。
テルドン14

1
コメントに画像リンクを投稿してください。(推奨される)編集を介してインポートします。
ムル14

回答:


19

必要なことが2つあります。

  1. スクリプトの冒頭でスクリプトインタープリターを参照します。

    #!/bin/bash
  2. 許可を設定して実行可能にします。

    chmod +x myscript.sh

3

スクリプトを実行可能にするのではなく、別のアプローチを取り、スクリプトの呼び出し方法を変更できます。

script.sh 実行可能スクリプトを実行するには十分です。

しかしながら

実行するプログラムを指定すると、実行不可能なスクリプトを実行できます。

そのため/bin/bash script.shbash script.shまたはpython script.pyすべてが非実行可能スクリプトを実行します。

したがって、スクリプトの呼び出し方法を編集し、実行に使用するバイナリを指定することをお勧めします。


私の側では、通常、それらを実行可能にします。そうしないと、それ自体からファイルを再起動できないためです。例として、python os.execv(__file__, sys.argv)は機能しません。そして、確かにそのような状況がもっとあります。セキュリティが目標の場合は、root / sudoからセキュリティを使用するだけで、ユーザーがバイナリを実行できるようにします。また、目標がセキュリティの場合、スクリプトを実行できるようにしたくないのは、とにかくシステムを害する可能性があるからです...実行可能かどうか。そのため、実行可能にするのを避けることが重要である理由はわかりません。
m3nda

0

C、C ++、Pythonなどでプログラムを作成し、システムコマンドを使用してbashスクリプトを実行します。

たとえば、Cプログラムは次のようになります。

#include "stdio.h"
int main(int argc, char const *argv[])
{
    system('chmod +x path/yourbashscript.sh');
    system('path/yourbashscript.sh');
    return 0;
}

起動時にプログラムを実行するには、起動プログラムのリストに追加します。ダッシュボードからスタートアップアプリケーションを開き、[追加]ボタンをクリックして、コンパイルされた実行可能ファイルをリストに追加します。


2
-1:これは実際には答えではありません。なぜPythonはシェルスクリプトよりも優れているのでしょうか?Cはもちろんです!いずれにせよ、あなたは実際にこのプログラムがどのように見えるかを示しておらず、スタートアッププログラムリストにプログラムを追加する方法を説明していません。
テルドン14

あなたの最初の質問への答えは、プログラミング言語は、私は私の答えを編集した残りのためなどのスクリプト言語と異なる方法を説明することによって与えられる
akxer

編集のおかげで、-1が削除されました。ただし、LinuxでCプログラムを使用してシェルスクリプトを起動することは完全に不要であり、不必要なオーバーヘッドが追加されます。スクリプト自体をスタートアップアプリケーションに追加しないのはなぜですか?または、本当にCを使用したい場合は、直接実装しないのはなぜですか Linuxでシェルスクリプトを呼び出すラッパーをCで作成することは、SUIDビットを設定してスクリプトを実行する必要がない限り、まったく意味がありません。その場合でも、通常はより簡単なソリューションがあります。
テルドン14

1
-1:スクリプトに実行権限がない場合、これは引き続き失敗します。に電話する必要がありますbash path/yourbashscript.sh
ムル14

1
これは疑問を提起します。なぜbash path/yourbashscript.shこのCプログラムをコンパイルして実行する代わりに直接実行しないのでしょうか?
ムル14

0

コマンドラインで次を実行することにより、bashスクリプトを実行可能にできます。

cd ~/path/to/file
chmod +x nameoffile.sh

次に、起動時に実行するようにするには、@ akabhiravが言ったように、起動プログラムのリストに追加します。


私には、彼がchmodする方法に精通しているという質問が(ある程度)示されているようです。しかし、彼はスクリプト自体から実行可能にするメソッドを求めています(したがって、手動でこれを行う必要はありません)。私はまだ方法に疑問を持っていますが、その場でスクリプトを再作成することはこれを行う方法ではありません。
リンツウィンド14

0

SHCは汎用シェルスクリプトコンパイラです。コマンドラインで指定されたスクリプトを取り、Cソースコードを生成します。次に、生成されたソースコードがコンパイルおよびリンクされ、ストリップされたバイナリが生成されます。

コンパイルされたバイナリは、シェルコードの最初の行で指定されたシェル(shebang:#!/bin/shなど)に依存しているため、SHCは完全に独立したバイナリを作成しません。

SHC自体はのようなコンパイラではありませんcc。むしろ、シェルスクリプトをエンコードおよび暗号化し、有効期限機能が追加されたCソースコードを生成します。次に、システムコンパイラを使用して、元のスクリプトとまったく同じように動作するストリップバイナリをコンパイルします。実行時に、コンパイルされたバイナリはシェルの-cオプションを使用してコードを復号化し、実行します。


実行可能ファイルがまだ元のシェル環境を必要とする場合、これのポイントは何ですか?これは、単に#!andを追加するよりも優れていchmod +xますか?
xiota
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.