質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

4回答

3499閲覧

ターミナルでのshellの実行

saki_09

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2017/02/15 08:13

###前提・実現したいこと

ターミナル上でshellスクリプトを使ってpythonのプログラムを回したいです。
その過程で以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

python: can't open file '○○.py': [Errno 2] No such file or directory

###該当のソースコード

<ターミナル上> $chmod +x+r+w /Users/…/○○.sh $/Users/…/○○.sh <sh内部> #!/bin/bash … python ○○.py $dim $batch…

###試したこと
ターミナル上で
chmod +x ○○.py

###補足情報(言語/FW/ツール等のバージョンなど)
python3使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

メッセージの通りなのですが、
ターミナルでシェルスクリプトを実行している場所に、○○.pyが存在しないためです。

○○.pyが存在するディレクトリに移動して実行するか、
○○.pyがある場所にパスを通して、
○○.py をpythonコマンドの引数で実行するのではなく直接コマンドとして実行します。

投稿2017/02/15 08:39

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

pythonが起動されたとき、カレントディレクトリはターミナルのカレントディレクトリになっています。
.pyをフルパスで指定したほうがいいでしょう

投稿2017/02/15 08:19

katsuya141

総合スコア367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saki_09

2017/02/15 08:29

ターミナル上で $chmod +x+r+w /Users/…/○○.py $ chmod +x+r+w /Users/…/○○.sh $./Users/…/○○.sh を実行してみたところ、 -bash: ./Users/…/○○.sh: No such file or directory と表示されてしまいました。 パスの通し方が間違っているのか、シェルスクリプトの書き方がそもそも間違っているのかのどっちかだと思うのですが、そこがわかりません。
katsuya141

2017/02/15 08:32

./はカレントディレクトリからの相対パスの意味です。 /Users ... と書くべきです
Y.H.

2017/02/15 08:33

カレントディレクトリが / でないのであれば ./Users/…/○○.sh とするとカレントディレクトリの下のUsersディレクトリの下の…の下の○○.shを実行することになるので /Users/…/○○.sh で実行してください。
guest

0

シェルスクリプトと同じ場所にpythonのファイルが配置されている場合は、以下のように絶対パスを指定してやることが解決できます。

bash

1$ pwd 2/ 3 4$ cat /tmp/test.sh 5# test.shが置かれているディレクトリのフルパスを取得 6SCRIPT_DIR_PATH="$(dirname "$(readlink -f "$0")")" 7 8# ディレクトリのフルパスにpythonのファイル名を付与して出力させてみる 9echo ${SCRIPT_DIR_PATH}/your.py 10 11$ /tmp/test.sh 12/tmp/your.py

投稿2019/10/08 03:46

genzouw

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

シェルスクリプトはスクリプトファイルの置いてある場所ではなく、実行した場所を起点にしています。

仮に、以下のようにlsするだけのファイルを/tmp/test.shとして作成した場合

shell

1#!/bin/sh 2ls

以下のように、実行する場所によって結果が変わります。

$ cd /tmp $ /tmp/test.sh test.sh $ cd /home/kunai $ /tmp/test.sh (/home/kunai 直下のファイルがズラズラ表示される)

ですので、実行するファイルもフルパスで記述した方が良いです。

投稿2017/02/15 08:25

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問