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

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

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

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

1回答

1391閲覧

Automatorでgsedを使用すると、エラーになる

1206ponny

総合スコア0

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2021/10/15 13:10

編集2021/10/15 14:12

前提・実現したいこと

Automatorで/private/etc/hostsファイルに、11.111.111.111 fuga.comを入力したいです。
まず、ターミナルでgsedをインストールしました。

$ brew install gnu-sed

そして、以下のコードを入力すると、hostsファイルの8行目に11.111.111.111 fuga.comが挿入できることを確認しました。

$ sudo gsed -i -e '8i11.111.111.111\ fuga.com' /private/etc/hosts

Automatorで実行する場合、sudoを使用しているので、パスワードが要求されます。
そのため、Automatorでの実行コードは以下のコードになると考えました。

osascript -e 'do shell script "sudo [コード]" with administrator privileges'

Automatorのアプリで実行する→ユーティリティ→シェルスクリプトを実行するを選択(シェルは/bin/zsh)
しかし、Automatorで以下のコードで実行すると、パスワードが要求され、入力後、エラーが出てしまいます。

osascript -e 'do shell script "sudo gsed -i -e '8i11.111.111.111\ fuga.com' /private/etc/hosts" with administrator privileges'

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

execution error: sudo: gsed: command not found (1)”

gsedはターミナルではインストールできていますので、なぜできないか理由がわかりませんでした。

###試したこと

Automatorでシェルスクリプトを使えるシェルスクリプトを実行アクションの実行環境はターミナルの環境依存を継承しないと知り、パスを通してみましたが、エラーでした。
場所を確認

$ which gsed /usr/local/bin/gsed

Automatorで実行

export PATH=$PATH:/usr/local/bin osascript -e 'do shell script "sudo gsed -i -e '8i11.111.111.111\ fuga.com' /private/etc/hosts" with administrator privileges'

エラー内容
0:108: execution error: gsed: can't read fuga.com: No such file or directory (2)

以下のコードだとうまく実行されました。ただipアドレスとドメインの間に空白がほしいです。

export PATH=$PATH:/usr/local/bin osascript -e 'do shell script "sudo gsed -i -e \"8i11.111.111.111fuga.com\" /private/etc/hosts" with administrator privileges'

これだとエラーになります。

export PATH=$PATH:/usr/local/bin osascript -e 'do shell script "sudo gsed -i -e \"8i11.111.111.111\ fuga.com\" /private/etc/hosts" with administrator privileges'

“52:53: syntax error: """があるべきところですがunknown tokenが見つかりました。 (-2741)”

###参考記事
https://it-ojisan.tokyo/mac-linux-sed/

補足情報(FW/ツールのバージョンなど)

mac:Bigsur:11.6 version

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

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

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

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

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

guest

回答1

0

sudoだとPATHが設定し直されます(設定次第ですが)ので、gsedをフルパスで指定しましょう。

投稿2021/10/15 13:57

otn

総合スコア84702

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

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

1206ponny

2021/10/15 14:16 編集

回答ありがとうございます。 ``` export PATH=$PATH:/usr/local/bin/gsed osascript -e 'do shell script "sudo gsed -i -e \"8i11.111.111.111\ fuga.com\" /private/etc/hosts" with administrator privileges' ``` で実行すると、以下のエラーが出ました。 “52:53: syntax error: """があるべきところですがunknown tokenが見つかりました。 (-2741)” ダブルクオーテーションは、エスケープしているはずなのですが。。
otn

2021/10/15 14:47 編集

上記コメントは、追記部分の最後と同じですよね? ちょっと同じ環境がないので、試せないです。 似てるかと思って、 bash -c 'bash -c "sudo sed -i -e \"8i11.111.111.111 fuga.com\" filename"' をやってみましたが、これだと問題ないですね。 安易に回避するなら、8i11.111.111.111 fuga.com を別ファイルにして、gsed -f で指定する。
1206ponny

2021/10/16 01:11

ターミナルだと、 bash -c 'bash -c "sudo sed -i -e \"8i11.111.111.111 fuga.com\" filename"' でいけました。 ただ、Automatorで実行すると、エラーになりました。。 “sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper sudo: a password is required” sudoだとPATHが設定し直されることがあるのは、知りませんでした。 アドバイスありがとうございます!! アドバイスを元に試行錯誤してみます。
otn

2021/10/16 12:11

引用符のネストは、考えるのからしてめんどくさいので、 原因究明優先で無く、目的達成優先なら、前回の最後に書いた、 > 8i11.111.111.111 fuga.com を別ファイルにして、gsed -f で指定する。 がよいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問