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

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

新規登録して質問してみよう
ただいま回答率
85.49%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

3796閲覧

bash 定数で読み取り専用の変数ですと表示されてしまう

earnest_gay

総合スコア615

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/01/29 15:59

編集2018/01/29 16:03

ある処理をシェルに任せたくてbashを触っています。
その際になるべくコーディング規約に基づいた記法をしたくて色々見ているのですが、定数にしてしまうと-bash: HOGE_HOGE: 読み取り専用の変数です、とでるのですが表示させたくないです。が、こういうものなんでしょうか?

1回目実行時にはそんな文言でませんが2回目にはでてしまいます。

#!/bin/bash readonly BASE_DIR="deploy_test" readonly TEST_DIR="test" readonly STAGING_DIR="staging" readonly PRODUCTION_DIR="production" readonly SUB_DOMAIN_TEST="test" readonly SUB_DOMAIN_STAGING="stg" readonly PUBLIC_DIR="public" readonly SYMBOLIC_NAME="index.html" echo $SYMBOLIC_NAME
[mg1986jp@sv5015 ~]$ . ./samo.sh index.html [mg1986jp@sv5015 ~]$ . ./samo.sh -bash: BASE_DIR: 読み取り専用の変数です -bash: TEST_DIR: 読み取り専用の変数です -bash: STAGING_DIR: 読み取り専用の変数です -bash: PRODUCTION_DIR: 読み取り専用の変数です -bash: SUB_DOMAIN_TEST: 読み取り専用の変数です -bash: SUB_DOMAIN_STAGING: 読み取り専用の変数です -bash: PUBLIC_DIR: 読み取り専用の変数です -bash: SYMBOLIC_NAME: 読み取り専用の変数です index.html

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

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

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

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

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

guest

回答1

0

ベストアンサー

. ./samo.shによる実行と、./samo.shによる実行の区別は付いていますでしょうか?

. ./samo.shだと、一度目の起動でリードオンリーに設定され、二度目の起動でそのリードオンリーにした変数に代入しているので、エラーになります。

が、こういうものなんでしょうか?

リードオンリーの変数に代入するとエラーになるのは自明です。

対策はどうしたいかに依ります。
1行目に#!/bin/bashが書いてあることからして、おそらく、実は./samo.shがしたかったことだという事ではないでしょうか?

投稿2018/01/29 16:53

otn

総合スコア84491

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

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

earnest_gay

2018/01/30 02:17

>. ./samo.shによる実行と、./samo.shによる実行の区別は付いていますでしょうか? こちら区別がついていませんでした、、、
otn

2018/01/30 03:09

ドットコマンドによる実行だと、今のシェルプロンプトに、かいてあるまま打ち込んだのと同じ効果です。 ドット無しの ./samo.sh の場合(実行には、chmod +x ./samo.sh の実施が必要です)は、サブプロセスのシェルを起動してそのシェルの中で書いてある事を実行しますので、実行が終わるとそのプロセスの環境は消えます。毎回、さらの環境での実行ですね。
earnest_gay

2018/01/30 07:19

これは結構使いますね。 自分自身を再帰的に実行するときとか、トッドコマンドにより実行してたら動作がおかしくなりそうです。 教えていただきありがとうございます。
otn

2018/01/30 10:15

ドットコマンドを使うのは、多くは、「今のシェル環境に変更を及ぼしたい場合」です。 .bashrcを修正したので今の環境に反映したいとか、include 的な使い方とか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問