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

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

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

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

520閲覧

Vimでファイル編集する際のコマンド入力を、Dockerfile内で自動化したい。

unity3dbigginer

総合スコア65

Linux

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2023/01/17 09:43

前提

現在、Dockerfileを作成して、イメージの作成をしています。
Dockerfileの中に、ファイルを編集する処理を追加しようとしています。
Vimが使えるようにインストールしたものの、キーボード入力をDockerfile内で自動化するよう実現する方法がわかりません。

実現したいこと

キーボードから入力するコマンドを、Dockerfileで実現する。

自動化したい、キーボードから入力するコマンド

①vim hoge.xml
②3G
③i
④<!--
⑤:wq

⑥vim hoge.xml
⑦6G
⑧i
⑨-->
⑩:wq

以下、具体的な処理の説明です。
hoge.xmlファイルの、3~6行目をコメントアウトしています。
②、⑦で行数移動、④、⑨でコメントを入力
⑤、⑩で上書き保存

本来、④終了後にキーボードでは「ESC」を押すことでモード切替ができますが、
「ESC」を押すことをDockerfileで表現することができないと考え、一度上書き保存して、再度開くようにしています。

現在実装途中のソースコード

Docker

1FROM ubuntu 2RUN ["apt-get", "update"] 3RUN ["apt-get", "install", "-y", "vim"] 4 5RUN ["vim", "hoge.xml"] 6RUN ["3G"] 7RUN ["i"] 8RUN ["<!--"] 9RUN [":wq"] 10 11RUN ["vim", "hoge.xml"] 12RUN ["6G"] 13RUN ["i"] 14RUN ["-->"] 15RUN [":wq"]

試したこと

上記のようなイメージで自動化できる方法を模索し、
こちらを実行したところ、3Gというコマンドはないので当然エラーになってしまいます。

最後に

Dockerに初めて触れており、Dockerfileの記述方法など、よろしくないものもあるかと思われますが、
ご指導ご鞭撻のほどよろしくお願いします。

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

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

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

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

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

melian

2023/01/17 12:33 編集

ed コマンドを使ってみてはどうでしょうか。(Dockerfile の RUN 命令の書き方がよく分かっていないのでエラーになるかもしれません) RUN printf '%s\n' 3i '<!--' . 5i '-->' . w | ed -s hoge.xml
guest

回答1

0

ベストアンサー

自動化するなら、vimじゃなくてsedかexで。
ちょっと追記文字列が入るカラムが違うけど(カラムをvimと同じにすることも出来ますが長くなる)、

sh

1sed -i '3s/^/<!--/' hoge.xml 2sed -i '6s/^/-->/' hoge.xml

同じファイルを連続して編集するのに2回に分ける意味は何でしょうか?実際には連続してない?
連続なら、普通はまとめます。

sh

1sed -i '3s/^/<!--/;6s/^/-->/' hoge.xml

sedやexコマンドを理解する気が無い場合は、

Bash

1printf '3Gi<!--\e:wq\n' | vim hoge.xml

とかでも多分可能です。

投稿2023/01/17 17:48

otn

総合スコア84557

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

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

unity3dbigginer

2023/01/18 04:18

otnさん コメント頂きありがとうございます。 せっかくの機会なので、sedコマンドに触れてみようと思います。 試しにこちらを打ってみたのですが、 指定されたファイルが見つかりませんと言われています。 カレントディレクトリは、もちろん、指定ファイルのディレクトリです。 念のため、ファイル名に相対パス「./」も追加しましたが、同様の結果となってしまいました。 ファイルの指定方法が間違っているのでしょうか。 lsコマンドでディレクトリの中を参照すると、hoge.xmlは認識されています。
otn

2023/01/18 04:50

詳細が不明なので、なんとも言えません。 実際に打ったコマンドラインと、表示されたエラーメッセージを書きましょう。 聞き返す二度手間が必要ないように、やったことと結果はちゃんと書くようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問