标签: bash

“ulimit -Su”是否限制在交互式登录子shell和其中创建的tmux会话中创建的用户进程数?

几个月前,我编写了一组 bash 脚本,使用 tmux 在 AIX 7.1 服务器上创建一个简单的 IDE。我的一个脚本中存在一个错误,有时会非常快速地生成用户进程,直至达到 ulimit 设置的限制。这种情况很少发生(大约每月一次),而且我已经花了几个小时来追踪这个错误,但没有成功,所以我决定暂时,我可以简单地将我的软用户进程限制设置为低于硬限制(例如 100 而不是 1024),这样当我的错误再次出现时,服务器上的其他用户不会有明显的性能下降。不幸的是,“ulimit -Su 100”似乎在 AIX 7.1 上的 bash 中不起作用,但它在 ksh 中起作用。我已经执行了以下解决方法:

使 ksh 成为默认 shell:

$ chsh [username] /usr/bin/ksh
Run Code Online (Sandbox Code Playgroud)

将以下内容写入 ~/.kshrc:

ulimit -Su 100  # works in ksh, but not in bash
/bin/bash -il   # start bash as an interactive login shell
exit            # once bash exits, exit from ksh, too
Run Code Online (Sandbox Code Playgroud)

所以现在,每次我创建一个 shell 时,ksh 都会设置软用户进程限制并启动 bash 作为一个交互式登录 shell(我仍然希望 ~/.bash_profile 获得来源)。现在我想知道,在 ksh 中设置的用户进程限制是否仍然会在 bash 子 shell 中强制执行?在顶级 bash 子shell中,我运行了以下命令: …

bash ksh process tmux ulimit

5
推荐指数
1
解决办法
2718
查看次数

在bash中获取变量中的最后一个文件名?

在一个目录中,我有以下文件:

myfile_v01.txt
myfile_v02.txt
myfile_v03.txt
Run Code Online (Sandbox Code Playgroud)

如何制作一个 bash 脚本来检测最后一个版本的值并将最后一个版本的文件名放入一个变量中?

bash ls

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

Shell:如何在不转义特殊符号的情况下编写多行文本文件?

我知道这个问题听起来之前要讨论过数千次。但不知何故我找不到好的解决方案。

问题:我需要从 shell 编写多行文本。文本可能包含特殊字符序列(从 $ 开始),我不想转义它们。这该怎么做?

目前我正在使用猫:

cat <<TAGTEXTFILE > sometext.txt
Here is some text in which I don't want to escape sequences like: $().
I just want to see this text in this script exactly as 
it will look in resulting sometext.txt file.
TAGTEXTFILE
Run Code Online (Sandbox Code Playgroud)

但是有了 cat 我必须逃避这个:$()。如何在不转义特殊字符的情况下编写多行文本?请不要提议使用 Python,我需要 shell 解决方案(bash 或 dash)。

bash shell

5
推荐指数
1
解决办法
4005
查看次数

在 LibreOffice Calc 中仅打开大型 CSV 文件的前 10 行

我将开始接收许多大型 CSV 文件,其中只有前几行是我感兴趣的。我希望通过只将前几行管道输送到 Calc 来打开它们,但这不起作用

$ libreoffice4.1 --calc <(head large_file.csv)
Run Code Online (Sandbox Code Playgroud)

尝试此操作后,我收到一个弹出窗口:

/dev/fd/63 不存在。

有没有什么简单的方法可以只打开前几行而不创建新的(临时)文件?这是在带有 LibreOffice 4.1 的 Kubuntu Linux 12.10 上。

linux bash csv libreoffice libreoffice-calc

5
推荐指数
1
解决办法
1600
查看次数

Putty:登录,执行命令/更改环境变量,不关闭会话

我想以一种可以登录远程主机的方式配置我的 PuTTY 会话,并且 (a) 启动 bash (b) 更改 PS1 变量(提示内容)(c) 继续在会话中正常工作。

我试过:

  1. 连接 -> 数据 -> 环境变量【不起作用;会话看起来好像 (b) 没有被执行]
  2. 连接 -> SSH -> 远程命令:PS1="some stuff" [会话窗口打开几分之一秒,然后关闭]

