小编Gre*_*hal的帖子

这是 Bash 手册重定向部分的拼写错误吗?

Note that the order of redirections is significant.  For example, the command

          ls > dirlist 2>&1

   directs both standard output and standard error to the file dirlist, 
   while the command

          ls 2>&1 > dirlist

   directs  only  the  standard  output  to  file  dirlist,  because the 
   standard error was duplicated from the standard output before the standard
   output was redirected to dirlist.
Run Code Online (Sandbox Code Playgroud)

现在,最后一部分让我感到困惑。在这种情况下,任何标准错误都会打印到终端,任何 STDOUT 都会转到 dirlist 文件。这就是会发生的事情,但这不是我理解手册的方式。

似乎应该说“因为在将标准输出重定向到 dirlist 之后,标准错误是从标准输出中复制出来的”。如果在将 STDOUT 定向到文件之前将 STDERR 发送到 STDOUT,那么该文件是否不包含 STDOUT 和 STDERR?

有人可以帮我解决这个问题吗?只是我的阅读理解能力差吗?在这种情况下,重复一词的使用对我来说似乎有点奇怪。也许那是扔我。

shell bash io-redirection

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

Linux:将 autofs 与 NFS 结合使用与仅使用 fstab 的区别

使用 auto.master 和让 autofs 自动挂载您的 NFS 挂载点与仅将信息放在 fstab 中有什么区别?Linux 红帽 5/6

nfs autofs fstab

13
推荐指数
2
解决办法
2万
查看次数

为进程设置更高的 nice 级别是否是减少其对系统负载/CPU 时间影响的有效方法?

我有一个 rsync cron 作业,它正在推动服务器负载并触发监视器警报。如果我将作业设置为以较高的 nice 级别运行,是否会有效减少它对系统负载值的影响?

cron io rsync load nice

11
推荐指数
3
解决办法
1万
查看次数

Crontab 仅针对 Root 的 crontab 中的一项特定作业更改 MAILTO

我是否可以执行以下操作来更改 root 的 crontab 中某个特定 crontab 作业的邮件发送位置(不要发送到 root 执行 Do something 作业,只需发送到 piglover):

# Make a hambone appear
* * * * * /scripts/hambone.pl

# Eat Ham
* * * * * /scripts/manga_ham.py

OLDMAILTO=$MAILTO

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=$OLDMAILTO
Run Code Online (Sandbox Code Playgroud)

cron email

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

使用原始用户名记录所有 root 活动,该用户名 su'd/sudoed to root

当 root 登录被禁用 (SSH) 但用户可以运行sudo -isu -成为 root时,跟踪谁在日志中充当 root 的首选方法是什么?我也想使用原始用户名执行每个命令。RHEL 6 或任何 Linux rsyslog 等。

root logs

11
推荐指数
2
解决办法
4万
查看次数

仅使用 bash 将单个字符串拆分为字符数组

我想只使用 bash拆分'hello'h e l l o一个数组,我可以在 sed 中做到这一点,sed 's/./& /g'但我想知道当我不知道分隔符是什么时,如何在 Bash 中将一个字符串拆分成一个数组,或者分隔符是任何单个字符。我不认为我可以在${i// /}没有一些创造力的情况下使用,因为分隔符是未知的,而且我认为该表达式不接受正则表达式。我尝试将 BASH_REMATCH 与 [[ string =~ ([az].).* ]] 一起使用,但它没有按我预期的那样工作。仅使用 bash 来完成某种string.split()行为的正确方法是什么?原因是我试图在所有 bash 中编写 rev 实用程序:

  while read data; do
  word=($(echo $data|tr ' ' '_'|sed 's/./& /g'))
  new=()
  i=$((${#word[@]} - 1))
  while [[ $i -ge 0 ]]; do
    new+=(${word[$i]})
    (( i-- ))
  done
  echo ${new[@]}|tr -d ' '|tr '_' ' '
  done
Run Code Online (Sandbox Code Playgroud)

但是我使用了 tr 和 sed,我想知道如何正确进行拆分,然后我会将其修复为所有 bash。只是为了好玩。

bash string split

10
推荐指数
2
解决办法
2万
查看次数

Bash 捕获任何类似 -e 的错误但不退出,执行其他操作

我想在 shell 脚本 (bash) 中设置一个标志,以便如果有任何返回非零值,则设置一个标志(即设置一个类似 的变量errors="True")。

到目前为止,我想过调用脚本,scriptname.sh 2>Error.log然后执行以下操作:

 if $(wc -l error.log) != 0; then
   errors="True"
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法。请赐教。

bash shell-script error-handling

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

在各种循环中附加到同一个数组,只有最后一个值仍然是 Bash 4

我有这样的事情:

FILES=()
for i in *.map
do
    FILES+=($i)
done

find /var/candy -name "chocolate_[0-9]" | while read snack
do
    FILES+=($snack)
done

for file in ../out/amsterdam/apples/{system.map,vmlinux}
do
    FILES+=($file)
done
Run Code Online (Sandbox Code Playgroud)

但数组最终只包含../out/amsterdam/apples/system.map../out/amsterdam/apples/vmlinux。其他值发生了什么变化?我知道它们存在于这些循环中,因为我回声以确保变量包含某些内容。

shell bash pipe variable

9
推荐指数
1
解决办法
2万
查看次数

线程与(分叉)进程

Linux 应用程序通常 fork 然后 exec(使用 execve() ),但 Java 应用程序和某些 Apache MPM 使用线程。如果fork,使用fork + exec来生成一个进程,线程的高级版本是什么?JVM 或 Worker MPM 如何产生线程?

process fork thread

9
推荐指数
2
解决办法
2万
查看次数

“bash 可执行文件”和“bash -c 可执行文件”之间的区别

我的理解是,bash -c file这与在交互式 bash shell 中并调用 是相同的意思file,其中的bash file意思是使用 bash 解释文件(就好像它是一个 shell 脚本)。这是准确的吗?这是否是您无法运行的bash <executable>原因,因为它会尝试将文件解释为 shell 脚本而不是派生和运行 exec 文件?

bash

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

标签 统计

bash ×5

cron ×2

shell ×2

autofs ×1

email ×1

error-handling ×1

fork ×1

fstab ×1

io ×1

io-redirection ×1

load ×1

logs ×1

nfs ×1

nice ×1

pipe ×1

process ×1

root ×1

rsync ×1

shell-script ×1

split ×1

string ×1

thread ×1

variable ×1