小编hug*_*omg的帖子

找出与给定命令对应的可执行文件的 unix 命令是什么?

例如,如果ls作为输入传递,它应该告诉我/bin/ls如果ls在命令行上运行,它将运行。

linux unix command-line

23
推荐指数
3
解决办法
1万
查看次数

有没有办法从鱼壳中“来源”一个 sh 脚本?

我喜欢将我的许多环境变量定义放在.profile脚本中。如果我使用的是 POSIX 兼容的交互式 shell,比如 bash,我可以使用 source 命令从.profile更新时重新导出环境变量,而无需打开新的终端窗口。有没有办法在我使用时做同样的事情fish,它使用不同的语法来导出变量?我可以告诉fish 运行一个子sh进程并重新导出它定义的任何变量吗?

当我尝试做显而易见sh .profile的事情时,环境变量显然只在子sh进程中定义,而不会在父fish进程中更新。


编辑:定义我的变量的 shell 代码是这个

CAML_LD_LIBRARY_PATH="/home/hugo/.opam/4.01.0/lib/stublibs"; export CAML_LD_LIBRARY_PATH;
PERL5LIB="/home/hugo/.opam/4.01.0/lib/perl5:"; export PERL5LIB;
OCAML_TOPLEVEL_PATH="/home/hugo/.opam/4.01.0/lib/toplevel"; export OCAML_TOPLEVEL_PATH;
MANPATH=":/home/hugo/.opam/4.01.0/man"; export MANPATH;
PATH="/home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"; export PATH;
Run Code Online (Sandbox Code Playgroud)

不幸的是,此代码是由另一个程序自动生成的,因此也必须使用自动过程来转换为 Fish。我尝试使用以下 sed 脚本

sed 's/\(.*\)="\(.*\)".*/set -x \1 \'\2\';/'
Run Code Online (Sandbox Code Playgroud)

输出以下鱼代码

set -x CAML_LD_LIBRARY_PATH '/home/hugo/.opam/4.01.0/lib/stublibs';
set -x PERL5LIB '/home/hugo/.opam/4.01.0/lib/perl5:';
set -x OCAML_TOPLEVEL_PATH '/home/hugo/.opam/4.01.0/lib/toplevel';
set -x MANPATH ':/home/hugo/.opam/4.01.0/man';
set -x PATH '/home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games';
Run Code Online (Sandbox Code Playgroud)

我可以使用 eval 和()替换来运行

eval (my-sed-script) …
Run Code Online (Sandbox Code Playgroud)

bash environment-variables sh fish

11
推荐指数
1
解决办法
9803
查看次数

标签 统计

bash ×1

command-line ×1

environment-variables ×1

fish ×1

linux ×1

sh ×1

unix ×1