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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

2回答

1699閲覧

bashでファイル生成 echo "test" >> sample.txtじゃないよ

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/31 15:55

編集2018/02/01 15:47
# BEGIN Invisible default document and https <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] RewriteRule ^(.*)$ /index.html/$1 [L] </IfModule> # END Invisible default document and https

例えば上記の内容をtest.shによって.htsccessをいうファイルを作りそのファイルに上記内容を書き込む場合のスマートな方法は何がありますでしょうか?

こんな感じのしか思いつきませんが、スマートな方法があれば教えていただきたいです。
test.sh

#!/bin/bash echo "# BEGIN Invisible default document and https" >> .htaccess echo "<IfModule mod_rewrite.c>" >> .htaccess echo "RewriteEngine On" >> .htaccess echo "RewriteCond %{HTTPS} off" >> .htaccess echo "RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]" >> .htaccess echo "RewriteRule ^(.*)$ /index.html/$1 [L]" >> .htaccess echo "</IfModule>" >> .htaccess echo "# END Invisible default document and https" >> .htaccess cat .htaccess

あと話がちょこっと変わりますが、下記のようなファイルを雛形として用意しておきます。
.htsccess.modelというファイル名だとしましょうか。

# Environment variable setting for fuelphp SetEnv FUEL_ENV production

test.shではテスト環境、ステージング環境、本番環境の.htsccessを生成したいとします。
test.shでは.htsccess.modelに引数を3回読み取ります。

引数はtest, staging, producitonとします。

.htsccess.modelは引数を受け取り、
SetEnv FUEL_ENV $env
の$envの部分を受け取った引数に書き換えて、test.shに返します。
受け取ったtest.shは任意のパスに.htaccessというファイル名で保存します。

と、やりたい処理はこうですがこれって実現できるものなのでしょうか?

ファイルがメソッドだとするなら

echo .htsccess.model test > public_html/test/.htaccess echo .htsccess.model staging > public_html/staging/.htaccess echo .htsccess.model production > public_html/.htaccess

みたいなイメージです。

追記::

[mg1986jp@sv5015 ~]$ cat test.sh #!/bin/bash function sample() { case "$1" in test|staging|produciton) sed "s/production/$1/" .htsccess.model >.htsccess ;; *) echo B0z?t$,$*$+$7$$ exit 2 ;; esac } $(sample "staging") [mg1986jp@sv5015 ~]$ ./test.sh ./test.sh: 行 10: 予期しないトークン `(' 周辺に構文エラーがあります ./test.sh: 行 10: ` echo B0z?t$,$*$+$7$$' [mg1986jp@sv5015 ~]$

うーん、使い方がおかしいのでしょうか、、、、

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

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

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

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

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

guest

回答2

0

ベストアンサー

1つ目。これが普通。

Bash

1cat <<\EOF >.htaccess 2# BEGIN Invisible default document and https 3<IfModule mod_rewrite.c> 4RewriteEngine On 5RewriteCond %{HTTPS} off 6RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 7RewriteRule ^(.*)$ /index.html/$1 [L] 8</IfModule> 9# END Invisible default document and https 10EOF

こういうこともできる。

Bash

1echo '# BEGIN Invisible default document and https 2<IfModule mod_rewrite.c> 3RewriteEngine On 4RewriteCond %{HTTPS} off 5RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 6RewriteRule ^(.*)$ /index.html/$1 [L] 7</IfModule> 8# END Invisible default document and https' >.htaccess

2つ目。

Bash

1case "$1" in 2test|staging|produciton) 3 sed "s/production/$1/" .htsccess.model >.htsccess 4 ;; 5*) 6 echo 引数がおかしい 7 exit 2 8 ;; 9esac

投稿2018/01/31 16:10

otn

総合スコア84499

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

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

earnest_gay

2018/02/01 15:38

回答ありがとうございます。 すみませんが2つ目の解説をお願いできないでしょうか。 sed "s/production/$1/" .htsccess.model >.htsccess の部分しかなんとなくしか分かりません。 .htsccess.model ファイルからproductionの部分を$1(つまり第一引数)に書き換えて、.htsccessファイルとして出力する。 でしょうか? echo 引数がおかしい exit 2 ;; の部分も見慣れないのでよくわからず、、、 そしてこの記述はメソッド内の部分でしょうか??? 具体的な使い方が分からないです、、、
earnest_gay

2018/02/01 15:47

質問に追記しましたのでお手隙の際に見ていただけないでしょうか、、
otn

2018/02/02 05:34 編集

> ./test.sh: 行 10: 予期しないトークン `(' 周辺に構文エラーがあります 文字コードがあって無くて化けているのでは? > .htsccess.model ファイルからproductionの部分を$1(つまり第一引数)に書き換えて、.htsccessファイルとして出力する。 そうです。 case の *) は、C等で言うと else if (1) { みたいなものです。つまり、else ですね。
guest

0

こんにちは。
bash のヒアドキュメントを使って、以下でどうでしょう?

[ykt68@macbook15 ~]$ cat test.sh

bash

1#!/bin/bash 2 3OUTPUT=./.htaccess-$1 4 5cat << EOS > ${OUTPUT} 6# Environment variable setting for fuelphp 7SetEnv FUEL_ENV $1 8 9# BEGIN Invisible default document and https 10<IfModule mod_rewrite.c> 11RewriteEngine On 12RewriteCond %{HTTPS} off 13RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 14RewriteRule ^(.*)$ /index.html/$1 [L] 15</IfModule> 16# END Invisible default document and https 17EOS

[ykt68@macbook15 ~]$ chmod +x test.sh

[ykt68@macbook15 ~]$ ./test.sh dev
[ykt68@macbook15 ~]$ cat .htaccess-dev

text

1# Environment variable setting for fuelphp 2SetEnv FUEL_ENV dev 3 4# BEGIN Invisible default document and https 5<IfModule mod_rewrite.c> 6RewriteEngine On 7RewriteCond %{HTTPS} off 8RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 9RewriteRule ^(.*)$ /index.html/$1 [L] 10</IfModule> 11# END Invisible default document and https

[ykt68@macbook15 ~]$

以上参考になれば幸いです。

投稿2018/01/31 16:19

jun68ykt

総合スコア9058

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問