我正在使用Docker for Mac,我在docker容器中运行基于nodejs的微服务.我想通过浏览器测试节点微服务.如何获取运行docker容器的IP地址?
我有一个 Linux Docker 容器,它需要一个无线接口才能工作。在 Linux 上(在 Linux 主机上运行它)我没有问题。
带参数运行泊坞窗容器--privileged
和--net=host
我可以访问该主机的无线接口,并没有任何问题,我可以管理它们。问题是当我在 Mac OS X 主机上运行相同的 Linux Docker 容器时。我看不到 Docker 容器内的无线接口。
这是 Mac OS X v10.12 (Sierra) 主机上 ifconfig 的输出:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
ether 00:0c:29:fe:78:07
inet6 fe80::8ff:62ac:e141:5aa9%en0 prefixlen 64 secured scopeid 0x4
inet 192.168.0.153 netmask 0xffffff00 broadcast 192.168.0.255 …
Run Code Online (Sandbox Code Playgroud) 我需要在bash过程中进行数组搜索这么多次.我需要知道什么是最快速有效的方法.我知道该怎么做.问题的关键是如何以最快的方式做到这一点.现在,我正在这样做:
#!/bin/bash
array_test=("text1" "text2" "text3" "text4" "text5")
text_to_search="text4"
START=$(date +%s.%N)
for item in "${array_test[@]}"; do
if [ ${item} = "${text_to_search}" ]; then
echo "found!!"
break
fi
done
END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)
echo $DIFF
Run Code Online (Sandbox Code Playgroud)
使用此代码,我们可以测量时间.
想象一下,我们在阵列中有300个或更多项目.有更快的方法吗?我需要提高性能.谢谢.
编辑我正在使用bash 4.2.真正的数组有换行符:
array_test=(
"text1"
"text2"
"text3"
"text4"
"text5"
)
Run Code Online (Sandbox Code Playgroud) 我有这个:
list_name = [0, 1, 2, 3]
list_name[0] = {}
list_name[0]['test'] = 'any value'
Run Code Online (Sandbox Code Playgroud)
我想知道列表中的某个键是否存在。通常我使用:
if 3 not in list_name:
print("this doesn't exist")
else:
print("exists")
Run Code Online (Sandbox Code Playgroud)
例如,对 3 号进行测试是有效的。它说“存在”。如果我检查号码 999 是否有效,它会说“这个不存在”。
问题是它不适用于 0。如您所见,列表中的 0 值有一个字典。我需要检查列表中是否存在 0 (不管它是否有字典)。如何实现这一目标?使用python3,谢谢。
通常,如果我想打印命令的输出,并在文件中捕获该输出,tee就是解决方案。但我正在使用一个似乎有特殊行为的实用程序制作一个脚本。它就是wps无线评估工具bully。
如果我正常运行 bully 命令(不带 tee),输出将以标准方式逐步显示。但是,如果我将管道放在末尾这样进行记录,| tee "/path/to/my/logfile"
屏幕上的输出就会冻结。在命令结束之前它什么也不显示。结束后,它一次性显示所有内容(不是一步一步),当然它也将输出放入日志 tee 文件中。
bully 命令的示例:bully wlan0mon -b 00:11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee /root/Desktop/log.txt
为什么?不确定这是否只发生在恶霸身上,或者是否还有其他程序具有相同的行为。
是否有另一种方法可以将输出捕获到实时在屏幕上显示输出的文件中?
我正在开发一个管理一些陷阱的脚本。一开始我只用这段代码管理 INT 和 SIGTSTP,它运行得很好:
#!/bin/bash
function capture_traps() {
echo -e "\nDoing something on exit"
exit 1
}
trap capture_traps INT
trap capture_traps SIGTSTP
read -p "Script do its stuff here and we use read for the example we pause for time to generate trap event"
exit 0
Run Code Online (Sandbox Code Playgroud)
然后我尝试添加我想要管理的新陷阱,即 SIGINT 和 SIGHUP。首先,我这样做了(这是有效的):
#!/bin/bash
function capture_traps() {
echo -e "\nDoing something on exit"
exit 1
}
trap capture_traps INT
trap capture_traps SIGTSTP
trap capture_traps SIGINT
trap capture_traps SIGHUP
read -p "Script do …
Run Code Online (Sandbox Code Playgroud) 我需要在不使用macchanger或类似工具的情况下,在bash中生成随机的mac地址。
我有这个:
random_mac=$(hexdump -n6 -e '/1 ":%02X"' /dev/random | sed s/^://g)
Run Code Online (Sandbox Code Playgroud)
但是有时候,如果您尝试将Mac放入界面,它会说SIOCSIFHWADDR: Cannot assign requested address
。我对此进行了调查,似乎与单播地址有关。我有一个解决方法:
random_mac=00:$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 200 | md5sum | sed -r 's/^(.{10}).*$/\1/;s/([0-9a-f]{2})/\1:/g; s/:$//;')
Run Code Online (Sandbox Code Playgroud)
但是我不太喜欢这个,因为它不是完全随机的。它始终00
是一开始的。
任何已知的bash随机mac生成器都适合单播规则吗?
我阅读使用其他方法od
。我想以较少的工具,可以使用具有较小的requeriments运行该脚本。没有可以做od
?还是od
绝对总是包含在所有Linux发行版中?如果是的话,我可以用它。
我想知道哪种方法更好地检查var(由用户在键盘上输入)是否以不区分大小写的方式与正则表达式匹配。我知道有一些不同的可能性。例如:我想一个正则表达式匹配一个空值,而这一切的名单:Y
,N
,y
,n
,Yes
,No
,YES
,NO
我搜索了不同的方法。不知道是否会更好。我会把其中的一些给我工作。
第一个是将所有内容都设置为大写的“ tricky”设置,以进行比较:
#!/bin/bash
yesno="null" #any different value for initialization is valid
while [[ ! ${yesno^^} =~ ^[YN]$|^YES$|^NO$|^$ ]]; do
read -r yesno
done
Run Code Online (Sandbox Code Playgroud)第二个是使用shopt -s nocasematch
。但是不确定这样做之后是否可以还原,因为我不想为所有脚本设置它。
#!/bin/bash
yesno="null" #any different value for initialization is valid
shopt -s nocasematch
while [[ ! ${yesno} =~ ^[yn]$|^yes$|^no$|^$ ]]; do
read -r yesno
done
Run Code Online (Sandbox Code Playgroud)这些正则表达式能否以任何方式得到改进?有没有更好(更优雅)的方法?在第二种方法上,有没有办法还原该设置?
我正在构建一个具有 Maven 和一些依赖项的 Docker 容器。然后它在容器内执行脚本。看起来,其中一个依赖项需要 Xserver 才能工作。屏幕上没有显示任何内容,但这似乎是必要且无法避免的。
我让它工作了,ENV DISPLAY=x.x.x.x:0
在 Dockerfile 上放置了一个,它连接到外部 Xserver 并且它工作了。但重点是让 Docker 成为一个自给自足的容器。
因此,我需要将 Xserver 添加到我的容器中,并在 Dockerfile 中添加必要的内容。我希望 Xserver 只能由 Docker 容器本身访问,而不能从外部访问。
FROM
我的 Dockerfile 的 是不可FROM ubuntu:15.04
更改的,因为我的 Dockerfile 有很多内容取决于该特定版本。
我读过一些关于如何从 docker 容器连接到 Docker 主机的 Xserver 的文章,如下所示。但正如我提出问题的标题一样,Docker 主机是无头的,并且没有 Xserver。
apt-get
要安装到容器中才能拥有 Xserver,最少需要安装哪些软件包?ENV DISPLAY=:0
. 它是否正确?docker run
?谢谢。
我有一个动态输出。有时像这样:
F8:XX:94:XX:C2:XX 1 39% No ANY_NAME
A2:XX:34:XX:E8:XX 6 42% Yes ANY_OTHER_NAME
D1:XX:78:XX:A1:XX 6 24% No MORESTUFF
Run Code Online (Sandbox Code Playgroud)
或者像其他时候这样:
F8:XX:94:XX:C2:XX 1 433 39% No ANY NAME
A2:XX:34:XX:E8:XX 6 232 42% No ANY_OTHER_NAME
D1:XX:78:XX:A1:XX 6 112 22% Yes MORE STUFF
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,最后一列是我想要的,但它可以包含空格或不包含空格,并且列数是动态的。
我需要始终捕获最后一列的值,以防没有空格或有多个空格。有时,列号也是动态的,但我想要的数据始终位于最后一个有空格或没有空格的位置。此数据之前的列始终是“是”或“否”(不确定这是否有帮助)。
有没有办法用 awk 来做到这一点?这就是我实际拥有的:
myvar=$(echo "${line}" | awk '{print $NF}')
Run Code Online (Sandbox Code Playgroud)
但这样做只是获取空格后的最后一部分,而不是完整的数据。因此,只有当数据没有空格时,这才有效。
我想要的是始终获得最后的数据及其空格,以防包含它们。有什么帮助吗?
我需要知道 Bash 是否有针对我的情况的解决方案。我需要在某些条件后进行“双重回报”。我的意思是,执行函数的返回并返回父函数以跳过该父函数的其余代码。
我知道我可以使用函数返回值进行条件操作来实现此目的。但我想知道 Bash 中是否存在类似“break 2”的函数。如果可能的话,我不想修改父函数的代码,因为正如你可以想象的,在我的真实脚本中有几十个函数,我不想修改所有函数。
例子:
#!/bin/bash
function sublevelone() {
echo "sublevelone"
# Return 2, or break 2 or something :D
}
function main() {
sublevelone
echo "This is the part of the code to being avoid executed"
}
main
Run Code Online (Sandbox Code Playgroud) 我有一个包含嵌入文件 (test.xml) 的简单 pdf 文件,我试图添加一个 JS 以在打开 pdf 文件后调用它(即使通知用户接受风险等)。我已经读过要执行的操作,应该使用的 JS 是这样的:
this.ExportDataObject({cName:"test.xml", nLaunch:2});
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它不起作用。我检查了 Acrobat 阅读器 DC(版本 2021.001.20145)上的调试 js 控制台,显示的错误是TypeError: this.ExportDataObject is not a function
. 我不确定为什么在我的“这个”对象上,ExportDataObject 不可用......我认为它应该始终可用,不是吗?我也没有测试过this.
,错误是不同的ReferenceError: ExportDataObject is not defined
。
这让我觉得this.ExportDataObject
存在但不是原始错误所说的函数......但是,如果不是函数,那是什么?typeof 显示“未定义”。不知道如何使这项工作。不确定下一步是否应该进行更多的 JS 调试,或者问题是否与 pdf 或 Acrobat 上的某些内容有关。有什么帮助吗?谢谢。
我正在开发一个脚本,我有一个十六进制字符串31323334353637383930313233
,我想将其转换为ASCII.期望的输出是1234567890123
.
我已经使用它了:
echo "31323334353637383930313233" | xxd -r -p
Run Code Online (Sandbox Code Playgroud)
要么
echo "31323334353637383930313233" | perl -pe 's/(..)/chr(hex($1))/ge'
Run Code Online (Sandbox Code Playgroud)
但重点是尝试使用脚本的最低可能要求.我希望它在suse,fedora,debian,ubuntu,arch等工作......似乎xxd命令包含在vim包中.我想知道是否有办法使用awk或任何内部Linux工具来实现这一点,默认情况下将在所有Linux系统中使用.
谢谢.
bash ×8
containers ×3
docker ×3
arrays ×2
awk ×2
acrobat ×1
adobe ×1
ascii ×1
bash-trap ×1
capture ×1
dictionary ×1
generator ×1
headless ×1
hex ×1
javascript ×1
linux ×1
list ×1
mac-address ×1
macos ×1
nested ×1
output ×1
pdf ×1
performance ×1
perl ×1
python ×1
python-3.x ×1
random ×1
regex ×1
search ×1
tee ×1
wireless ×1
xserver ×1