evalステートメントでsedを試してみますか? [コピー]

evalステートメントでsedを試してみますか? [コピー]

evalステートメントでsedを試してみますか?

#!/bin/bash
declare COMMAND="sudo sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config"
theResponse=$(${COMMAND} 2>&1)
echo "${theResponse}"

上記のスクリプトで次のエラーが発生する理由がわからないようです。

sed: -e 式 #1、文字 1: 不明なコマンド: ""

sed コマンドはシェルを介して正しく機能します。

答え1

変数はコマンドの保存には適していません。これには機能を使用してください(必要な場合)。スクリプトをより慣用的に記述する方法は次のとおりです。

#!/bin/bash
fixSshd() {
    sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
}

fixSshd

rootユーザーがスクリプトを実行している場合は削除しますsudo

コマンドのエラー出力をキャプチャするには、最後を次に置き換えます。

response=$(fixSshd 2>&1)
echo "Response is: $response"

関連情報