小编jim*_*gee的帖子

在 bash 脚本中找到丢失的引号的最简单方法?

我有一个 bash 脚本,目前有 700 多行。经过特别长时间的编辑,它现在出现如下错误:

./run_me.sh: line 693: unexpected EOF while looking for matching `''
./run_me.sh: line 702: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

但是,我可以看到第 693 行没有任何问题。它甚至没有引用。

我试过运行bash -x run_me.sh,并且可以看到最后一行运行,但该行也没有任何问题(该行和 693 之间的代码实际上是大部分代码)。

我可以注释掉整个代码,但是我更有可能看到由于缺少函数等而导致的错误,而不是我得到的 EOF 错误。

那么如果行号报告不正确,人们应该如何找到丢失的报价?

(无论如何,为什么 bash 的行号报告如此遥远?)

编辑

顺便说一句,我发现了我的特定错误(通过评论条带),这实际上是}在任意行号处的变量扩展中缺少错误消息指示的行——基于引号的语法突出显示在这里没有帮助,例如"${MY_ARRAY[@]"(应该是"${MY_ARRAY[@]}")中缺少的大括号。

bash debugging shell-script

8
推荐指数
3
解决办法
9642
查看次数

使用autofs挂载到每个用户的主目录下

(来自 SF 的交叉帖子,我在那里并没有得到太多快乐)

我已经启动并运行了 CentOS 6.2 机器,并使用互联网上的各种操作方法将 autofs 配置为在 /mydomain 文件夹下自动挂载 Windows 共享。具体来说,我有三个文件:

/etc/auto.master

# ...
/mydomain   /etc/auto.mydomain --timeout=60
# ...
Run Code Online (Sandbox Code Playgroud)

/etc/auto.mydomain

* -fstype=autofs,-DSERVER=& file:/etc/auto.mydomain.sub
Run Code Online (Sandbox Code Playgroud)

/etc/auto.mydomain.sub

* -fstype=cifs,uid=${UID},gid=${EUID},credentials=${HOME}/.smb/mydomain ://${SERVER}/&
Run Code Online (Sandbox Code Playgroud)

这有效并允许每个用户在其主目录下的文件中指定自己的凭据。

但是,他们创建的挂载随后可供所有人使用原始用户的凭据使用,直到达到超时为止。这不太理想,所以我一直在考虑尝试执行以下操作之一:

  1. 配置 autofs,以便挂载对于每个用户来说都是本地的,但位于同一路径下,这样他们就可以使用/mydomain/server1自己的凭据同时访问
  2. 配置 autofs,使挂载点位于每个用户的主文件夹下,以便他们每个人都可以~/mydomain/server1使用自己的凭据同时访问
  3. 配置 autofs 以便挂载位于用户命名的文件夹下,这样他们就可以/mydomain/$USER/server1使用自己的凭据同时访问(但我还需要确保/mydomain/$USER给定的 $USER 是 0700)

到目前为止,我看不到任何执行 #1 的方法,但对于 #2 或 #3,我尝试更改 /etc/auto.master 中的条目,以便密钥为 或${HOME}/mydomain/mydomain/${USER}但两者都不起作用(第一个显示没有匹配的条目/var/log/messages,第二个似乎没有进行变量替换)。

我错过了一些明显的东西吗?

(PS:如果您可以提供一种方法来避免需要纯文本凭证文件,那就额外奖励了——也许是直接提示输入用户名/域/密码,甚至可能是一些 kerberos 魔法?)

(PPS:我简要地查看了smbnetfs,但我无法对其进行配置/制作 - 尽管fuse >= 2.6我有 v2.8.3 ,但它要求fusermount …

centos autofs

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

更改 LXDE/LXPanel 中监视器的“顺序”

我有一台笔记本电脑和一个外部 HDMI 显示器。我已经确定如何使用arandr对齐和旋转显示器到我满意的位置,勾选了笔记本电脑屏幕(LVDS-1)的“主要”选项,并勾选了两个屏幕(LVDS-1)的“活动”选项和 HDMI-1-1)。

我希望 LXDE 主桌面和 LXPanel 任务栏始终位于笔记本电脑上。但是,当插入 HDMI 显示器时,任务栏和桌面图标都会移至 HDMI 屏幕。

在 LXPanel 面板设置中,有一个下拉列表,显示您想要在哪个显示器上显示 LXPanel,选项有All12 。如果我将其设置为2,LXPanel 将显示在笔记本电脑屏幕上,但桌面图标保留在 HDMI 上。

如果我拔掉 HDMI,LXPanel 就会消失。我认为这是因为监视器 ID 恢复为1,而 LXPanel 配置为位于2上。

如果我是对的,那么我正在寻找一种方法来确保笔记本电脑屏幕始终为显示器1,并且 HDMI(如果已插入)为显示器2。请注意,我已经设置了“Primary”,arandr并且声明xrandrLVDS-1 是主要的。

有任何想法吗...?

fedora lxde monitors

5
推荐指数
0
解决办法
690
查看次数

有没有办法在没有 LVM / ext4 的情况下进行 CentOS 最小安装?

我正在尝试在我的实验室 XenServer 设置上对基本 CentOS 安装的磁盘吞吐量进行基准测试,并且正在从 CentOS 6.4 最小 CD 安装。但是,安装 ISO 会启动到文本模式的 anaconda 设置,它只为我提供了通过一些基本设置步骤进行下一步的选项。

从记忆中,我确信完整的 CD 曾经允许我进行分区、选择挂载点和文件系统,但它是一个庞大的 ISO,其中包含许多我可能永远不会使用的软件包。这个最小的只是提供“使用整个磁盘”、“替换现有的 linux”和“使用可用空间”,然后愉快地开始并创建一个 LVM 卷组、根和数据卷,并将两者都格式化为 ext4。

LVM 的好处值得赞赏,但不能忍受,我只想要普通的旧 MSDOS 标记的主要 ext3 分区用于/boot/(可能还有一个用于/home)。

对于这么简单的事情,我是否必须使用完整的 CD?

centos lvm system-installation installer-anaconda

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