listen = 127.0.0.1:9000
私はに交換したいlisten = '/var/run/php56-fpm.sock'
sudo sed -i 's/listen = 127.0.0.1:9000/listen = \'/var/run/php56-fpm.sock\'/g' /etc/php-fpm.d/www.conf
間違い:
bash: -c: line 63: unexpected EOF while looking for matching `''
bash: -c: line 64: syntax error: unexpected end of file
答え1
まず、A single quote may not occur between single quotes, even when preceded by a backslash.
参考資料バッシュマニュアル
第二に、文字列の区切り文字を /
置き換える代わりに、他の文字を区切り文字として使用することもできます。/
結果:
sudo sed "s#listen = 127.0.0.1:9000#listen = '/var/run/php56-fpm.sock'#g" /etc/php-fpm.d/www.conf
まだ使用されていません-i
。印刷物を確認して、期待どおりに機能していることを確認してください。
答え2
区別のために/代わりに別の文字を使用してみてください。
sudo sed -i "s@listen = 127.0.0.1:9000@listen = '/var/run/php56-fpm.sock'@g" /etc/php-fpm.d/www.conf
または
sudo sed -i "s/listen = 127.0.0.1:9000/listen = '\/var\/run\/php56-fpm.sock'/g" /etc/php-fpm.d/www.conf
問題は、/
asをエスケープせずに\/
@を区切り文字として使用すると問題が解決されることです。一貫性がある限り、sedではどの区切り文字でも使用できます。
@Davidの説明は正しいです。 bashのマニュアルに従って、二重引用符を使用してください。
ヒント:すべてのUXファイルの最後の空行にはEOFが必要です。