私はこの問題を数日間処理してきました。 $1 ユーザーに対して環境変数 $2 が存在することを確認する必要があります。
私はいくつかのケースを試しました。
$ [[ -v a ]] && echo "a ok" || echo "a no"
a no
$ [[ -v $HOME ]] && echo "a ok" || echo "a no"
a no
(だからいいえ(Bash> 4.2を試しました))
if [ su - ${1} -c "[ -z "${2}" ]" ]
今問題が見えないので、このアプローチを試しています:/!
su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
su - root -c "echo "$HOME" | wc | sed 's/ //g'"
答え1
最初の例の構文が正しくありません。あなたが書いている場合:
[[ -v $HOME ]]
その後、実際に次のコマンドを実行します。
[[ -v /home/yourusername ]]
もちろんこれは失敗するでしょう。あなたが望むもの:
[[ -v HOME ]] && echo ok || echo no
これを次のように組み合わせることができますsu
。
su - root -c "[[ -v HOME ]]" && echo ok || echo no
引用符を入れ子にできず、コマンドが実行される前にシェル変数拡張が発生するため、最後の例は機能しません。つまり、次のように与えられます。
su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
実際に実行するコマンドは次のとおりです。
su - root -c 'echo /home/somesuser | ...'
$HOME
観点から値を取得するには、root
一重引用符などを使用してローカルシェルで変数の拡張を防ぐ必要があります。
su - root -c 'echo $HOME | ...'
wc
単語数が$HOME
ほとんど常にあるため、出力をに渡す理由は不明です1
。または、以下をwc
使用して出力を後処理することなく、そのオプションを使用して単語数を取得できます。sed
cut
-w
su - root -c 'echo $HOME | wc -w'