几个月前,我编写了一组 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中,我运行了以下命令: …
在一个目录中,我有以下文件:
myfile_v01.txt
myfile_v02.txt
myfile_v03.txt
Run Code Online (Sandbox Code Playgroud)
如何制作一个 bash 脚本来检测最后一个版本的值并将最后一个版本的文件名放入一个变量中?
我知道这个问题听起来之前要讨论过数千次。但不知何故我找不到好的解决方案。
问题:我需要从 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)。
我将开始接收许多大型 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 上。
我想以一种可以登录远程主机的方式配置我的 PuTTY 会话,并且 (a) 启动 bash (b) 更改 PS1 变量(提示内容)(c) 继续在会话中正常工作。
我试过:
有任何想法吗?我在论坛上看过一些类似的问题,但没有发现任何有用的东西。
更一般地说:我登录到许多用户以单个用户身份登录的主机,因此他们都共享单个用户的“设置”。我正在寻找一种强制 PuTTY 临时更改其中一些设置的方法(即,它们将被时间限制为我使用 PuTTY 打开的会话)。在会话中运行个人版本的 .bashrc。希望这是有道理的。
在玩弄文件系统时,我尝试了以下操作:
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 中的某些特殊硬编码行为?
我有一些当前已被 gzip 压缩的大文件,我想对它们进行 xz。我想设置一个脚本来执行此操作,但我要小心不要丢失数据,即我永远不应该删除 gzipped 版本,除非 xz 版本确实创建正确。由于这些是大文件,我也不想先将文件解压缩到磁盘。我在想一个管道set -o pipefail; gzip -dc file.gz | xz > file.xz && rm file.gz可能接近我想要的。这样做的正确方法是什么?这是否保证可以捕获在删除最终文件之前发生的任何故障?
这是 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)
似乎cp和ln在 OS X 中不区分大小写。在我尝试创建一个符号链接作为大写文件夹到小写名称之前,我从未注意到这一点。
在 Linux 上我从未见过这样的问题。
sed至少可以说对我来说是陌生的。我想遍历一个 C 项目树并注释掉调用函数的每一行LogMsg()。可以实现以下目标的东西:
foreach: line within *.c
if: line contains "LogMsg"
prepend "//"
Run Code Online (Sandbox Code Playgroud)
或者。另外,我想看看我是否可以实现相反的目标,尽管我认为这可能会更困难。
我觉得这sed是完成这项工作的合适工具,但我不是批处理文本文件编辑方面的专家。有什么帮助吗?
我的 bashrc 中有一些程序的别名。
一个例子是:alias chrome='google-chrome --disk-cache-size=1000000000'
如何从运行提示 (modkey+r) 调用此别名?
我正在运行 linux mint