【解決】【更新】共用サーバ上にあるWordPressをローカルからwp-cliで操作する

wp-cli便利過ぎでサイコーです!!
しかも、エイリアスって機能が更にありがたい 😀

WP-CLI 0.24 でリモートサーバーに対してコマンドを実行できるようになりましたよ! | Firegoby

大変便利に日頃のメンテナンスで活躍してもらっているんですが、共用サーバではどうしても使えない(僕に限りかもですが…)でいます。

できるようになりました

bashの対話モード・非対話モード

bash が対話的なログインシェルとして起動されるか、 –login オプション付きの非対話的シェルとして起動されると、/etc/profile ファイルが存在すれば、 bash はまずここからコマンドを読み込んで実行します。 このファイルを読んだ後、 bashは ~/.bash_profile~/.bash_login~/.profile をこの 順番で探します。 bash は、この中で最初に見つかり、かつ読み込みが可能であるファイルから コマンドを読み込んで実行します。 –noprofile オプションを使ってシェルを起動すれば、 この動作を行わないようにできます。

ログインシェルが終了するときには、 ~/.bash_logout ファイルがあれば、 bash はこれを読み込んで実行します。

ログインシェルでない対話的シェルとして起動されると、 ~/.bashrc ファイルがあれば、 bash はここからコマンドを読み込み、実行します。 この動作は –norc オプションで行わないようにできます。 –rcfilefile オプションを使うと、 コマンドの読み込みと実行を ~/.bashrc からでなく file から行わせることができます。

(例えばシェルスクリプトを実行するために) 非対話的に起動されると、 bash は環境変数 BASH_ENV を調べ、この変数が定義されていればその値を展開し、 得られた値をファイル名とみなして、 そこからコマンドの読み込みと実行を行います。 つまり bashは以下のコマンドが実行されたのと同じように動作します:

if [ -n “$BASH_ENV” ]; then . “$BASH_ENV”; fi

ただし、ファイル名を探すために PATH 環境変数の値が使われることはありません。

Man page of BASH

非対話モードの場合、PATHの環境変数の値が使われないということは、~/に作成してPATHを通してあるものに関しては、読み込まれないようで、これが、ssh経由でwpを実行した場合、PATHは、今回の場合、~/に作成してあるため、読み込まれない用です。

試してみる

sshでログイン後、echo $PATHしてみる。
結果 : /path/to/user/home/usr/local/binが含まれる

ssh -t ‘echo $PATH’してみた場合
結果 : /bin:/usr/bin:/usr/local/bin:/usr/sbin/ のみで~/に通したPATHは無い。

ということで、ssh -t ‘source ~/.bash_profile && echo $PATH’してみる
結果 : /path/to/user/home/usr/local/binが含まれた!!(通したPATHを読み込んだ)

ということで、ローカルからコマンドを実行する場合、

[code]
ssh -t 'source ~/.bash_profile && command'
[/code]

としてやれば、OK。今回の場合、wpコマンドだから

[code]
ssh -t 'source ~/.bash_profile && wp'
[/code]

に続けて普通にwpコマンド行ける 😀

ただし、ユーザーディレクトリに.bash_profileがあって、その中でwpコマンドへのPATHを通してあることが前提。

[code]
export PATH=$PATH:~/usr/local/bin
[/code]

※ 今回は、~/に、usr/local/binを作ったから、↑↑のようになってるだけ。

ってことで、ここから下の部分は不要になった 😀

共用サーバの場合、/usr/local/binへのアクセス権がないからなのか、”wp: command not found”になってしまいます。まぁ当然なんですが…😅
~/bin/wp に置いてサーバへログインして作業していたのですが、やっぱりローカルからサクッとやりたい。。

【更新】wp-cliの–sshオプションでローカルからまるっと操作する

共用サーバにあるWordPressは今までsshでログインしてから作業してました。

とりあえずシェルスクリプトで作った

marushu/maintenance: Maintain WordPress on shared server from local machine.

 

 


[code]
#!/usr/bin/env bash

if [ "${3}" = "" ]; then
  ssh nickname -t "path/to/wordpress && path/to/wp '${1}' '${2}'"
else
  ssh nickname -t "path/to/wordpress && path/to/wp '${1}' '${2}' '${3}'"
fi
[/code]

これをnickname.shで保存。エイリアスを作って、


[code]
alias plugin list --update=available
[/code]

とかやると、ローカルから操作できる 😀
wp-cliのエイリアスっぽいイメージ。

やることは限られるけど、普段のメンテナンス用途であれば全く問題ない 😀
できればwp-cliのエイリアスでやりたいんだけど…😅