小编jrw*_*982的帖子

为什么 bash 在启动子脚本时会清除 OLDPWD?

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 版本中尝试这样做。

bash environment-variables

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

POSIX 定义的 $_ 在哪里?

对此 Unix & Linux StackExchange question 的已接受答案评论中,指出这$_是“POSIX 定义的仅有的 7 个特殊参数之一”。尽管我可以找到由 POSIX 定义的八个其他特殊参数,并且我已经$_kshbash手册页中看到了定义,但我找不到该定义。有人可以指出我在 POSIX 中的定义吗?

shell bash ksh posix

7
推荐指数
1
解决办法
516
查看次数

Grub2 可以多引导 LUKS/LVM 发行版,只有一个引导分区吗?

互联网上有许多使用单个引导分区和链加载来多重引导未加密发行版的教程。例如,启动 145 个操作系统

同样,如果使用多个(未加密的)引导分区,则在 LUKS/LVM 内有多引导发行版的教程,通过让主引导加载程序链加载其他未加密引导分区中的引导加载程序。例如,在 LUKS 上进行多重引导

但是我无法找到有关具有这些约束的多重引导的任何信息:

  • 只有一个(或没有)未加密的启动分区
  • 无需外部 USB 密钥文件
  • 除了选择要启动的发行版和输入 LUKS 密码(仅一次)之外,无需手动步骤

有可能吗,如果有,怎么做?

我想到的分区安排是:

  • sda1,启动分区
  • sda2, LUKS 容器

LUKS 容器由 LVM 管理:

  • 交换,在所有发行版之间共享
  • [主页,在所有发行版之间共享]
  • root1,主要发行版,将 sda1 挂载为 /boot
  • root2,发行版 2,包括加密的 /boot
  • root3,发行版 3,包括加密的 /boot
  • 等等。

我能找到的最接近的信息有很多手动步骤:只有 bootloader unencrypted

dual-boot boot-loader lvm grub2 luks

7
推荐指数
1
解决办法
3389
查看次数

如何使用 jq 将信息返回到 shell,同时考虑到空格?

给定这个文件:

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

shell quoting jq

7
推荐指数
1
解决办法
2834
查看次数

标签 统计

bash ×2

shell ×2

boot-loader ×1

dual-boot ×1

environment-variables ×1

grub2 ×1

jq ×1

ksh ×1

luks ×1

lvm ×1

posix ×1

quoting ×1