我有一个switcher有不同用例的用户。这PATH应该取决于当前 shell 是否受到限制。因此我在末尾添加了/home/switcher/.bashrc:
[[ $- == *r* ]] && PATH='' && echo 'restricted' || echo 'unrestricted'
Run Code Online (Sandbox Code Playgroud)
但切换用户时却无法按预期工作:
root@host:~$ sudo -u switcher rbash
unrestricted
switcher@host:~$ echo $PATH
/home/switcher/bin:/usr/local/bin:/usr/bin:/bin
switcher@host:~$ echo $- $SHELL
himrBHs /usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
这告诉我,这.bashrc实际上是被处决的,但显然是在外面rbash。我在这里缺少什么?我需要更改什么以便PATH=''在执行时设置rbash而不是在中设置bash?
请注意,不幸的是,对于不同的用例使用不同的用户对我来说不是一个选择。
当我使用 Get-ChildItem cmdlet 时,我发现了一种奇怪的行为
文件夹结构:
d:\test\fooA\foo\1-9.txt files
d:\test\fooB\foo\1-9.txt files
d:\test\fooC\foo\1-9.txt files
d:\test\fooD\foo\1-9.txt directories
Run Code Online (Sandbox Code Playgroud)
当我使用以下语法时,我将从所有递归文件夹中获取所有 1-9.txt 文件和目录。它按预期工作。
Get-ChildItem -Filter *.txt -Path D:\test\*\foo -Recurse
Run Code Online (Sandbox Code Playgroud)
当我添加参数 -Directories 时,我仅从示例中的最后一个文件夹中获取目录。它也按预期工作。
Get-ChildItem -Directory -Filter *.txt -Path D:\test\*\foo -Recurse
Run Code Online (Sandbox Code Playgroud)
当我添加参数 -File 而不是 -Directories 时,我什么也得不到。我预计我只会得到文件。
Get-ChildItem -File -Filter *.txt -Path D:\test\*\foo -Recurse
Run Code Online (Sandbox Code Playgroud)
当我使用参数 -File 和 -Directory 时,我也什么也得不到。
Get-ChildItem -Directory -File -Filter *.txt -Path D:\test\*\foo -Recurse
Run Code Online (Sandbox Code Playgroud)
我在不同的 Windows 系统上测试了 PowerShell 版本 5.1 和 7。从我的角度来看,它看起来更像是错误,而不是代码中的问题,或者我对这个 cmdlet 用法的理解,有人可以仔细检查和评论吗?我可以通过额外的编码来解决我的问题,但我不明白为什么它适用于文件夹而不适用于文件。
非常感谢您的任何评论。
我最近安装了最新的 Qt SDK,然后我继续将它添加到我的 ~/.bash_profile 中的 PATH 中。
我没有看到变化。我可以,source ~/.bash_profile但是我的路径是两倍长,但我不能简单地打开一个新的 gnome 终端并更新路径。
为什么?
注意:Fedora 11 在默认 gnome 桌面内运行 GNU bash,版本 4.0.16(1)-release。
.bash_profile 路径配置:
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/opt/qtsdk-2009.03/qt/bin/:/usr/local/lib/
Run Code Online (Sandbox Code Playgroud) 我从一家公司借了一台装有 Windows XP 的笔记本电脑,我将为其做一个项目。他们说我在计算机上几乎拥有管理员权限,以便我可以安装软件。
现在我已经安装了一些开发工具,但是我需要在PATH环境变量中添加一些东西。但我似乎没有权限编辑 PATH 环境变量。有什么办法可以解决这个问题吗?我可以创建一个个人环境变量 PATH 来代替吗?
我的系统上的行为真的很奇怪。我可以通过以下方式在我的系统上执行 xilperl.exe:
C:\Xilinx\10.1\ise\bin\nt>xilperl.exe
Run Code Online (Sandbox Code Playgroud)
为了使事情更容易,我不想添加执行 xilperl 的整个路径,所以我将“nt”目录添加到 PATH 变量中。在这里可以看到PATH的内容:
echo %PATH%
C:\Xilinx\10.1\EDK\bin\nt;C:\Xilinx\10.1\EDK\lib\nt; C:\Xilinx\
10.1\ise\lib\nt; C:\Xilinx\10.1\ise\bin\nt
Run Code Online (Sandbox Code Playgroud)
所以你可以看到应该设置适当的目录,但是,当尝试执行 xilperl 时,它仍然无法识别:
C:\>xilperl
'xilperl' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
任何人都知道这里会出现什么问题,我看不出我错过了什么。
我刚刚安装了草莓 perl。
它的 bin 目录显示在路径中,但 Windows 拒绝运行它,除非我提供完整路径(我什至尝试重新启动以确保所有环境变量都正确)。
附注。
如果我以管理员身份启动 cmd,同样的问题。
我能做些什么来解决这个问题?

