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

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

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

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

Q&A

1回答

623閲覧

シェルスクリプトからのsedコマンド実施

macaroni323

総合スコア31

シェルスクリプト

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

0グッド

0クリップ

投稿2022/10/27 22:27

編集2022/10/28 13:47

前提

あるフォルダにREADME.mdファイルとadd.shファイルが存在しています。

実現したいこと

sh add.shを都度実行したときに、README.mdの4行目に新しい行を追加したいです。

発生している問題・エラーメッセージ

sed -i '4i 文字列' README.md

をzshのコマンドラインから実施した場合は、期待通りREADME.mdの4行目に行が追加されます。ただ、zshでsh add.shを実行すると、echoで内容は正しく表示されているものの、実際のREADME.mdは更新されていません。

該当のソースコード

add.sh

1#!/bin/bash 2command="sed -i '4i 文字列' README.md" 3echo $command 4eval $command

エラーメッセージ

sed: 1: "README.md": invalid command code R

試したこと

chmod 777 add.shとしてshに権限を与えてみても結果は同じでした。

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

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

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

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

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

NorioYamamoto

2022/10/27 22:37

> README.md とかしないと更新されないと思います。
macaroni323

2022/10/27 22:39

コメントありがとうございます。 command="sed -i '4i | []() | [Link] |' > README.md" と変更してみましたが、sh add.shを実施してもファイルが更新されませんでした
melian

2022/10/27 22:40

eval command は、 eval $command ではないでしょうか。
macaroni323

2022/10/27 22:43

確かにおっしゃる通りですね、失礼しました。 eval $commandに変更したのですが、 sed: 1: "README.md": invalid command code R と出てしまいました。
melian

2022/10/27 22:44

command="sed -i '4i 文字列' README.md" としていますよね?
macaroni323

2022/10/27 22:46

はい、そのように設定しています。(質問を編集しました)
melian

2022/10/27 22:53

手元の環境は GNU sed 4.8/zsh 5.8.1 ですが、4行目に文字列が挿入されます。
guest

回答1

0

command="gsed -i '4i 文字列' README.md"
に変更することで解決しました。ただ、.zshrcにalias sed='gsed'を設定しており、ターミナルからsedコマンドが実施できるので、理由がわからないです。。

投稿2022/10/27 22:52

macaroni323

総合スコア31

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

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

melian

2022/10/27 23:02

デフォルトの設定ではシェルスクリプト内での alias expansion は無効になります。bash であれば、 shopt -s expand_aliases source $HOME/.bashrc # ~/.bashrc に alias が書かれている場合 とすることで利用可能になります。
KojiDoi

2022/10/28 04:47

スクリプトからsedを実行しようとしたのなら、それはzshではなくshがした仕事なので.zshrcは関係ないのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問