学校のシステムでは、入力せずにスクリプトファイルを実行しbash
たりcsh
、スクリプトの種類を指定せずにスクリプトファイルを実行したりできます。ただし、Ubuntuでは、bash script.bash
たとえば入力する必要があります。これはUbuntuで常に必要ですか、それとも私が変更できる設定ですか?
.sh
bashスクリプトに使用しない場合は+1 。ただし、通常、UNIXの世界では、ファイル拡張子は実行可能スクリプトには使用されません。
学校のシステムでは、入力せずにスクリプトファイルを実行しbash
たりcsh
、スクリプトの種類を指定せずにスクリプトファイルを実行したりできます。ただし、Ubuntuでは、bash script.bash
たとえば入力する必要があります。これはUbuntuで常に必要ですか、それとも私が変更できる設定ですか?
.sh
bashスクリプトに使用しない場合は+1 。ただし、通常、UNIXの世界では、ファイル拡張子は実行可能スクリプトには使用されません。
回答:
必ず、./script
フルパスなどでスクリプトを開始してください。ただscript
かもしれない仕事は(それがディレクトリがある場合に動作する$PATH
ように、/usr/bin
UNIXシステムでは、あなたのパスにカレントディレクトリを持っている習慣ではありませんので、(セキュリティ上の理由から、それの良いです!)、)
スクリプトが実行可能であることを確認してくださいchmod +x script
。たとえば、実行可能になります。
#!/bin/bash
スクリプトの最初の行にあることを確認してください。また、何らかのWindowsエディターで編集されていないことを確認してください。これらは多くの場合、UNIXのものとは異なるeol(行末)の「DOSタイプ」を使用するためです(上記のチェックリストに問題がなければ、インタープリター:そのようなファイルやディレクトリはありません」など、それが/ bin / bashであっても、これは多くの場合、印刷不能としての理由です-したがって、通常は表示されません-\ rはの一部として扱われます通訳者のパス)
すでに言及した他の人:/bin/bash
bash機能を使用する場合、それも/bin/sh
にシンボリックリンクされていることが重要です/bin/bash
が、今日では(私が知る限り)シンボリックリンクされdash
ており、POSIXのみがbash互換性を提供しますsh
。当社の非常に高価なソフトウェアでもこの問題があります。スクリプトに#!/bin/sh
は最初の行が含まれていますが、bashの機能にも依存しています。
#!/usr/bin/env bash
少し携帯性が高いです。
別の強く推奨されていない方法は、に追加する.
ことPATH
です。
PATH=".:$PATH"
または
PATH="$PATH:."
このアプローチの問題は、前者の場合、システムコマンドが現在のディレクトリの実行可能ファイルでオーバーライドされる可能性があり、後者の場合、未知のコマンドが依然としてオーバーライドされる可能性があることです。
以下を考慮してください。
#!/bin/bash
./my_malicious_script &>/dev/null
/bin/ls "$@"
おそらく、手遅れになるまで気付かないでしょう。
echo
たとえば、システムディレクトリにあるコマンドと同じ名前を持つコマンドが現在の作業ディレクトリにある場合、たとえば、ディレクトリのPATH
前に変数が設定されているため、ディレクトリ内のコマンドが使用されます/bin
。シェルは、の順序に応じて特定のディレクトリ内のコマンドを単に検索しPATH
、何もオーバーライド/破棄しません。しかし、はい、これは意味を持っている