![evalステートメントでsedを試してみますか? [コピー]](https://linux33.com/image/14894/eval%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88%E3%81%A7sed%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
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"