我BASEDIR=$(pwd)在脚本中遇到过。
BASEDIR="$PWD"除了可能$PWD会被覆盖之外,使用 是否有任何优点或缺点?
我有一个脚本,当我想要它时它不会退出。
具有相同错误的示例脚本是:
#!/bin/bash
function bla() {
return 1
}
bla || ( echo '1' ; exit 1 )
echo '2'
Run Code Online (Sandbox Code Playgroud)
我假设会看到输出:
:~$ ./test.sh
1
:~$
Run Code Online (Sandbox Code Playgroud)
但我实际上看到:
:~$ ./test.sh
1
2
:~$
Run Code Online (Sandbox Code Playgroud)
()命令链是否以某种方式创建了一个范围?exit如果不是脚本,退出是什么?
我正在寻找一个命令来限制从stdin.
我为此编写了一个小脚本(欢迎批评),但我想知道是否没有针对此简单且(我认为)常见用例的标准命令。
我的脚本找到了两个数字中的最小值:
#!/bin/bash
# $1 limit
[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }
read number
if [ "$number" -gt "$1" ]; then
echo "$1"
else
echo "$number"
fi
Run Code Online (Sandbox Code Playgroud) 我得到了一个 mini 的文件linux,它可以直接启动到firefox. 它适用于它应该做的所有事情,只是我没有互联网连接。
我们在网络中有 3 个 DNS 服务器,它们都可以正常工作。我也可以ping通他们。但是当我尝试ping google.de或wget google.de我得到一个bad address错误。
nslookup google.de 出于某种原因工作。
我将问题追溯到我resolv.conf在启动系统上的内容与resolv.conf我放入.iso文件中的内容不同。
我尝试了解创建和修改resolv.conf. 我不太确定我是否掌握了所有内容,但我绝对没有在那里找到我的解决方案。
所以作为最后的努力,我尝试resolv.conf使用
:~# chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,当重新构建并再次启动时,我的文件被重命名为resolv.conf~,取而代之的是一直困扰着我的同一个标准文件。
文件内容让我相信它是从网络本身获取信息的。.iso在没有互联网访问权限的情况下启动Virtualbox 时,我的文件将保持原样。
我试图/etc/dhcp/dhclient.conf通过删除domain-name-server和domain-name-search从request文件的一部分来改变不从网上获取信息。
不幸的是没有工作。
我没有安装 NetworkManager。ISO 基于 Ubuntu 14.04。
可能缺少重要信息。我很乐意提供它。
更新:
我想我找到了清除resolv.conf.
好像是 /usr/share/udhcpc/default.script
#!/bin/sh
# udhcpc script edited by Tim Riker …Run Code Online (Sandbox Code Playgroud) 我知道,在 中有布尔值bash,但我从未看到它们在任何地方使用。
我想为我的机器上一些经常查找的信息编写一个包装器,例如,这个特定的 USB 驱动器是否已插入/安装。
实现这一目标的最佳实践是什么?
一个字符串?
drive_xyz_available=true
Run Code Online (Sandbox Code Playgroud)一个数字(0 表示真,?0 表示假)?
drive_xyz_available=0 # evaluates to true
Run Code Online (Sandbox Code Playgroud)一个函数?
drive_xyz_available() {
if available_magic; then
return 0
else
return 1
fi
}
Run Code Online (Sandbox Code Playgroud)我主要想知道,想要使用包装器的其他人会期望什么。他们会期望一个布尔值,一个像变量这样的命令还是一个要调用的函数?
从安全的角度来看,我认为第二种选择是最安全的,但我很想听听您的经验。
我知道,如果有彩色终端可用,则可以使用转义字符为其输出着色。
但是有没有可能找出输出当前显示为哪种颜色?或者更好的是,如果我现在输出它,文本会是什么颜色?
我要求在使用这些转义字符时不要破坏任何以前的颜色设置。“默认前景色”转义字符是从配色方案中获取它的信息,而不是我更改它之前的文本颜色。
在修补 Linux VM 时,我经常遇到内核恐慌,这会用我不理解的东西推高所有有用的输出,这可能对我没有帮助。
恐慌主要发生在initramfs阶段。我正在使用VirtualBox.
正常的Shift+Pg Up不起作用(就我而言)。
有没有另一种方法可以向上滚动并查看之前任何内容的输出?
使用 Linux 多年,发现自己有一些空闲时间,我决定重新审视一些基础知识。因此,我重新阅读了有关权限的内容(不检查源代码)及其文件夹的特殊情况,并提出了一种新的(至少对我而言......)考虑文件夹权限的方式(对于特定用户/ group/others):我将文件夹想象为一个包含两列的表格,如下所示:
filename | inode
foo | 111
bar | 222
Run Code Online (Sandbox Code Playgroud)
在读权限意味着可以阅读(列表)表的左栏中,写入权限对应于添加和删除条目表,和执行权限对应于能够从文件名到inode的转换; 即您可以访问文件夹的内容。
我做了一些实验,结果都符合我的这个“世界观”,但一个结论似乎是不可避免的:一个有权限的文件夹d-w-------,完全没用。详细说明:您无法列出其内容,您无法读取您知道其中存在的任何文件(因为您无法将名称翻译成 inode),您无法删除或重命名或添加文件,因为这又意味着翻译,你甚至不能添加硬链接(因为,我推测,这意味着添加一个名称和一个 inode 编号,这意味着你会知道两者,反过来,再次猜测,违反了取消设置执行权限的目的) . 当然,如果有是内部的一个这样的文件夹的文件,那么你就不能删除该文件夹或者,因为你不能删除其内容。
所以……我想问两个问题:
我的代码看起来像这样:
VAR=""
while [ -z "$VAR" ]; do
VAR=$( command | grep "important_string" )
done
Run Code Online (Sandbox Code Playgroud)
所以我想轮询 , 的输出command,直到important_string出现并放入$VAR.
有没有之间的功能差异[ -z "$VAR" ]和[ "$VAR" = "" ]?
让我惊讶的是,没有任何搜索让我想到这样一个简单的问题。我想要的只是获取用户和用户组的列表(无论第二件事实际上是什么)。
我发现了许多有关创建或删除用户帐户的资源,但听起来每个人都牢记系统上的所有帐户。我想不是那样的。
那么我如何列出他们,他们的权限以及如何列出组?
shell-script ×4
busybox ×1
colors ×1
console ×1
debian ×1
dhcp ×1
directory ×1
exit ×1
kernel-panic ×1
networking ×1
numeric-data ×1
permissions ×1
pwd ×1
resolvconf ×1
scripting ×1
shell ×1
subshell ×1
terminal ×1
udhcpc ×1
users ×1