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

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

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

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

csh

cshは、C言語スタイルの構文を持つUNIX系OSのシェルの1つのことです。

Q&A

解決済

2回答

4301閲覧

cshでPythonを実行したい

nununumomomo

総合スコア6

Python 3.x

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

csh

cshは、C言語スタイルの構文を持つUNIX系OSのシェルの1つのことです。

0グッド

0クリップ

投稿2019/10/03 05:23

前提・実現したいこと

CshでPythonスクリプトを実行したいです
シェル実行時にシンタックスエラーを吐かれてしまいます
初歩的な質問で申し訳ないですがよろしくお願いします

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

期待してないtoken '"hello"'のあたりにシンタックスエラー

該当のソースコード

~csh_test.csh~
"#!/bin/csh -f #(先頭の " は無視してください)
echo "Hello!"
if ($#argv == 1) then
echo $argv[1]
else
/home/yoshida/csh_test/hello.py
endif

~hello.py~
print("hello")

試したこと

シェルの実行許可をとりました

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

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

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

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

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

Y.H.

2019/10/03 05:30

エラーメッセージは省略せずに記載してください。省略すると情報のほとんどが失われます。 「期待してないtoken」の前にファイル名と行番号が表示されているはずです。
guest

回答2

0

ベストアンサー

エラー自体の原因ですが、Cシェルが/bin/shがPython3のスクリプトをCシェルスクリプトだとして実行しています。Python3のスクリプトのほうにもシバン#!を追加してください。

Python3

1#!/usr/bin/python 2 3print("hello")

あとは、別回答にあるようにpythonコマンドの引数として指定して起動した方がスクリプトに対する実行権限の付与もいらないし、良いと思います。


追記/修正しました:2019-10-03 17:22
コメントを受け、回答中に誤りがあったことが分かりましたので、追記、修正させていただきました。
Cygwin 上でシェルごとのエラー内容を再度確認しました。エラー内容がBシェルとCシェルで異なります。質問中のエラーは、/bin/shによってなされたものと内容が同等でした。

sh

1$ cat hello.py 2print("hello") 3 4$ ls -l hello.py 5-rwxrwxr-x+ 1 user01 None 16 10月 3 17:14 hello.py 6 7$ /bin/sh ./hello.py 8./hello.py: 行 1: 予期しないトークン `"hello"' 周辺に構文エラーがあります 9./hello.py: 行 1: `print("hello")' 10 11$ /bin/csh ./hello.py 12Badly placed ()'s.

※コメントをいただいたotnさん、どうもありがとうございました。

投稿2019/10/03 06:20

編集2019/10/03 08:24
dodox86

総合スコア9183

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

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

otn

2019/10/03 07:01

> CシェルがPython3のスクリプトをCシェルスクリプトだとして実行しています。 細かい指摘で済みませんが、先頭が#でないので、/bin/sh が実行します。 cshの場合、 ・正しい#!の記述がある → execveが成功するので、そのコマンドが実行される ・execveがエラーで、ファイルが #で始まる → cshスクリプトと見なして実行 ・execveがエラーで、ファイルが #で始まらない → shスクリプトと見なして実行
nununumomomo

2019/10/03 07:07

ありがとうございました 初歩的な質問で申し訳なかったです 原因がわかってすっきりしました
dodox86

2019/10/03 07:17

otnさん、ご指摘ありがとうございます。そのとおりで、確かに/bin/shのエラーでした。 "#!/bin/csh -f #(先頭の " は無視してください) とあったので、修正してtcshで再現したつもりでしたが、転記ミスがありました。また、不正なシバンを指定した場合の挙動は知りませんでした。勉強になりました。
otn

2019/10/03 07:40

> また、不正なシバンを指定した場合の挙動は知りませんでした。勉強になりました。 「不正なシバン」というか、csh登場後で、shbangの機能が無かった時代には、cshは、先頭の#で、cshスクリプトとshスクリプトを区別していました。当時はshは#によるコメント機能が無かったので、shスクリプトのファイル先頭に#が来ることはあり得なかった。 shはファイル実行時にそんな先頭文字での区別をしないので、ログインシェルがshの時は、cshスクリプトを実行するには、「csh ファイル名」という方法しかなかったです。まあ、普通、cshでスクリプトは書きませんが。
dodox86

2019/10/03 08:27

otnさん、重ねてありがとうございます。歴史的な貴重な情報、納得がいきました。
guest

0

提示のcshが読みにくいので半分想像モードですが、

csh

1#!/bin/csh -f 2echo "Hello!" 3if ($#argv == 1) then 4 echo $argv[1] 5else 6 python /home/yoshida/csh_test/hello.py 7endif

では?

投稿2019/10/03 05:36

nandymak

総合スコア799

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問