不要な質問でしたら申し訳ありませんが、インターネット上であちこちで検索してみましたが、残念ながら私との関係では順序がかなり複雑です。
root権限でコマンドを実行できるように、sudoコマンドにパスワードを接続しようとしています。
echo 'PASSWORD' | sudo -S [...]
これは私にとって効果的です。
ただし、独自のパイプを含むコマンドに対するroot権限が必要な場合は問題が発生します。
echo 'PASSWORD' | sudo -S printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat /dev/sd* -
したがって、サブシェルコマンドを試してみました。
echo 'PASSWORD' | sudo -S bash -c 'printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat /dev/sd* -'
残念ながら、引用符はprintfコマンドの引用符と競合するため、使用できません。
この問題を解決するために、いくつかの括弧を使ってみました。これはうまくいきます:
echo 'PASSWORD' | sudo -S bash -c '(printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat /dev/sd* -)'
ただし、以前に生成された変数を使用するには、その変数をエクスポートするのが困難になります。
export storage="/dev/sda"
echo 'PASSWORD' | sudo -S bash -c '(printf '%s' "OTHER_PASSWORD" | cryptsetup --batch-mode --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 luksFormat $storage -)'
ERROR: Device - doesn't exist or access denied.
この問題を解決する簡単な方法はありますか?
ベストアンサー1
変数は一重引用符で拡張されません。
sudo -S bash -c '(printf '%s' "OTHER_PASSWORD" | ... luksFormat $storage -)'
~~~~~~~~
二重引用符は、%s
実際には文字列が引用されていないことを意味します(ここで強調表示された構文に表示されます)。しかし、幸いにも%s
特別な意味がないので、これは重要ではありません。