小编Bor*_*jaX的帖子

文件(或目录)名称中分隔符的良好风格/实践

我不确定这是否是在这里发布的“正确”问题。我可能更多地询问“意见”而不是实际的分类答案(那些要么有效要么无效,就是这样)。

我想知道什么名称分隔符对linux友好(或者更具体地说,Bash 友好)同时对人类友好

假设我想创建一个目录,其中包含与Mr. Foo Bar相关的内容(Foo是名字,Bar是姓氏)

有名字“ Foo-Bar/”很方便。-是一个“常规”字符,不需要转义,它清楚地表明FooBar是两个独立的东西......很好。

现在,“ Foo.Bar”有点棘手。有人可能认为这Foo.Bar实际上是一个文件(乍一看,特别是如果您没有启用着色的终端),其中“ Foo”是文件名,“ Bar”是扩展名。

我也可以使用“ Foo Bar”,但是当我想访问目录时我需要转义空格,如果我想列出父目录的内容(所在Foo Bar的位置)并将所述列表放入 bash 数组中,则空白会引起麻烦(很多)。不太好。

括号()也会导致很多问题。它们还需要被转义,然后导致命令出现问题scp......不好。

所以......问题(最后)是:如果您需要使文件名一目了然且有意义,并且需要使用分隔符,您使用什么?

linux bash filenames

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

创建映射 network_iface_name <--> IPv4 地址

我想实现一个 bash 脚本,该脚本在我的计算机中的网卡(或接口)名称与其 IP 地址(如果可能,采用 CIDR 格式)之间创建映射。

目标是拥有一个类似关联数组的东西,或者一个看起来像这样的文件:

lo: "127.0.0.1/8"
eth0: "192.168.1.123/24"
br-priv: ""      # <-- No IP assigned
wlan0: "10.42.0.10/24"
Run Code Online (Sandbox Code Playgroud)

我有ifconfigip可用的命令,但是解析它们的输出有点棘手,因为 IP 地址和接口的名称不会出现在同一行中,所以我必须找到接口 IP 地址,然后回滚才能找到网络的名称,反之亦然。

有没有其他方法可以找到我的接口 IP 地址?

我在下面有所有接口名称(作为目录名称) /sys/class/net/

root@borrajax:~# ls /sys/class/net/
br-priv/   eth0/    lo/    mon0/   wlan0/
Run Code Online (Sandbox Code Playgroud)

但是我一直无法在这些目录中找到他们的 IP。这样做会很棒,因为我可以遍历目录,检索目录的名称,然后从其他文件中读取 IP。

这旨在在运行OpenWRT的嵌入式系统中运行,但基于 Debian 的系统的解决方案可能是合适的。我bash的版本是 4.2.28,以防万一。

networking bash ip network-interface

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

作为另一个用户在 bash 脚本中运行 expect

我正在编写一个 bash 脚本来安装我正在开发的一些小软件。该脚本以sudo(以 root 身份)运行,但脚本执行的某些命令需要(或应该)由我将其名称保留在$userName变量中的普通用户运行。大多数命令都是单行的,而且su -c "/what/ever/command" $userName效果很好。

但是,我不想运行的其中一个命令root会问我一些事情(实际上,只有一件事,但很多次:是否应该覆盖现有文件)。我可能称之为“ baaad_command”的那个命令没有提供默认答案的任何选项(没有“ --assume-no”或类似的东西)。

我看是可行的唯一选择是使用预期的命令,并回复“ n\r”命令输出和串巫婆开始与每一次“ Overwrite”,我想我的脚本没有答复(意为“ n\r“)多次baaad_command问"Overwrite... ? [y/n]"

我尝试了许多不同的 su、spawn、expect 组合……但没有任何运气。

这是我迄今为止的最后一次尝试:

#!/bin/bash
if [[ -d "$destinationFolder" ]] ; then
    if [[ -n "$userName" ]] ; then
        spawned=$(su -c expect -c "
            spawn baaad_command --user \"foo\" --passwd \"bar\" \"$destinationFolder\"
             expect {
                 Overwrite: { send \"n\r\"; exp_continue }
                 eof { exit }
             }
        " )
    else …
Run Code Online (Sandbox Code Playgroud)

scripting bash su expect

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

标签 统计

bash ×3

expect ×1

filenames ×1

ip ×1

linux ×1

network-interface ×1

networking ×1

scripting ×1

su ×1