我正在尝试在运行 OS X 的 Mac 上向我的 $PATH 变量添加一个位置。我正在关注本教程,其中说要编辑 .bashrc 文件。即使我这样做,我也没有在主目录中看到此文件
cd ~/
ls -A
Run Code Online (Sandbox Code Playgroud)
我可以继续创建该文件吗?或者我错过了什么?
假设我有一个 shell 脚本文件foo.sh。
我可以这样做chmod + x foo.sh
并将其更改为可执行文件。
在 Kernighan-Pike: Unix Programming Environment (UP) 中,他们表明在输入之后foo应该执行脚本。相反,在我的 Ubuntu 系统中,我需要输入sh foo或./foo。我猜这是由于 shell 的某些功能早先不存在(在编写 UP 时)。如果有人能启发我为什么存在这种差异以及为什么它很重要,我将不胜感激?
我倾向于从源代码构建二进制文件。我通常的设置如下
$HOME/build -> this gets the sources
$HOME/programs -> this is where the build happen, so where the binaries are
Run Code Online (Sandbox Code Playgroud)
完成后,我将以下内容放入我的 bashrc
export MYNEWBINDIR = $HOME/programs/...
export PATH=$MYNEWBINDIR:$PATH
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是推荐的方式吗?例如,我可以创建一个 local $HOME/bin,符号链接那里的所有二进制文件,然后将其添加到路径中...
这是我到目前为止所拥有的:
#!/bin/bash
for file in $PATH ; do # Scanning files in $PATH
if [ -x ] ; then #Check if executable
echo "Executable File"
else
echo "Not executable"
fi
done
Run Code Online (Sandbox Code Playgroud)
输出是“文件是可执行的”
我认为它没有正确循环所有文件夹
观察: 我有一个名为 foo 的可执行文件,位于 /b/foo 中。它是针对动态库的旧头文件编译的,导致它在执行时出现段错误:
$ foo
Segmentation fault. // Expected behaviour.
Run Code Online (Sandbox Code Playgroud)
现在,我针对新的动态库将新版本的 foo 编译到 /a/foo ,该库应该可以正常执行。目录 a/ 在 b/ 之前在我的 $PATH 中,因此应选择 /a/foo:
$ which foo
/a/foo
Run Code Online (Sandbox Code Playgroud)
当我执行 foo 时,会发生以下情况:
$ foo
Segmentation fault.
Run Code Online (Sandbox Code Playgroud)
因此,似乎 /b/foo 被执行了,而“which”告诉我 /a/foo 应该被执行。为了让事情变得更奇怪,当我运行完整路径 $(which /a/foo) 时,事情运行良好:
$ /a/foo
OK!
$ cp /a/foo .
$ ./foo
OK!
Run Code Online (Sandbox Code Playgroud)
再进一步,如果我现在删除 /a/foo:
$ rm /a/foo
Run Code Online (Sandbox Code Playgroud)
那么/b/foo肯定是选的吧?
$ which foo
/b/foo
$ foo
bash: /a/foo: No such file or directory
$ $(which foo)
Segmentation fault. // Expected …Run Code Online (Sandbox Code Playgroud) 我想为常见任务创建一个键绑定:打开一个新的终端窗口并ranger在其中打开程序。
显而易见的命令是这样的:
urxvt -e ranger
Run Code Online (Sandbox Code Playgroud)
重要的事情开箱即用。但是在ranger我想使用一个名为 的不同程序时fzf,找不到该程序。错误信息zsh:1: command not found: fzf。
结果与
urxvt -e zsh -c ranger
Run Code Online (Sandbox Code Playgroud)
当我已经有一个打开的终端并调用ranger它时,fzf可以毫无问题地调用它。
我看了一下,二进制文件的路径fzf被添加到$PATH我的.zshrc. 所以我的假设是这永远不会来源 my .zshrc,并且它永远不会被添加到路径中。
对此有一个明显的解决方法(使用完整路径fzf在内部调用),但是这个问题已经让我恼火了好几次,我想要一个很好的解决方案。ranger~/.fzf/bin/fzf
我怎样才能打开一个新的终端,源.zshrc并打开程序ranger?
还有一个我不明白的观察:
我创建了一个脚本myranger.sh:
#!/usr/bin/zsh
source ~/.zshrc
ranger
Run Code Online (Sandbox Code Playgroud)
并使用以下命令创建了新终端:
urxvt -e myranger.sh
Run Code Online (Sandbox Code Playgroud)
带护林员的终端打开,但fzf仍不在$PATH. 我在这里错过了什么?
顺便说一句,这不是zsh或urxvt具体的。我还使用bash和/或gnome-terminal.
我正在尝试从bash (version ) 命令行运行ipython。4.4.19
作为一名 Python 开发人员,我ipython在各种virtualenvs 的路径中安装了各种版本的各种安装,因此知道我正在运行哪个很重要。因此,$PATH当我改变时总是改变virtualenv,这将是一个典型的值PATH:
$ echo $PATH
/Users/jab/.virtualenvs/tools/bin:/Users/jab/bin:/Users/jab/src/git/hub/jab/bin:/usr/local/gnu:/bin:/usr/local/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
其中重要的细节是第一个条目是“ /Users/jab/.virtualenvs/tools/bin”,并且该文件/Users/jab/.virtualenvs/tools/bin/ipython确实存在:
$ ls -l /Users/jab/.virtualenvs/tools/bin/ipython
-rwxr-xr-x 1 jab staff 252 May 11 15:18 /Users/jab/.virtualenvs/tools/bin/ipython
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,which表示该文件将作为“ $ ipython”命令运行
$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython
$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python
Run Code Online (Sandbox Code Playgroud)
然而,实际情况并非如此,/usr/local/bin/ipython而是运行
$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么bash忽略我$PATH并使用“错误”的可执行文件?我需要更改什么(在我的 bashrc或我的系统 …
我试图递归地查找文件夹中的所有目录,同时通过排除所有包含.git文件的路径来排除所有 git 子模块。我怎么能做到?
解释:
.git文件存在于每个子模块文件夹的根目录中。这个子模块文件夹可以包含在任何地方。
测试用例
$ mkdir Test
$ cd Test
$ mkdir a
$ mkdir b
$ mkdir c
$ cd a
$ mkdir .git
$ cd ..
$ cd b
$ touch .git
$ cd ..
$ cd c
$ mkdir c1
$ mkdir c2
$ cd..
$ find . -type d \( \( ! -name . -exec [ -e {}/.git ] \; -prune \) -o \( \( \
-name .git\
-o -name .vscode\ …Run Code Online (Sandbox Code Playgroud) 我想在 Debian 9 下的 USB 驱动器上创建一个可启动的 Linux ISO。我发现 ISO 只有在已写入磁盘后才能启动/dev/XdY。如果 ISO 写入特定分区,例如 /dev/sdd1,则它不可引导。这背后的技术原因是什么?
它在将 ISO 写入分区并随后使用 Gnome-Disk 删除分区后工作,这不会删除文件,但会使磁盘可启动。
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:.
Run Code Online (Sandbox Code Playgroud)
以上两个路径变量有什么区别?
我发现这会像命令一样执行可执行文件,但我不确定。