使用するとき
df -h | grep /dev/root | awk '{print $5}'
PiでSDカード使用量を取得しました。78%
しかし、私が使うとき
/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print $5}'"
別のコンピュータから以下を取得します。
/dev/root 7.2G 5.3G 1.6G 78% /
いっぱいdf -h
:
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 5.3G 1.6G 78% /
devtmpfs 364M 0 364M 0% /dev
tmpfs 368M 68K 368M 1% /dev/shm
tmpfs 368M 5.2M 363M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 368M 0 368M 0% /sys/fs/cgroup
/dev/mmcblk0p1 60M 21M 40M 35% /boot
tmpfs 74M 4.0K 74M 1% /run/user/1000
答え1
引用の問題があります。$5
間違った時間に解釈されています。少なくとも2つの解決策があります:
\
例えば$
;/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print \$5}'"
リモートで実行します
df
が、grep
ローカルで実行しますawk
。例えば/usr/bin/ssh -i /path/to/key user@server df -h | grep /dev/root | awk '{print $5}'
FWIW、2番目のオプションのバージョンを実行しますが、マージしgrep
てawk
/usr/bin/ssh -i /path/to/key user@server df -h | awk '/\/dev\/root/ {print $5}'
答え2
これは働きます:
/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print \$5}'"
\
以前のインクルードに注意してください$
。これがない場合、ローカルシェルは空の変数を拡張してリモート$5
サーバーに送信します。デフォルトでは、行全体を印刷します。
答え3
$n
完全性のための別のアプローチは、inがシェルなどの構文の特別なケースではなく、整数式に適用されるawk
演算子であるという事実を使用することです。$variable
$
(ssh key&remote) "df -h | grep /dev/root | awk '{print $ 5}'"
または、
(ssh key&remote) "df -h | awk '/\\/dev\\/root/ {print $ 5}'"
# can use [/] instead of ugly \\/ in gawk, but maybe not others
あるいは、変数として良いかもしれません。
(ssh key&remote) "df -h | awk -vm=/dev/root '$ 0 ~ m {print $ 5}'"
しかし、個人的には、私は地元で活動することを好むStephen Harrisのコメントに同意しますawk
。