我在 windows 下的 PATH 变量有一个奇怪的问题:
我的应用程序位于文件夹 c:\app\bin 中,此应用程序的 DLL 位于 c:\app\runtime 文件夹中。要运行我的程序,我通常使用以下脚本修改带有 *.bat 文件的 PATH 变量:
set PATH="c:\app\bin";"c:\app\runtime";%PATH%
Run Code Online (Sandbox Code Playgroud)
这会将可执行文件和 DLL 带到路径上。但是,在我的其中一个 Windows Server 2008 R2 系统上,这不起作用。这意味着,如果我在命令窗口中执行上述命令,我可以从 c:\app\bin 启动 exe 文件,但应用程序立即抱怨它找不到所需的某些 dll 文件(“程序无法启动,因为....dll 从您的计算机中丢失 ...")。这些 dll 文件应该在 c:\app\runtime 中。
我进行了一些实验,它指出有三种解决方法:
PATH="c:\app\bin";c:\app\runtime;%PATH% 关于解决方案 2 的奇怪部分是,如果我向第一个路径添加引号,或者如果我更改路径的顺序,它不会改变任何内容。
有人知道为什么我的原始脚本不起作用吗?我需要让它运行,因为它是由程序自动创建的,我无法更改生成 bat 文件的应用程序。
朋友们,
我在 Linux 上使用 GNU bash 作为我的 shell:
$ bash --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$
Run Code Online (Sandbox Code Playgroud)
当我设置一个以 FS 路径作为其值的环境变量时,它的行为非常奇怪。
假设我想将 /opt/database/bin 添加到 PATH 的前面。
我首先输入:
$ export PATH=/o
Run Code Online (Sandbox Code Playgroud)
然后我按下键盘上的 Tab 键。
但是它没有完成 /opt 的路径,而是删除了 PATH= 部分!相反,我得到:
$ export /opt/
Run Code Online (Sandbox Code Playgroud)
当然,那对我来说非常无用,而且非常恼人!然后我需要手动添加环境变量名称,这根本不是我想要做的!
我希望它完成它: …
在使用mklink网络共享路径而不是直接 UNC 路径(或与此相关的映射驱动器)时,是否需要考虑性能、权限或其他注意事项。
例如,这三种访问网络资源的方式是否可以被视为功能等效且大致可以互换?
mklink /d c:\shares\warehouse \\server1\warehouse
xcopy /s c:\shares\warehouse d:\temp\warehouse_copy
Run Code Online (Sandbox Code Playgroud)
.
xcopy /s \\server1\warehouse d:\temp\warehouse_copy
Run Code Online (Sandbox Code Playgroud)
.
net use X: \\server1\warehouse
xcopy /s X:\ d:\temp\warehouse_copy
Run Code Online (Sandbox Code Playgroud)
服务器是Windows 2003,客户端是Win7 Pro。网络主要是千兆位,尽管这里和那里很少有 100 兆位的落后者。我在示例中使用了 cmd shell,因为它最容易解释,实际上资源也可以通过各种其他方法访问(Windows 资源管理器、Office“打开”对话框、系统备份服务等)
当我尝试以普通用户身份(在 CentOS 5 上)运行 chkconfig 时,我意识到我无法访问它,因为目录 sbin 不在我的 $PATH 中。当我 su 到 root 时它仍然不起作用。我意识到 $PATH 变量与我切换的普通用户相同。
但是,当我开始以 root 身份登录时,$PATH 变量是 root 的正确变量,我可以运行该命令。
这应该以这种方式工作吗?如何让普通用户可以临时访问只能以 root 身份运行的命令?
谢谢
我通过 git 安装了 git apt-get,但发现版本已经过时了,所以我然后从 source 安装了 git。最终的结果相当令人费解:
$ git --version
git version 1.7.0.4
$ which git
/usr/local/bin/git
$ /usr/local/bin/git --version
git version 1.7.6
Run Code Online (Sandbox Code Playgroud)
这似乎which是在骗我……这似乎不太可能。这里实际发生了什么,我如何才能直接调用 git 来运行正确的版本?
我曾经知道一种运行我的 shell 脚本的方法,只要输入我的主文件夹或桌面中的名称即可。我讨厌打字./myscript.sh。我希望能够只输入myscript.sh. 我怎样才能修复我的终端来做到这一点?
我正在使用 GNOME 终端和 Ubuntu 9.04。
我正在尝试使用 SSH 远程运行命令,但我的问题是,当我这样做时,我的 .basrhc 没有被执行,所以 PATH 全错了,我的脚本被破坏了。
我正在做的是
ssh www.remotehost.com 'my_command'
我也试过这样的事情
ssh www.remotehost.com 'source ~/.bashrc; my_command' 和类似的变体,但似乎没有任何效果。
我正在尝试配置 Tomcat 以了解 JAVA_HOME 在哪里。我习惯了 Windows :) ...我应该编辑哪个文件来添加 Java 信息,它位于何处?
我有一个每天在 Linux 服务器上运行一次的 cron 作业,并且在它执行的脚本中有一个测试:
# Validate ffmpeg is installed
if [ $(which ffmpeg | grep -c "ffmpeg") -eq 0 ]; then
echo "error: ffmpeg is not installed!" | tee -a "$log"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
每天当我检查日志文件时,消息ffmpeg is not installed!都在日志中,因此工作尚未执行。如果我which在 shell 中运行测试一切正常,当我执行脚本时一切正常。
cron 是否有内在的东西阻止它正确使用which命令?
我注意到几乎每个网站都告诉你export PATH=/usr/local/share/python:$PATH在你的.bashrc或.bash_profile修改PATH.
当您想知道您的 PATH 是什么时,您可以echo $PATH,但是您会得到这种难以阅读的单行响应
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)
所以我发现你可以sudo vi /etc/paths不用担心在你的 bash 配置文件中添加任何东西。这是一个不好的方法吗?在我看来,这似乎更清晰、更容易。我想也许人们害怕你会搞砸paths并忘记如何将其恢复到原始状态?
顺便说一下,我正在运行 Mac Lion。但我的问题一般是针对 Linux 的。