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

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

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

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

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

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

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

解決済

1回答

3503閲覧

bashでvim編集を自動化させる方法

Yoshitsugu12

総合スコア15

bash

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

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

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

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

3クリップ

投稿2021/01/22 14:39

以下のようにvim編集をbashファイルのプログラムだけで完全自動実行させることは可能でしょうか。


■具体的に求めている動き
0. vimを起動(sudo vim {ファイル名})
0. 特定の文字を検索し、その文字のある行へ移動(/{特定の文字})
0. 行の文頭に「#」を挿入(i → #)
0. 保存して終了。(ESC → :wq!)


sedコマンドなど他に編集する方法があるのは承知しておりますが、内部の動きとして一時ファイルを作成しているため利用することがためらわれる状態です。
加えて、実際に仕事で運用しているサーバーで利用するため、外部からライブラリ(?)のようなものは気軽にインストールできない状況です。

ご教授のほど、よろしくお願いいたします。

利用環境:
CentOS 6.6

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

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

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

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

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

KojiDoi

2021/01/22 15:05

> 内部の動きとして一時ファイルを作成しているため利用することがためらわれる状態です。 ちょっと何言ってるのかわからない… やろうとしていることを素直に解釈すると、本来キーボードから手で打ち込むべき文字をリダイレクトして、というような話になりますが、ならばシェルスクリプトと本質的に変わりません。どう考えてもsedで処理すべき内容にみえます。
Yoshitsugu12

2021/01/22 15:18

下記の知恵袋のベストアンサーの方の内容をみて、 > 内部の動きとして一時ファイルを作成しているため利用することがためらわれる状態です。 との発言をした次第です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12107981842 このベストアンサーの方は >sed -i は一時ファイルを作成して処理結果を出力後、元ファイルを上書き(内部的には削除してリネーム)します。 とおっしゃっていたので、 上記のコメントから、sedはvim編集とは本質的に異なるものだと思ってしまっておりました。 いかがでしょうか。 このような理由からの発言だったのですが、vim編集の上書きもsedの上書きと全く同じものであるという認識でよろしいでしょうか。 ※もちろんこのベストアンサーの方が間違っている可能性もないわけではありませんが
KojiDoi

2021/01/22 15:25

同じ名前のファイルが同時に二つは存在できないので、「書き換え後の内容」をもつファイルをいったん別名で作っておき、完成後に古いファイルを消し、別名を元々の名前に付け替える。これが「一時ファイル」の実態です。これが問題になるシチュエーションというのをなかなか思いつきませんが、明らかにややこしいエディタの自動運転などということを試みてまで回避しなければならない事情があるのでしょうか。
Yoshitsugu12

2021/01/22 15:52 編集

私がbashを動かそうとしているサーバーはメールサーバーでして、編集しようとしているのはメールの転送などに関わるaliasesというファイルです。 私はまだlinux・メールサーバーなどに対する知識が浅く、手順書に従ってプログラムを組み立てている状態になります。 そのため、転送設定が書かれたファイルを一瞬とはいえ削除された状態にしてよいのか判断がつかないのです。 結果、今は無難に手順書のvimコマンドをそのまま実行しておけばよい、という思考に至り、このような質問をさせていただいた次第になります。
guest

回答1

0

ベストアンサー

編集しようとしているのはメールの転送などに関わるaliasesというファイルです。
そのため、転送設定が書かれたファイルを一瞬とはいえ削除された状態にしてよいのか判断がつかないのです。

/etc/aliasesは、ソースファイルで、実際にPostfix等のMTAから参照されるファイルは、/etc/aliases.dbあるいは/etc/aliases.pagなどのファイルです。
なので、/etc/aliasesを削除してもメール配送には何の影響もありません。
別の言い方をすると、/etc/aliasesを編集しても、その時点ではメール配送には何の影響もありません。

newaliasesコマンドを実行すると、/etc/aliasesの内容から/etc/aliases.db等実際に参照されるファイルが再作成されます。これで初めてメール配送に影響が出ます(newaliases実行時点の/etc/aliasesに書いてあった情報に基づいて処理されるようになる)。

newaliasesコマンドは、おそらくPostfix等MTAと連携して排他制御を行い、書き換え途中の/etc/aliases.dbがMTAから参照されないような仕組みになっていると思います。

なので、安心してsed -i ~~ /etc/aliasesしてください。newaliasesの実行を忘れずに。

投稿2021/01/22 16:19

otn

総合スコア85901

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

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

otn

2021/01/22 16:26

なお、sed -i の動作ですが、sed の実装次第でしょう。 手元のLinuxだと、新規ファイル作成して書き込み→新規ファイルを元ファイル名にリネーム(リネームが成功すれば元ファイルは消える) となり、別のファイル実体(別のi-node)になります。
otn

2021/01/22 16:46 編集

元の質問に文字通り答えると、今回は簡単な編集なので、 1. vim を起動 2. :g/検索文字/s/^/#/ 3. :wq でできるので、これをバッチ的にやるには、vi の別名(シンボリックリンク)の ex を使って、 echo $'g/検索文字/s/^/#/\nwq' | ex ファイル名
Yoshitsugu12

2021/01/23 04:26

やはり、vimでもバッチを用いた操作できたんですね! これも使う機会があると思います。 本当にありがとうございます。 そして、なによりaliasesの説明とても丁寧ですわかりやいです。 教えていただいたおかげで先程無事プログラムが完成しました。 感謝しかあまりせん。 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問