小编mid*_*ite的帖子

如何临时设置 $PATH 和 . (来源)一个文件?

考虑一下这一点。IFS仅在执行时设置read

IFS='' read -r REPLY
Run Code Online (Sandbox Code Playgroud)

但是,如果我对.source)执行类似操作,即使在执行该代码行之后,变量也会被分配和更改。

PATH="/new_path:${PATH}" . script.sh
echo "$PATH"         # Value changed
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况呢?我认为.和 Bash 一样source,是一个类似于reador 的命令echo。有没有任何文档,例如2.14。特殊的内置实用程序,提到这种行为吗?

如何以符合 POSIX 的方式临时设置$PATH.(源)文件?

source path shell-script posix

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

如何防止 /sda /sdb 在启动之间发生变化?

我打算将 Gentoo Linux 安装到旧硬件上,该主板同时具有 IDE 和 SATA 硬盘驱动器。我连接了两个 IDE 和一个 SATA 硬盘,并计划对它们进行 RAID。

但是我注意到一个问题:映射到 /dev/sda 的硬盘在每次启动时都会发生变化!

我正在互联网上寻找答案。我发现持久设备名称可能是一个解决方案。但是我担心它会在系统范围内遇到兼容性问题吗?此外,它非常不方便(因为名称很长),除非我可以使用/dev/disk/by-label. 但它似乎by-label不能指/dev/sda/dev/sdb- 只有/dev/sda1可能。而且,对于我使用 BIOS 的旧硬件,我认为我只能使用 MBR ,而不能使用 GPT。MBR环境下如何更改磁盘标签?

另一方面,我认为理想的解决方案是,/dev/sda在每次启动时都映射到同一个硬盘。想象一下,这可以通过在硬盘上保存一个名为“bootmap”的文件来实现。而“/sda”写在“bootmap”文件中。系统启动时,如果在“bootmap”中找到“/sda”,则驱动器被映射到/dev/sda. 如果找到“/sdb”,则映射到/dev/sdb. 等等。(但我知道这可能不是那么理想。)

那么,如何避免/dev/sda从引导到引导的变化映射?

作为替代方案,编辑标签的方式也不错。- 鉴于它不会在任何地方遇到兼容性问题。

(PS - 无论哪种方式,互联网上还没有解决方案。)

gentoo udev devices hard-disk block-device

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

了解“副作用”,或一个命令中的多个命令?

这个问题重点关注 POSIX 兼容的 shell 脚本。

通常通过以下方式递增变量:

i=3
: $(( i += 1 ))
echo "return code = $?"        # return code = 0
echo "i = $i"                  # i = 4
Run Code Online (Sandbox Code Playgroud)

该命令是否$(( i += 1 ))称为“副作用” :

(我在某处读到:等于true。我尝试用 or 替换:truefalse有效。如果用 替换false,则返回码为 1,正如预期的那样。)

为什么成功增加了值$i,但赋值却不起作用,出现“副作用”?

a='four'
: a='five'
echo "return code = $?"        # return code = 0
echo "a = $a"                  # a = …
Run Code Online (Sandbox Code Playgroud)

shell shell-script posix

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

标签 统计

posix ×2

shell-script ×2

block-device ×1

devices ×1

gentoo ×1

hard-disk ×1

path ×1

shell ×1

source ×1

udev ×1