小编Jos*_*osh的帖子

如何列出所有 shell 变量?

阅读有关此问题的信息:在 zsh 中,我如何列出所有环境变量?,我想知道,我怎样才能列出所有的shell 变量

另外,shell变量和环境变量之间的区别是否适用于zsh以外的shell?

我主要对 Bash 和 Zsh 感兴趣,但如果知道如何在其他主流 shell 中做到这一点会很棒。

bash zsh environment-variables

30
推荐指数
2
解决办法
2万
查看次数

Zsh 完成 brew 公式

在 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)

zsh autocomplete homebrew

12
推荐指数
2
解决办法
1万
查看次数

OS X 和其他 Unices 中的 /etc/paths

是否/etc/paths被我在 OS X 中运行的每个 shell读取?例如,如果我使用 zsh,它会解析/etc/path填充$PATH吗?

OS X 的填充顺序究竟是什么$PATH?它的做法与其他 Unices 有什么不同吗?

osx zsh path etc

8
推荐指数
1
解决办法
2104
查看次数

运行脚本时找不到 .zshrc 中定义的函数

我有一个.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 文件的原因。那是对的吗?

在此处输入图片说明

zsh shell-script

8
推荐指数
1
解决办法
8299
查看次数

ack/grep 搜索并按修改日期排序

有没有办法对ack按修改日期找到的结果进行排序?(最好在结果旁边显示日期?)。它看起来没有ack日期选项,但以防万一。

如果使用 无法做到这一点ack,那么如何grep或使用工具组合?

grep files ack

8
推荐指数
2
解决办法
5299
查看次数

排除 . 和 .. 来自 find 和 ls 的结果

有什么办法来防止findls -l从上市...在他们的结果?我从不关心在输出中看到这个结果,它阻止我有效地将他们的输出输送wc -l到准确地计算事物。

万一重要,我在zsh.

ls zsh find

6
推荐指数
2
解决办法
386
查看次数

awk + ​​paste 用于清理路径?

我在.cshrc几台机器上的 init 文件中看到过这段代码。我通过一些 awk 教程试图了解它是如何工作的,但我仍然无法解密它。

setenv PATH `echo $PATH | awk 'NF&&\\!x[$0]++' RS='[:|\n]' | paste -sd:`
Run Code Online (Sandbox Code Playgroud)

它有什么作用?

tcsh path awk text-processing

5
推荐指数
1
解决办法
295
查看次数

将 glob 表达式传递给函数/脚本

以下脚本应该将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 zsh wildcards

5
推荐指数
1
解决办法
1538
查看次数

从 Emacs 中获取 shell 脚本

我想采购一个shell脚本,改变在Emacs我的环境变量。也就是说,我希望 shell 脚本更改 Emacs 运行的环境,并且我希望在正在运行的 Emacs 会话中执行此操作。

换句话说:

  1. 我从 Emacs 开始 zsh
  2. 我想zsh从 Emacs 中获取一个脚本来更改环境变量,例如LD_LIBRARY_PATH

背景:

这是试图规避我在此处描述的问题,我需要设置 LD_LIBRARY_PATH运行 Emacs,但我需要取消设置以运行特定的 Python 发行版 ( Anaconda )。

具体来说,我想使用需要访问此 Python 发行版的 Emacs 包 ( emacs-jedi ),但目前我需要先取消设置 LD_LIBRARY_PATH才能启动 Emacs,所以我需要稍后设置它,以便我可以emacs-jedi在 Emacs 中使用。

这是可能吗?

shell emacs shell-script

5
推荐指数
1
解决办法
1241
查看次数

从 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 来做到这一点。

emacs environment-variables

4
推荐指数
1
解决办法
1024
查看次数