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 環境変数の値が使われることはありません。
非対話モードの場合、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のエイリアスでやりたいんだけど…😅