Linux/Ubuntuで別のディレクトリからスクリプトを実行する方法
複数のフォルダからスクリプトを実行するのは、一見簡単そうに見えて、意外とよくある失敗の一つです。例えば、複数のタスクでスクリプトを操作したり、複数のディレクトリにまたがってスクリプトを整理しようとしたりしているときに、ファイル名を入力しても実行できないことに気づくことがあります。それは、そのスクリプトが現在のディレクトリにないからです。あるいは、パーミッションの問題かもしれません。さて、このガイドでは、別の場所でスクリプトを実行するための現実的な方法をいくつか紹介します。もちろん、Linuxや*nixシステムはスクリプトを複雑にするのが大好きだからです。少しでも皆さんの悩みの種を解決できれば幸いです。
Linux または Unix で他のディレクトリからスクリプトを実行する方法
スクリプトへのフルパスの使用
これは最も簡単で無駄のない方法です。スクリプトの保存場所を正確に把握している場合は、ターミナルにフルパスを入力するだけです。例えば、/home/ user/scripts/myscript.sh にスクリプトがある場合は、次のコマンドを実行します。
/home/user/scripts/myscript.sh
ただし、スクリプトは実行可能でなければなりません。実行可能でないと、Linux は権限エラーをスローします。以下のコマンドで確認できます。
ls -l /home/user/scripts/myscript.sh
-rw-r--r--
実行に「 and no」のような表示が出た場合はx
、実行可能にする必要があります。
chmod +x /home/user/scripts/myscript.sh
設定によっては、権限の変更が初回失敗したり、再起動が必要になったりする場合があります。所有権の問題がある場合は、`sudo` を追加することで解決できるかもしれません。実行可能ファイルを作成したら、フルパスで実行すると魔法のように動作し、多くの面倒な作業を省くことができます。
スクリプトのディレクトリに変更する
同じフォルダ内で複数のスクリプトを実行している場合、または整理しておきたい場合は、まずディレクトリを変更します。
cd /home/user/scripts
次に、次のようなスクリプトを実行します。
./myscript.sh
これはインタラクティブに作業しているときに「そのフォルダに留まる」モードのようなので、かなりすっきりします。ただし、./
プレフィックスを忘れないようにしてください。LinuxはPATHを自動的に検索しません。
プロのヒント: スクリプトが実行可能としてマークされていないが信頼できる場合は、次のようにbash
直接実行できます。
bash myscript.sh
これは権限をバイパスしますが、信頼できるスクリプトで使用してください。もちろん、Linux では、権限を必要以上に難しくしなければならない場合があるためです。
Bashコマンドを使用してどこからでもスクリプトを実行する
権限をあまり気にせずに簡単な方法が必要な場合は、次のコマンドを実行します。
bash /home/user/scripts/myscript.sh
これはスクリプトが実行可能かどうかに関係なく動作します。テスト中や急いでいるときに便利です。正直に言うと、一部のマシンではこの方が速く感じますが、頻繁に使用するには少し扱いにくいです。
追加のヒントとよくある問題
- 「実行」をクリックする前に、スクリプトにエラーがないか必ず確認してください。特に権限やパスが関係する場合は注意が必要です。スクリプトに潜むタイプミスほど生産性を低下させるものはありません。
- 同じディレクトリからスクリプトを実行し続ける場合は、そのディレクトリをPATHに追加することを検討してください。そうすれば、スクリプト名を入力するだけで実行でき、毎回フルパスを覚える必要がなくなります。
- 何か問題が発生した場合は、 を実行してデバッグしてみてください
bash -x /path/to/yourscript.sh
。コマンドを実行する前にすべてのコマンドが表示されるので、潜在的なバグを見つけるのに非常に役立ちます。
まとめ
異なるフォルダにあるスクリプトの実行に慣れることは、Linuxの必須スキルです。フルパス、ディレクトリの変更、あるいは単に を実行するなどbash
、これらの方法はあらゆる柔軟性を保つのに役立ちます。時間をかけて練習すれば、自分のワークフローに最適な組み合わせが見つかるでしょう。そして正直なところ、一度慣れてしまえば、とても自然に、まるで第二の天性のように感じられるでしょう。まあ、ほとんどの場合は。
よくある質問
Bash 以外の言語で書かれたスクリプトを実行できますか?
そうです。インタープリターを指定するだけです。例えば、Pythonスクリプトの場合は を実行しますpython /path/to/script.py
。Perl、Ruby、その他の言語でも同じ原則が適用されます。
「アクセスが拒否されました」というエラーが表示された場合はどうすればよいですか?
これは通常、スクリプトが実行可能としてマークされていないことが原因です。ただ を実行してくださいchmod +x /path/to/script
。権限がロックされている場合は、 を前に付けなければならない場合もありますsudo
。
システムの起動中にスクリプトを自動的に実行する方法はありますか?
はい、 systemdのサービスファイルを使ってシステム起動スクリプトを追加したり、cron( などcrontab -e
)にスクリプトを配置したり、古いシステムならinitスクリプトを使うこともできます。でも、それはまた別の話です。
まとめ
- フルパスはスクリプトを素早く実行します。
- ディレクトリを変更すると、複数のスクリプトを整理できます。
- 使用すると
bash
、権限のチートコードのように機能します。 - 権限は重要です。スクリプトが実行可能であることを確認してください。
- PATHにディレクトリを追加すると、繰り返し実行されるタスクを効率化できます。