不使用-i
选项时,我无法在命令参数中使用通配符。可能是什么原因?
-i
选项的结果如下:
命令 - sudo -i -u \#800 ls -l /LOG/filename.*
结果 - filename.dat
没有-i
选项的结果如下:
命令 - sudo -u \#800 ls -l /LOG/filename.*
结果 - filename.* not found
答案 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的顶部以查看它正在执行的操作。在这种情况下,这是不需要的。