OLDPWD 被导出并传递给任何子脚本,但是每当子脚本启动时,bash 显然会清除 OLDPWD:
$ cd /etc
$ cd
$ perl -e 'print "<$ENV{OLDPWD}>\n"'
</etc>
$ ksh -c 'echo "<$OLDPWD>"'
</etc>
$ bash -c 'echo "<$OLDPWD>"'
<>
Run Code Online (Sandbox Code Playgroud)
每当我想在子脚本中使用 $OLDPWD 时,除了创建别名或添加子脚本或导出具有相同值的其他变量之外,还有什么方法可以解决这个问题?
** 更新 2015/11/26 **
我提交了一份 bash 错误报告,并从 bash 维护者 Chet Ramey 那里得到了这个回复:
为什么 bash 在启动子脚本时会清除 OLDPWD?
因为新的 shell 没有“以前的工作目录”。它应该是由cd设置的,如果你没有执行过cd,你就没有。
如果 OLDPWD 命名目录,则继承 OLDPWD 似乎是合理的,就像 shell 命名当前目录时继承 PWD 一样,因此我们将在下一个 bash 版本中尝试这样做。
在对此 Unix & Linux StackExchange question 的已接受答案的评论中,指出这$_
是“POSIX 定义的仅有的 7 个特殊参数之一”。尽管我可以找到由 POSIX 定义的八个其他特殊参数,并且我已经$_
在ksh和bash手册页中看到了定义,但我找不到该定义。有人可以指出我在 POSIX 中的定义吗?
互联网上有许多使用单个引导分区和链加载来多重引导未加密发行版的教程。例如,启动 145 个操作系统。
同样,如果使用多个(未加密的)引导分区,则在 LUKS/LVM 内有多引导发行版的教程,通过让主引导加载程序链加载其他未加密引导分区中的引导加载程序。例如,在 LUKS 上进行多重引导。
但是我无法找到有关具有这些约束的多重引导的任何信息:
有可能吗,如果有,怎么做?
我想到的分区安排是:
LUKS 容器由 LVM 管理:
我能找到的最接近的信息有很多手动步骤:只有 bootloader unencrypted。
给定这个文件:
$ cat fruits.json
[
{ "name": "apple" },
{ "name": "banana\nfofanna" },
{ "name": "my kiwi" }
]
Run Code Online (Sandbox Code Playgroud)
如何使用它jq
来检索 shell 用作数据的水果名称列表,例如填充数组?
相当于下面数组的赋值fruits
:
$ fruits=(
'apple'
'banana
fofanna'
'my kiwi'
)
$ for f in "${fruits[@]}" ;do echo "<$f>"; done
<apple>
<banana
fofanna>
<my kiwi>
Run Code Online (Sandbox Code Playgroud)
以下均无效:
$ fruits=( $(jq -r ' .[].name ' fruits.json))
$ fruits=( $(jq -r ' .[].name | @sh ' fruits.json))
$ fruits=( $(jq ' .[].name | @sh ' fruits.json))
Run Code Online (Sandbox Code Playgroud)