有没有办法让 root shell(例如 in gnome-terminal)“超时”,以便在一段时间后不发出任何命令,shell 退出?
我正在寻找适用bash于 Fedora 和kshOpenBSD的解决方案。
**注意:我在 SuperUser 上问了同样的问题,但没有得到任何回应。我现在意识到这是一个更适合这个特定问题的论坛。*
在 ksh shell 中,Delete 键在命令行上无法正常工作。当我按 Delete 时,我得到一个 ~ 。
我如何能:
最终(?)更新
我偶然发现了一些有效的东西,但我不明白为什么。这有效:
bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward
Run Code Online (Sandbox Code Playgroud)
根据http://www.qnx.com/developers/docs/6.3.2/neutrino/utilities/k/ksh.html#bind,
prefix-2
Key binding: ^X, ^[[
Introduces a 2-character command sequence.
Run Code Online (Sandbox Code Playgroud)
所以我更新的问题是为什么我需要使用prefix-2它?请帮我翻译,这样我就可以理解了,这样我就不必再为这件事烦扰大家了。
旧的东西如下
更新
事实证明,QNX 中的 ESC 是^[. 使用该命令,bind '^[[3~'='delete-char-backward'我可以让光标用~. 这至少是一些进步——我现在知道如何为 shell拼写Delete Key。我在网上看到的大多数东西都说删除键是^?,但这似乎对我不起作用。另外,我应该提到我正在通过 PuTTy …
一个普通的 tar 命令
tar cvf foo.tar ./foo >foo.out 2>foo.err
Run Code Online (Sandbox Code Playgroud)
具有三个输出 IO 流
然后我可以检查 foo.err 是否有错误消息,而无需通读文件名列表。
如果我想对存档数据做一些事情(通过 netcat 或特殊压缩程序进行管道传输),我可以使用 tar 的 -f -选项
tar cvf - ./foo 2>foo.err | squish > foo.tar.S
Run Code Online (Sandbox Code Playgroud)
但是现在我的文件名列表与我的错误消息混合在一起,因为 tar 的-v输出显然不能进入 STDOUT(这是存档数据流动的地方),所以 tar 巧妙地将其写入 STDERR。
使用 Korn shell,有没有一种方法可以构造一个命令,将归档流通过管道传输到另一个命令,但仍能将-v输出与任何错误消息分开捕获。
如何从 ksh 脚本中安全地获取 ksh 版本?
我已经看到以下解决方案:
ksh --versionecho ${.sh.version}echo $KSH_VERSION并且在适当的情况下,每一个都可以正常工作。但是,我关心不完美的情况。
具体来说,我使用的几台机器都有旧版本的 ksh,就我而言,这些机器严重缺乏功能。无论如何,我想(以编程方式)检查版本的原因是查看 ksh 版本是否是功能较弱的版本之一;如果是这样,我想用不那么棒的代码执行一个分支。
然而,在有问题的机器上,shell 的无能扩展到检查版本......
ksh --version,它不会打印任何内容并打开ksh!如果我尝试echo ${.sh.version},ksh则将其视为不能用2> /dev/null.
$ echo ${.sh.version} 2> /dev/null
ksh: ${.sh.version}: bad substitution
Run Code Online (Sandbox Code Playgroud)当然echo $KSH_VERSION看起来工作正常——我的意思是它不会崩溃——尽管在这些机器上它是空白的。另外,我看到的地方是KSH_VERSION只被设定pdksh。
问题:
ksh编程方式安全地检查版本?出于我的目的,我并不真正关心实际的版本号是什么,只关心它是否是ksh.$KSH_VERSION足够好?我的意思是如果它是空白的,那么ksh一定是过时的版本吗?其他论坛是否正确,即使对于较新版本的ksh.我写的脚本是ksh。需要在当前目录下直接找到所有只包含文件而不包含子目录的目录名。
我知道我可以使用ls -alR并递归解析第一个字段(d目录)中第一个字母的输出。我认为awk是解析和查找的最佳方式。
例如,ls -al当前目录中的简单输出:
drwxr-xr-x 22 af staff 748 18 Mar 22:21 .
drwxr-xr-x 5 root admin 170 17 Mar 18:03 ..
-rw------- 1 af staff 3 17 Mar 16:37 .CFUserTextEncoding
drwxr-xr-x 5 af staff 170 17 Mar 17:12 Public
drwxr-xr-x 9 af staff 306 18 Mar 17:40 Sites
-rw------- 1 af staff 3 17 Mar 16:37 textd
…
Run Code Online (Sandbox Code Playgroud)
此输出中有 2 个目录:Public和Sites. 该目录Public不包含子目录,但包含Sites。中有 …
我想根据大小对特定目录中的所有目录/文件进行排序(使用du -sh "name")。
我需要将此命令应用于我所在位置的所有目录,然后根据此结果对它们进行排序。我怎样才能做到这一点 ?
给定的
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
Run Code Online (Sandbox Code Playgroud)
贝壳往往需要制作 2 个叉子才能实现
strace-f(){ strace -f "$@" 2>&1; };
for sh in dash bash zsh ksh; do
printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c;
done
Run Code Online (Sandbox Code Playgroud)
除了ksh英勇地使它没有分叉一次:
dash 2
bash 2
zsh 2
ksh 0
Run Code Online (Sandbox Code Playgroud)
它是如何做到的?
编辑:
下面是它如何随着一个管道的插入而下降:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Run Code Online (Sandbox Code Playgroud)
输出:
dash 11
bash 10
zsh 5
ksh 3
Run Code Online (Sandbox Code Playgroud) 考虑到父程序(可以是 C++ 程序或 Shell 脚本)执行子 Shell 脚本的场景,当我们在执行子 Shell 脚本时点击 Control+C(或任何配置为 INTR 字符的字符), SIGINT 被发送到前台进程组中的所有进程。这包括父进程。
来源:POSIX.1-2008 XBD 第 11.1.9 节
有没有办法覆盖这个默认行为?CHILD 进程单独处理信号而不将其传播给父进程?
假设我有一个具有以下格式的 csv 文件列表:
INT_V1_<Product>_<ID>_<Name>_<ddmmyy>.csv
ASG_B1_V1_<Product>_<ID>_<Name>_<ddmmyy>.csv
Run Code Online (Sandbox Code Playgroud)
该INT_V1_&ASG_B1_V1_是固定的,这意味着所有的CSV文件,开始使用它。
如何将文件名拆分为变量?
例如,我想捕获Name并将其分配给一个变量$Name。
我想在两个文件中搜索多个字符串。如果在两个文件中都找到一个字符串,则做一些事情。如果只在一个文件中找到一个字符串,那么做另一件事。
我的命令是下一个:
####This is for the affirmative sentence in both files
if grep -qw "$users" "$file1" && grep -qw "$users" "$file2"; then
####This is for the affirmative sentence in only one file, and negative for the other one
if grep -qw "$users" "$file1" ! grep -qw "$users" "$file2"; then
Run Code Online (Sandbox Code Playgroud)
否定和肯定这些陈述的方式是否正确?pd 我正在使用 KSH 外壳。
先感谢您。
ksh ×10
bash ×2
shell ×2
shell-script ×2
aix ×1
awk ×1
directory ×1
disk-usage ×1
find ×1
fork ×1
grep ×1
io ×1
ls ×1
optimization ×1
portability ×1
signals ×1
sort ×1
tar ×1
trap ×1
version ×1