标签: ksh

我如何在 bash 或 ksh 中睡眠一毫秒

sleep 是一个非常流行的命令,我们可以从 1 秒开始睡眠:

# wait one second please 
sleep 1
Run Code Online (Sandbox Code Playgroud)

但是如果我只需要等待 0.1 秒或在 0.1 到 1 秒之间,还有什么选择?

  • 备注:在 linux 或 OS X 上sleep 0.XXX工作正常,但在 solarissleep 0.1sleep 0.01- 非法语法上

linux solaris bash ksh shell-scripting

163
推荐指数
6
解决办法
36万
查看次数

如何在不管道 stdout 的情况下管道 stderr

如何在不通过管道传输标准输出流的情况下传输标准错误流?

我知道这个命令有效,但它也会写出标准。

Command 2>&1 | tee -a $LOG
Run Code Online (Sandbox Code Playgroud)

我如何得到标准错误?

注意:我想要的是将 stderr 流写入日志并将 stderr 和 stdout 写入控制台。

unix ksh pipe stderr

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

路径中的可执行文件,可以通过它找到,但如果没有完全限定的路径就无法执行?

我有一个看起来很奇怪的 shell 问题,在 $PATH 中有一个命令,shell(ksh,在 Linux 上运行)似乎怯懦地拒绝调用。没有完全限定命令,我得到:

#  mycommand
/bin/ksh: mycommand: not found [No such file or directory]
Run Code Online (Sandbox Code Playgroud)

但是可以通过以下方式找到该文件:

#  which mycommand
/home/me/mydir/admbin/mycommand
Run Code Online (Sandbox Code Playgroud)

我还在 $PATH 中明确看到该目录:

#  echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin
Run Code Online (Sandbox Code Playgroud)

该位置的exe似乎正常:

#  file /home/me/mydir/admbin/mycommand
/home/me/mydir/admbin/mycommand: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped

# ls -l mycommand  
-r-sr-s--- 1 me mygroup 97892 2012-04-11 18:01 mycommand
Run Code Online (Sandbox Code Playgroud)

如果我使用完全限定的路径显式运行它:

#  /home/me/mydir/admbin/mycommand
Run Code Online (Sandbox Code Playgroud)

我看到了预期的输出。这里肯定有一些东西让 shell 感到困惑,但我不知道它可能是什么? …

linux ksh

12
推荐指数
1
解决办法
7141
查看次数

linux + 如何识别文件是否由链接指向

我创建名为 - 192.9.200.1 的新文件

    touch 192.9.200.1
Run Code Online (Sandbox Code Playgroud)

然后我创建一个指向 192.9.200.1 文件的新链接

    ln -s 192.9.200.1 file
Run Code Online (Sandbox Code Playgroud)

所以最后我得到:

     ls -ltr /tmp

    -rw-r--r--  1 root root        0 May  8 19:39 192.9.200.1
    lrwxrwxrwx  1 root root       11 May  8 19:39 file -> 192.9.200.1
Run Code Online (Sandbox Code Playgroud)

但是当我对 192.9.200.1 文件执行ls -ltr时,我看不到其他链接是否指向 192.9.200.1

     ls -ltr 192.9.200.1
      -rw-r--r-- 1 root root 0 May  8 19:39 192.9.200.1
Run Code Online (Sandbox Code Playgroud)

识别文件或目录是否有链接的方法是什么,

  • 备注我不想在 /tmp 目录下执行 ls -ltr来查找链接!

linux solaris ksh shell-scripting

6
推荐指数
1
解决办法
5273
查看次数

使用 ksh 主页、结束、删除、翻页、向下翻页

我想在 ksh 中使用 home、end、delete、pageup、pagedown。我的术语是 xterm-color。这些键适用于 tcsh 和 zsh,但不适用于 ksh(打印 tilda ~)

我找到了这个:

bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward
bind '^[[1'=prefix-2
bind '^[[1~'=beginning-of-line
bind '^[[4'=prefix-2
bind '^[[4~'=end-of-line
Run Code Online (Sandbox Code Playgroud)

但是当我设置一个绑定键时,最后一个不再起作用。

如何在带有 .kshrc 的 ksh 中使用这些密钥?

谢谢。

shell openbsd ksh

5
推荐指数
0
解决办法
1354
查看次数

如何让 Linux 用户更熟悉 Solaris shell?

我多年来一直是 linux 用户。非常习惯于 bash shell,习惯于大多数主流发行版附带的 linux shell 键映射。我也是linux 中的快乐vim用户,并且喜欢我的箭头键。

刚刚开始一项工作,其中 90% 的系统是 solaris,管理员的默认 shell 是 ksh。键映射,诸如自动完成和历史记录之类的东西没有按照他们应该的方式工作,并且让我发疯。

