我正在尝试使用 printf 在 bash 脚本中格式化一些漂亮的输出
例如:
-----------------------
| This is some output |
-----------------------
Run Code Online (Sandbox Code Playgroud)
但我偶然发现了一些我不明白的行为。
$ printf "--"
Run Code Online (Sandbox Code Playgroud)
给我错误:
printf: 用法: printf [-v var] 格式 [参数]
和
$ printf "-stuff"
Run Code Online (Sandbox Code Playgroud)
结果是
-bash: printf: -s: 无效选项
所以显然 printf 认为我试图传递一些参数,而我不是。
同时,完全出于偶然,我找到了这个解决方法:
-----------------------
| This is some output |
-----------------------
Run Code Online (Sandbox Code Playgroud)
给我
--- this works now ----
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?
我有一个包含数千个文件的目录。如何将 100 个文件(任何文件都可以)移动到另一个位置。
debian_chroot我的.bashrc文件中的变量是什么?它在这里做什么?
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud) 当我查询 NTP 守护进程的状态时,ntpdc -c sysinfo我得到以下输出:
system peer: 0.0.0.0
system peer mode: unspec
leap indicator: 11
stratum: 16
precision: -20
root distance: 0.00000 s
root dispersion: 12.77106 s
reference ID: [73.78.73.84]
reference time: 00000000.00000000 Thu, Feb 7 2036 7:28:16.000
system flags: auth monitor ntp kernel stats
jitter: 0.000000 s
stability: 0.000 ppm
broadcastdelay: 0.000000 s
authdelay: 0.000000 s
Run Code Online (Sandbox Code Playgroud)
这表示 NTP 同步失败。但是系统时间精确到 1 秒精度。当我在没有网络连接的情况下运行我的系统时,系统时间会偏离大约 10 秒。
这种行为表明系统有另一种同步时间的方式。我意识到还有systemd-timesyncd.service(配置文件位于/etc/systemd/timesyncd.conf)并timedatectl status给了我正确的时间:
Local time: Thu 2016-08-25 10:55:23 CEST …Run Code Online (Sandbox Code Playgroud) 我试图让每个 grep 命令以不同的颜色突出显示其结果。我可以用这样的一行手动完成:
ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f
Run Code Online (Sandbox Code Playgroud)

每个c字符将以绿色突出显示,每个o字符将以红色突出显示,等等......
要使此示例正常工作,您需要确保始终使用
--color=alwaysgrep 命令。我已经在我的.bashrc所以 grep 中设置了它总是有颜色:
export GREP_OPTIONS='--color=always'
我试图完成的是用别名包装这个功能,所以我每次grep都可以调用并拥有不同的GREP_COLORS值。我理解为每个新的管道 grep 考虑多个 shell,我试图通过创建一些文件(每种颜色一个)来解决这个问题,以表明它们已经被使用。
我做了一些尝试,但奇怪的是,这个似乎是“最好的”。我有这个.bashrc:
alias mg="mygrep"
mygrep(){
# define possible colors
COLORS=("01;32" "01;31" "01;34" "01;36")
COUNTER=0
NUM=0
# as long as the color has already been used, keep searching
while [ -f /home/lior/Desktop/mygrep_$NUM ]; do
# get a …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试遵循Hardening Debian for the Desktop Using Grsecurity指南,以便在我的 Kali Linux 桌面上安装带有 Grsecurity 的 4.5.7 内核。
我正在逐字跟踪该指令列表,除了我尝试将 Grsecurity 的测试补丁用于 4.5.7 内核并且我正在运行 Kali Linux 而不是直接的 Debian。
但是,每次我尝试编译内核时,都会在“CC certs/system_keyring.o”行之后收到此错误:
CC certs/system_keyring.o
make[2]: *** No rule to make target 'debian/certs/benh@debian.org.cert.pem', needed by 'certs/x509_certificate_list'. Stop.
Makefile:951: recipe for target 'certs' failed
make[1]: *** [certs] Error 2
make[1]: Leaving directory '/home/jc/Downloads/linux-4.5.7'
debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
make: *** [debian/stamp/build/kernel] Error 2
Run Code Online (Sandbox Code Playgroud)
正如我发现的那样,对于任何内核,即使我没有应用补丁或修改,我也会收到此错误,因此它与我用来编译内核的工具(显然是某种系统钥匙串)有关。有人可以告诉我如何修复我的操作系统并编译我的内核吗?
PS这是输出cat /proc/version:
Linux version 4.6.0-kali1-amd64 (devel@kali.org) (gcc version …Run Code Online (Sandbox Code Playgroud) 似乎有各种 JavaScript + 浏览器特定的解压缩方法,但是没有某种方法可以将 jsonlz4 文件转换为unlz4可以读取的内容吗?
Given a string composed of 0s and 1s, my goal is to replace 0 by 1 and vice-versa. Example:
Input
111111100000000000000
Run Code Online (Sandbox Code Playgroud)
Intended output
000000011111111111111
Run Code Online (Sandbox Code Playgroud)
I tried, unsuccessfully, the following sed command
echo '111111100000000000000' | sed -e 's/0/1/g ; s/1/0/g'
000000000000000000000
Run Code Online (Sandbox Code Playgroud)
What am I missing?
在如何将 HEREDOC 文本带入 shell 脚本变量中?有人报告了一个问题,使用here 文档在$(...)命令替换内使用带引号的分隔符,其中\文档内行尾的反斜杠触发换行符连接行继续,而命令替换外的相同 here 文档按预期工作。
这是一个简化的示例文档:
cat <<'EOT'
abc ` def
ghi \
jkl
EOT
Run Code Online (Sandbox Code Playgroud)
这包括一行末尾的一个反引号和一个反斜杠。分隔符被引用,因此正文内部不会发生扩展。在所有 Bourne-alikes 中,我可以找到逐字输出内容。如果我将相同的文档放在命令替换中,如下所示:
x=$(cat <<'EOT'
abc ` def
ghi \
jkl
EOT
)
echo "$x"
Run Code Online (Sandbox Code Playgroud)
那么它们的行为不再相同:
dash、ash、zsh、ksh93、 BusyBox ash、mksh和 SunOS 5.10 POSIXsh都像以前一样给出了文档的逐字内容。--posix选项不影响此。Kusalananda告诉我(谢谢!)它的pdksh行为方式相同。在最初的问题中,我说这是 Bash …
在 Unix (Solaris) 中是否有任何命令可以同时返回主机名和域名?
例如:
hostname -> servername
domainname -> us.xyz.com
Run Code Online (Sandbox Code Playgroud)
我需要 : servername.us.xyz.com
bash ×3
debian ×2
compiling ×1
compression ×1
domain ×1
files ×1
firefox ×1
grep ×1
grsecurity ×1
hostname ×1
json ×1
kali-linux ×1
linux-kernel ×1
lz4 ×1
mv ×1
ntp ×1
ntpd ×1
performance ×1
pipe ×1
posix ×1
printf ×1
sed ×1
shell ×1
shell-script ×1
solaris ×1
ubuntu ×1