sudo参数中的通配符搜索不起作用

时间:2014-09-30 21:40:06

标签: wildcard sudo aix

不使用-i选项时,我无法在命令参数中使用通配符。可能是什么原因?

-i选项的结果如下:
命令 - sudo -i -u \#800 ls -l /LOG/filename.*
结果 - filename.dat

没有-i选项的结果如下:
命令 - sudo -u \#800 ls -l /LOG/filename.*
结果 - filename.* not found

1 个答案:

答案 0 :(得分:1)

您的结果与您的命令不符,因此我并不真正信任您在问题中写入的结果。特别是/ LOG /没有结果。

e.g。

sudo -i ls -ld /var/folx*
ls: /var/folx*: No such file or directory

我不知道您使用的是哪个sudo,因为AIX没有带sudo命令。但是我正在使用Mac上的手册页。

   -i [command]
               The -i (simulate initial login) option runs the shell
               specified in the passwd(5) entry of the target user as a
               login shell.  This means that login-specific resource files
               such as .profile or .login will be read by the shell.  If a
               command is specified, it is passed to the shell for
               execution.  Otherwise, an interactive shell is executed.
               sudo attempts to change to that user's home directory
               before running the shell.  It also initializes the
               environment, leaving DISPLAY and TERM unchanged, setting
               HOME, MAIL, SHELL, USER, LOGNAME, and PATH, as well as the
               contents of /etc/environment on Linux and AIX systems.  All
               other environment variables are removed.

注意短语"更改为该用户的主目录"。即使给出了命令,它似乎也可以将cd送回家。

sudo pwd
/private/tmp

sudo -i pwd
/private/var/root

以下是一些尝试自行调试此类情况的方法。首先是用env替换你的命令,并将输出捕获到两个单独的文件中,然后进行比较。看看是否有任何差异可能是问题的根源。其次,pwd和我一样,你发现当前的工作目录在sudo上下文中正在发生变化。在这种情况下不适用但在其他情况下不适用的第三个项目是echo *作为命令。在这种情况下,它会给你一个线索,但可能仍然可能真的令人困惑。

另一部分是注意到-i正在吸收.profile和.login。许多用户通过假设各种事情来搞砸他们的.profile和.login文件。因此,您可能需要执行的其他项目有时会将set -x放在.profile的顶部以查看它正在执行的操作。在这种情况下,这是不需要的。