如何在solaris中获得以下工作:

  • 箭头键在 shell 中工作,就像他们在 bash 中所做的那样,比如 RHEL、ubuntu。这意味着使用箭头键滚动浏览我的历史记录或编辑我当前的命令行

  • 选项卡完成工作,以便我可以使用选项卡完成文件名/目录路径,或者如果有多个匹配项,则向我显示匹配项。

  • Vim 以它们在 linux 中的方式工作,所以当我使用箭头键时,我不会得到 ABCD。我希望它使光标移动。

linux solaris shell bash ksh

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

期望+如何确定是否因为超时而期望中断?

以下简单期望脚本的目标是获取远程机器上的主机

有时期望脚本无法对 $IP_ADDRESS 执行 ssh(因为远程机器不活动等)

所以在这种情况下,expect 脚本将在 10 秒后中断(超时 10),这没问题,但是......

有两种选择

  1. Expect脚本成功执行ssh,并在远程机器上执行了命令hostname
  2. 预计脚本中断,因为超时为 10 秒

在这两种情况下,expect 都会退出

  • 如果 ssh 成功,预计会在 0.5-1 秒后中断,但如果 ssh 不好,则会在 10 秒后中断

但我不知道expect脚本是否成功执行ssh?

是否可以识别超时过程?或验证期望因超时而结束?

备注我的 Linux 机器版本 - red-hat 5.1

期待脚本

 [TestLinux]# get_host_name_on_remote_machine=`cat << EOF
  > set timeout 10
  > spawn  ssh   $IP_ADDRESS
  >            expect {
  >                      ")?"   { send "yes\r"  ; exp_continue  }
  > 
  >                      word:  {send $PASS\r}
  >                   }
  > expect >  {send "hostname\r"}
  > expect >    {send exit\r}
  > expect eof …
Run Code Online (Sandbox Code Playgroud)

linux ksh tcl expect shell-scripting

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

如何识别古老的 KornShell 版本?

我们有一个人退休了,留下的文件有点轻描淡写。需要一点帮助来识别和使用旧的客户端-服务器系统。

服务器本身由几位优秀的 Unix 管理员维护。我们目前在服务器端运行 AIX 7.1.0.0。

然而,当我们使用专有的 SSH 客户端登录时,我们会看到一个看起来很熟悉但在其他方面很奇怪的 shell。外壳本身似乎是 KornShell:

echo $0
-ksh
Run Code Online (Sandbox Code Playgroud)

但是外壳不响应正常的外壳命令(无法向上/向下点击以调用最近的命令,无法正常退格,无法使用制表符自动完成等)

使用最近的命令调用 ESC + k

如果ESC键被敲击,则终端停止响应于输入,直到ias,或cc被压(或k,如已经提到带来了最近的命令)。

要编辑调用的命令,我们必须点击 SHIFT + UP

Backspace 实际上是RIGHT箭头,要清除输入的命令,我们必须点击SHIFT + RIGHT

whence命令不可用,并且此页面上发现 KSH 版本的技术均无效。

我们办公室有人建议这是某种内联vi

其他人有什么建议吗?有没有可用的文档?

ibm shell ksh aix unix-shell

4
推荐指数
1
解决办法
5186
查看次数

防止 Linux 中的 bash(和 ksh)历史更改

从表面上看,修复 ksh 以使历史更改不可能是相当容易的。我已经看到了将 HIST* 环境变量设置为只读的所有建议,以及使用 chattr 将历史文件设置为仅附加(使用 chattr +a .sh_history)的所有建议。

然而,Bash 有两件事似乎无法阻止历史更改:历史命令(带有 history -c 和 history -d)和将历史文件与实际运行时历史分开(保存在内存中) . 我还在 serverfault 上读到,如果您杀死当前的 shell,则不会写出历史记录。

有没有办法防止 Bash 的历史更改?我希望能够保存所有用户命令,而用户无法从历史记录中删除任何内容。

也欢迎任何有关 Korn shell 的提示。(我知道ksh-93审计...不知道我们是否可以使用它。)

linux shell bash history ksh

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

rm + 如何删除带有特殊字符的文件

我的 linux 机器中有这个文件:

 ----------9976723563nneh4_-----192.9.200.4
Run Code Online (Sandbox Code Playgroud)

我尝试删除这个文件,但我不能在这里看到:

需要向 rm 添加什么才能删除此文件?

rm "----------9976723563nneh4_-----192.9.200.4"
rm: illegal option -- --------9976723563nneh4_-----192.9.200.4
usage: rm [-fiRr] file ...
Run Code Online (Sandbox Code Playgroud)

.

rm '----------9976723563nneh4_-----192.9.200.4'
rm: illegal option -- --------9976723563nneh4_-----192.9.200.4
usage: rm [-fiRr] file ...
Run Code Online (Sandbox Code Playgroud)

linux ksh rm

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

标签 统计

ksh ×10

linux ×7

shell ×4

bash ×3

shell-scripting ×3

solaris ×3

aix ×1

expect ×1

history ×1

ibm ×1

openbsd ×1

pipe ×1

rm ×1

stderr ×1

tcl ×1

unix ×1

unix-shell ×1