有任何想法吗?我在论坛上看过一些类似的问题,但没有发现任何有用的东西。

更一般地说:我登录到许多用户以单个用户身份登录的主机,因此他们都共享单个用户的“设置”。我正在寻找一种强制 PuTTY 临时更改其中一些设置的方法(即,它们将被时间限制为我使用 PuTTY 打开的会话)。在会话中运行个人版本的 .bashrc。希望这是有道理的。

ssh bash command-line putty solaris

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

删除“。” 站在上面的时候

在玩弄文件系统时,我尝试了以下操作:

mkdir a
cd a
rmdir .
Run Code Online (Sandbox Code Playgroud)

结果是:

rmdir: failed to remove ‘.’: Invalid argument
Run Code Online (Sandbox Code Playgroud)

好的,先生rmdir,让我智胜你:

rmdir ../a
Run Code Online (Sandbox Code Playgroud)

...好的。

什么?这次没有报错?

我还是终端说我在目录中a,但ls -a名单没有(没有.,也没有..),但ls ..pwd预期仍然工作。

我是不是像那些砍了自己的树枝还没有倒下的卡通人物之一?

如果我尝试

mkdir ../a
Run Code Online (Sandbox Code Playgroud)

它创建了一个目录a,但这仍然不是我所在的目录(ls -a .ls -a ../a显示不同的结果)。

如果我尝试用touch b它创建一个文件,它会回复:

touch: cannot touch ‘b’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是touch .有效。

最后,一旦我离开我的目录,它就会消失,我无法返回。

编辑:有人可以解释一下这里发生了什么吗?这种情况有名字吗?这是文件系统和 Bash 之间的问题,还是 Bash 中的某些特殊硬编码行为?

bash

5
推荐指数
1
解决办法
367
查看次数

如何安全地将 .gz 文件转换为 .xz 文件

我有一些当前已被 gzip 压缩的大文件,我想对它们进行 xz。我想设置一个脚本来执行此操作,但我要小心不要丢失数据,即我永远不应该删除 gzipped 版本,除非 xz 版本确实创建正确。由于这些是大文件,我也不想先将文件解压缩到磁盘。我在想一个管道set -o pipefail; gzip -dc file.gz | xz > file.xz && rm file.gz可能接近我想要的。这样做的正确方法是什么?这是否保证可以捕获在删除最终文件之前发生的任何故障?

bash gz xz

5
推荐指数
1
解决办法
4523
查看次数

OS X Mavericks (10.9) 上的 cp 命令是否区分大小写?

这是 OS X 中的错误还是我配置错误?

$ touch aaa
$ ls -l
total 0
-rw-r--r--  1 jchen  1366545133  0 Feb 16 16:08 aaa
$ cp aaa AAA
cp: AAA and aaa are identical (not copied).
$ ln -s aaa AAA
ln: AAA: File exists
$ env | grep SHELL
SHELL=/bin/bash
Run Code Online (Sandbox Code Playgroud)

似乎cpln在 OS X 中不区分大小写。在我尝试创建一个符号链接作为大写文件夹到小写名称之前,我从未注意到这一点。

在 Linux 上我从未见过这样的问题。

bash macos

5
推荐指数
1
解决办法
2795
查看次数

Linux/Bash:注释与模式匹配的每一行

sed至少可以说对我来说是陌生的。我想遍历一个 C 项目树并注释掉调用函数的每一行LogMsg()。可以实现以下目标的东西:

foreach: line within *.c
  if: line contains "LogMsg"
    prepend "//"
Run Code Online (Sandbox Code Playgroud)

或者。另外,我想看看我是否可以实现相反的目标,尽管我认为这可能会更困难。

我觉得这sed是完成这项工作的合适工具,但我不是批处理文本文件编辑方面的专家。有什么帮助吗?

linux bash sed c

5
推荐指数
1
解决办法
2347
查看次数

很棒的 WM:通过运行提示执行我的别名?

我的 bashrc 中有一些程序的别名。

一个例子是:alias chrome='google-chrome --disk-cache-size=1000000000'

如何从运行提示 (modkey+r) 调用此别名?

我正在运行 linux mint

bash awesome-wm environment-variables ubuntu

5
推荐指数
1
解决办法
2557
查看次数