我不确定这是否是在这里发布的“正确”问题。我可能更多地询问“意见”而不是实际的分类答案(那些要么有效要么无效,就是这样)。
我想知道什么名称分隔符对linux最友好(或者更具体地说,Bash 友好)同时对人类友好。
假设我想创建一个目录,其中包含与Mr. Foo Bar相关的内容(Foo是名字,Bar是姓氏)
有名字“ Foo-Bar/”很方便。-是一个“常规”字符,不需要转义,它清楚地表明Foo和Bar是两个独立的东西......很好。
现在,“ Foo.Bar”有点棘手。有人可能认为这Foo.Bar实际上是一个文件(乍一看,特别是如果您没有启用着色的终端),其中“ Foo”是文件名,“ Bar”是扩展名。
我也可以使用“ Foo Bar”,但是当我想访问目录时我需要转义空格,如果我想列出父目录的内容(所在Foo Bar的位置)并将所述列表放入 bash 数组中,则空白会引起麻烦(很多)。不太好。
括号()也会导致很多问题。它们还需要被转义,然后导致命令出现问题scp......不好。
所以......问题(最后)是:如果您需要使文件名一目了然且有意义,并且需要使用分隔符,您使用什么?
我想实现一个 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)
我有ifconfig和ip可用的命令,但是解析它们的输出有点棘手,因为 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,以防万一。
我正在编写一个 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)