阅读有关此问题的信息:在 zsh 中,我如何列出所有环境变量?,我想知道,我怎样才能列出所有的shell 变量?
另外,shell变量和环境变量之间的区别是否适用于zsh以外的shell?
我主要对 Bash 和 Zsh 感兴趣,但如果知道如何在其他主流 shell 中做到这一点会很棒。
在 OS X 中,有没有办法让 Zsh(我正在使用Oh-my-zsh)制表符完整公式?
例如
$ brew install em<TAB>
Run Code Online (Sandbox Code Playgroud)
可以扩展到:
$ brew install emacs
Run Code Online (Sandbox Code Playgroud) 是否/etc/paths
被我在 OS X 中运行的每个 shell读取?例如,如果我使用 zsh,它会解析/etc/path
填充$PATH
吗?
OS X 的填充顺序究竟是什么$PATH
?它的做法与其他 Unices 有什么不同吗?
我有一个.zshrc
主要更新的功能PATH
:
my_function()
{
PATH=...
}
Run Code Online (Sandbox Code Playgroud)
以及一些依赖于它的脚本,例如my_script.sh
以以下几行开头:
my_function
# do stuff ...
Run Code Online (Sandbox Code Playgroud)
然后我有以下内容crontab
:
00 02 * * * /path/to/my/zsh /path/to/my_script.sh
Run Code Online (Sandbox Code Playgroud)
但我注意到,甚至当我运行my_script.sh
为./my_script.sh
手动(即从我的互动()岩组的壳呢?),我得到的错误:
Command not found: my_function
Run Code Online (Sandbox Code Playgroud)
即使我可以完美地my_function
从终端调用。
为什么?我想,它的解决方案不要求我去认领添加到我的脚本(更多关于这个看这个)
我找到了下图。我想在我的情况下,cron 启动了一个非交互式、非登录的 shell,这就是为什么没有运行任何 init 文件的原因。那是对的吗?
有没有办法对ack
按修改日期找到的结果进行排序?(最好在结果旁边显示日期?)。它看起来没有ack
日期选项,但以防万一。
如果使用 无法做到这一点ack
,那么如何grep
或使用工具组合?
有什么办法来防止find
和ls -l
从上市.
并..
在他们的结果?我从不关心在输出中看到这个结果,它阻止我有效地将他们的输出输送wc -l
到准确地计算事物。
万一重要,我在zsh
.
我在.cshrc
几台机器上的 init 文件中看到过这段代码。我通过一些 awk 教程试图了解它是如何工作的,但我仍然无法解密它。
setenv PATH `echo $PATH | awk 'NF&&\\!x[$0]++' RS='[:|\n]' | paste -sd:`
Run Code Online (Sandbox Code Playgroud)
它有什么作用?
以下脚本应该将csv
第一个参数中指定的路径中的多个文件连接到第二个参数中指定的单个 csv 文件中
#!/bin/zsh
set -x
set -v
args=("$@");
globbing_pattern=${args[1]}
output_file=${args[2]}
# First the headers:
head -n1 ${globbing_pattern}([1,1]) > $output_file
# Now concatenate everything:
find ${globbing_pattern} -print0 | xargs -0 cat >> $output_file
Run Code Online (Sandbox Code Playgroud)
我想用以下方式调用这个脚本:
my_script '/some/path/*.csv' output.csv
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我得到:
find: /some/path/*.csv: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么?
我想采购一个shell脚本,改变在Emacs我的环境变量。也就是说,我希望 shell 脚本更改 Emacs 运行的环境,并且我希望在正在运行的 Emacs 会话中执行此操作。
换句话说:
zsh
zsh
从 Emacs 中获取一个脚本来更改环境变量,例如LD_LIBRARY_PATH
这是试图规避我在此处描述的问题,我需要设置 LD_LIBRARY_PATH
运行 Emacs,但我需要取消设置以运行特定的 Python 发行版 ( Anaconda )。
具体来说,我想使用需要访问此 Python 发行版的 Emacs 包 ( emacs-jedi ),但目前我需要先取消设置 LD_LIBRARY_PATH
才能启动 Emacs,所以我需要稍后设置它,以便我可以emacs-jedi
在 Emacs 中使用。
这是可能吗?
我正在使用 Elisp。我想在我的 init 文件中执行以下操作:
; Retrieve the value of LD_LIBRARY_PATH
; Append '/path/to/some/lib/:'to it
; Save the new value of LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
到目前为止,我知道我可以使用:
(getenv "LD_LIBRARY_PATH")
Run Code Online (Sandbox Code Playgroud)
检索值,以及:
(setenv "LD_LIBRARY_PATH" "foo")
Run Code Online (Sandbox Code Playgroud)
设置一个新值,但我对 Elisp 的了解非常初级,所以我不知道从这一点开始。
这个问题的灵感来自于不可能从 Emacs 中获取 shell 脚本来操作这个环境的事实,所以我需要使用 Elisp 来做到这一点。