谁能解释一下?
$ vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Jul 12 2010 12:47:31)
$ `which vim` --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 13 2011 22:52:17)
Run Code Online (Sandbox Code Playgroud)
我刚刚编译了最新版本的vim并安装到了$HOME/bin,这是$PATH. which vim返回正确的路径:/home/user/bin/vim但是,当我执行vim它时启动/usr/bin/vim.
我启动了另一个 xterm 并且问题已经消失了,但是我仍然很好奇上一个术语是如何进入如此奇怪的状态的。有任何想法吗?
我以为我明白这一点,但我得到了无法解释的行为。我有这些文件:
$ which -a kvm | xargs ls -l
lrwxrwxrwx 1 root root 18 2011-11-17 17:14 /usr/bin/kvm -> qemu-system-x86_64
lrwxrwxrwx 1 root root 18 2011-11-17 17:21 /usr/local/bin/kvm -> qemu-system-x86_64
$ which -a qemu-system-x86_64 | xargs ls -l
-rwxr-xr-x 1 root root 2535168 2011-10-04 02:44 /usr/bin/qemu-system-x86_64
-rwxr-xr-x 1 root root 3497304 2011-11-17 16:26 /usr/local/bin/qemu-system-x86_64
Run Code Online (Sandbox Code Playgroud)
它们是不同的版本:
$ /usr/bin/kvm --version
QEMU PC emulator version 0.12.3 (qemu-kvm-0.12.3), Copyright (c) 2003-2008 Fabrice Bellard
$ /usr/local/bin/kvm --version
QEMU emulator version 0.15.92 (qemu-kvm-devel), Copyright (c) 2003-2008 Fabrice …Run Code Online (Sandbox Code Playgroud) 我刚刚升级到 Lion 并且我是第一次使用 bash(我以前的经验是使用 csh 和 tcsh)。我遇到了意想不到的行为。一个简单的例子是:
我创建了一个包含以下命令的文件:
echo PATH BEFORE is $PATH
PATH=/usr/local/fortran:$PATH
export PATH
echo PATH AFTER is $PATH
Run Code Online (Sandbox Code Playgroud)我打开一个终端(在 bash 中)并执行上面显示的文件。它呼应了预期的结果:
PATH BEFORE is /usr/bin: ...
PATH AFTER is /usr/local/fortran:/usr/bin ...
Run Code Online (Sandbox Code Playgroud)然后我输入:
echo $PATH
Run Code Online (Sandbox Code Playgroud)
并且/usr/local/fortran不是路径的一部分。我认为导出命令会使 PATH 变得粘滞。有人可以解释为什么这没有发生吗?
同事的%TEMP%环境变量具有以下值:
C:\Users\his.name\AppData\Local\Temp; C:\Program Files (x86)\MATLAB\MATLAB Compiler Runtime\v78\runtime\win32; C:\Program Files (x86)\MATLAB\MATLAB Compiler Runtime\v713\runtime\win32
Run Code Online (Sandbox Code Playgroud)
请注意它如何包含三个以分号分隔的路径,而人们通常希望它只包含一个路径(默认情况下,这三个路径中的第一个)。我们不知道这是怎么发生的。也许是 Matlab 安装程序……我们不知道。
现在,这给我带来了麻烦,因为我编写的并且整个公司都在使用的内部应用程序试图获取临时文件夹的路径,但由于 的值TEMP不是有效路径而感到困惑(因为我们可以看到它实际上是三个路径)。
问题是这样的:
TEMP并只保留第一个路径是否安全?path ×10
windows ×4
bash ×3
linux ×3
asterisk ×1
bashrc ×1
command-line ×1
fedora ×1
osx-lion ×1
permissions ×1
powershell ×1
windows-7 ×1
windows-xp ×1