如果在Bash,我该怎么做?

Dan*_*n S 9 bash shell sudo

我需要检查另一个用户的主目录中的目录.通常情况下,我会sudo,但这会产生另一个过程,我也会失去我的环境.

例如,我有:

if [[ -d "/home/otheruser/svn" ]];
then
   echo "SVN exists"
else
   echo "SVN does not exist"
fi
Run Code Online (Sandbox Code Playgroud)

我需要测试条件以root权限运行.

pau*_*kow 33

if sudo test -d "/home/otheruser/svn"; then
Run Code Online (Sandbox Code Playgroud)

  • +1 - 保证`/ bin/test`的罕见用法之一. (2认同)
  • 到目前为止更好的答案,因为不存在双重评估的风险:如果有人尝试参数化另一个答案但做得不好(即`sudo bash -c“[[ -d $filename ]]”`),您可能会拥有恶意文件名作为命令执行(考虑 `filename='foo ]] || rm -rf $HOME || [[ true'`)。相比之下,这个答案是完全安全的:“if sudo test -d“$filename””不会运行除“test”之外的任何命令。 (2认同)

the*_*aul 7

您需要在子shell下运行它.例:

if sudo bash -c '[[ -d "/home/otheruser/svn" ]]'
then
  echo "SVN exists"
else
  echo "SVN does not exist"
fi
Run Code Online (Sandbox Code Playgroud)