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

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

ただいまの
回答率

90.47%

  • CentOS

    2767questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Ubuntu

    1484questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • csh

    22questions

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

shellスクリプトをsourceで実行したときに「#!/bin/csh」が無視されることへの対処法

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 325

A5size

score 6

cshで書かれてたshellスクリプトがあり、
それをUbuntuOS上のデフォルトのshellがbashであるような環境で
動かしたいと考えております。

素朴にそれを行おうと思えば、
shellスクリプトの1行目に

#!/bin/csh -f


と書けば良いですが、
そのスクリプトはcdでディレクトリを移動し、
スクリプト実行後もその影響を残すことを目的としています。
そこで、「source」で実行することで、
これまで目的の挙動を実行していたのですが、
CentOS環境からUbuntuOS環境にこれを移植した際に、
これがうまく動かなくなってしまいました。
端的に言えば、
一行目の「#!/bin/csh -f」が無視されているようです。

例えば次のような
一つ上の階層に戻ることを目的とした
「back.sh」というスクリプトがあったとして、

#!/bin/csh -f                                                                                              

if ( $1 == '' ) then                                                                                       
 echo 'Back!'                                                                                              
 cd ..                                                                                                     
endif 


これを

% source ./back.sh


と実行することで、
これまで目的の挙動を実現していたのですが、
今のUbuntuOS環境でこれを実行すると

% source ./back.sh
-bash: ./sh.sh: line 7: syntax error: unexpected end of file


となってしまいます。

長文となってしまい恐縮ですが、
どなたか対処方法を教えていただきたいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

sourceの意味を理解されていますでしょうか?
コマンドラインから入力する代わりにファイルから入力されると言うことなので、Bashのコマンドラインにcshのコマンドを入力するとエラーになって当然です。

・ログインシェルをcsh(or tcsh)に変える
・そのスクリプトをBashで書き直す

の二択です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/27 23:17

    そうでしたか、
    勉強不足でした。
    知人から引き継いだスクリプトで
    上に書いたように使っていたと
    言っていたのですが、
    もしかすると私の勘違いで、
    ログインシェルがcshの環境で使っていたのかもしれません。
    bashで書き直すことで正しく動きました。
    ありがとうございました。

    キャンセル

0

>そのスクリプトはcdでディレクトリを移動し、
>スクリプト実行後もその影響を残すことを目的としています。
という目的に対し、どのようなshellが使われるかはあまり関係ないです。
その影響を残したい というのであれば、source <file> が第一の選択肢で、
あとは、cd <どこか> とタイプする手間を減らすという方法になります。
減らす方法に関しては複数の方法があって、
/tmp/a/b/c/d に移動したいとして、

  1. alias MyCd cd /tmp/a/b/c/d/ みたいに別名をつける方法
  2. dir=/tmp/a/b/c/d みたいに変数に入れておいて、cd $dir のように置きなおす方法
  3. tcshの場合は、complete 'cd/n/(/tmp/a/b/c/d/ /tmp/v/x/y/z/)のように列挙して選ぶ方法があります。completeに関してはここで説明されています。
  4. 上の方法と組み合わせて、cd ‘cmd‘ としてcmd の実行結果をcd の行先に与える方法。ここで‘は逆引用符。たとえばcd ‘echo /tmp/a/b/c/d‘とか、cd ‘ date +%x‘
     

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • CentOS

    2767questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Ubuntu

    1484questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • csh

    22questions

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