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

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

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

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

Q&A

解決済

1回答

3800閲覧

Bashシェルスクリプトのパイプ「|」や「$$」で sudo -Sのsudoパスワードとは別のsudoの後ろで利用する別のコマンド用の標準出力・標準入力を渡したい

JunShiozawa

総合スコア1

シェルスクリプト

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

0グッド

0クリップ

投稿2021/08/30 03:34

前提・実現したいこと

VSCodium - Open Source Binaries of VSCode

上記Webサイトの
Debian / Ubuntu (deb package):
の部分の記述
を参考に

Ubuntu Linux 20.04.2.0 LTS上のBashシェルスクリプトで
codiumを自動インストールするBashシェルスクリプトを作成したいと考えております。

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

sudoのパスワードをechoで標準出力としてパイプ「|」や「$$」で sudo -Sで 標準入力に渡すのとは 別に 下記Bashシェルスクリプトの dd tee apt-get install のコマンドに sudoのパスワードとは 別の 標準入力 つまり wget gpg echo コマンドの標準出力 を パイプ「|」や「$$」で 渡さないと codiumを自動インストールがうまく行かないようなのですが sudo -S でパイプ「|」や「$$」がふさがれてしまい dd tee apt-get install のコマンドに sudoのパスワードとは 別の 標準入力 つまり wget gpg echo コマンドの標準出力 を パイプ「|」や「$$」で 渡すことが 現在の僕のシェルスクリプトの知識では できません。

該当のソースコード

BashShellScript

1#!/bin/bash 2 3read -sp "sudo Passsword: " mypass 4 5wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/vscodium.gpg 6 7echo 'deb https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list 8 9echo "$mypass" | sudo -S apt-get update && sudo apt-get install codium

試したこと

cat
コマンド

EOF
などと組み合わせて試行錯誤しましたが
現在の僕のシェルスクリプトの知識では
記法が分かりませんでした。

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

Ubuntu Linux 20.04.2.0 LTS上のBashシェルスクリプト

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

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

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

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

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

otn

2021/08/30 09:13

コードブロック内の、日本語がぐちゃぐちゃなので、書き直しましょう。
JunShiozawa

2021/08/31 07:37

この日本語で意味がわからない人は このシェルスクリプトについて 回答可能な専門知識をお持ちではない方なので この日本語でよいのです。 Linuxのシェルスクリプトのご経験が豊富な 達人さんは この日本語で質問の意図が理解可能だと思います。 そのような達人さんに ご指導いただければ と思います。 よろしくお願いいたします。
otn

2021/08/31 07:53

まだ読んでませんので、意味がわかるかどうか以前(投稿のの仕方)の問題でした。
JunShiozawa

2021/09/01 07:18

あえて1行の日本語で説明するならば 「sudoのパスワード入力が1回だけで済むwgetコマンドを使用したcodiumを自動インストールするUbuntu Linux OS用のBashシェルスクリプト(拡張子は.sh)を作成したい」 ということです。 otnさま、あなたはご回答可能な知識をお持ちですか?
guest

回答1

0

ベストアンサー

取り敢えず日本語部分はまるっと飛ばして sudo -S COMMAND で、sudo の標準入力はパスワード供給元に、COMMAND の標準入力はデータ供給元にそれぞれ接続して…という話なら、
sudo -S sh -c 'COMMAND < データ供給元' で済むのですが。
ただ、パイプが絡むならもうちょっと複雑で、おそらくデフォルトの設定では無理です。
※パイプ使わなきゃ良いだけ、とも言えますが。

とは言え、それ以前の問題として、それ必要ありますか? というのは考えた方が良いと思います。
なぜなら、sudo は一度パスワード通すと、その情報をしばらくキャッシュしてパスワード不要になるからです。

最初にパスワードを自分で read する必要すらなくて、

sudo true || exit 1 # パスワード入力失敗したら打ち切り sudo COMMAND1 # 特権が要るコマンドは sudo で。一度 sudo 通っているのでパスワード入力不要 COMMAND2 # 特権が要らないコマンドはそのまま …

で済むと思います。

投稿2021/08/31 10:32

angel_p_57

総合スコア1672

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

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

JunShiozawa

2021/09/01 07:32

angel_p_57さま ご回答ありがとうございます。 まさに僕が求めていたご回答です。 > sudo は一度パスワード通すと、その情報をしばらくキャッシュしてパスワード不要になるからです。 確かにシェルスクリプトではないコマンドラインのときも 1度sudoのパスワードを入力すると 数分間はsudoのパスワードが入力不要になりますよね。 コマンドラインではなくシェルスクリプトでも 同じアプローチが取れるのですね。 僕の手元のUbuntu Linuxでも angel_p_57さまのご指導をもとに シェルスクリプトの作成を試してみますね。 angel_p_57さま 本当にありがとうございます。 angel_p_57さま これからもよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問