小编rah*_*hmu的帖子

格式化输出:下划线

我编写了以下函数,ksh将它的第一个参数打印到屏幕上,并用适当的-字符数量加下划线:

print_underlined () {
    word=$1 
    echo $word

    i=${#word}
    while [[ i -gt 0 ]]; do
        printf "-"
        (( i = $i - 1 ))
    done
    printf "\n"
}
Run Code Online (Sandbox Code Playgroud)

例子:

$ print_underlined foobar
foobar
------
$
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种更简单、更优雅的方式在屏幕上显示带下划线的单词。

为了记录我正在使用:

  • Solaris 10
  • ksh88

shell solaris ksh

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

那些 linux 发行版与我们使用的一般日常 linux 之间的主要区别是什么?

一方面,我有一般的日常 linux: Fedora/CentOS/ArchLinux/Ubuntu. 另一方面,我有以下几点:

  • 生态系统
  • 自由实时操作系统
  • 构建根
  • 实时监测系统
  • 开放式嵌入式
  • uCLinux

有没有人经常使用那些不常见的 linux 发行版,它们最适合哪里(服务器或桌面使用或不间断服务)?

它们与我们一般的 linux 完全不同吗?

distros linux distribution-choice

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

组织模式表:如何插入系统命令的结果?

在 Org 模式下,我想在字段中插入 Unix 命令的结果。例如,考虑我有下表:

| /        |
| /bin     |
| /usr/bin |
| /lib     |
| /usr/lib |
Run Code Online (Sandbox Code Playgroud)

我想插入第二列,例如

$2 = <result of `du -sh $1` >
Run Code Online (Sandbox Code Playgroud)

这可能吗?

emacs org-mode

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

在 Vim 中的多行上展开正则表达式

我正在从 C 源文件中删除注释。让我们关注多行注释/* ... */并忽略内联注释 (//)

以下命令似乎适用于 (solaris) sed:

s:/\*.*\*/::g
Run Code Online (Sandbox Code Playgroud)

然而,在 Vim (7.2) 中,它只有在整个注释都在一行时才有效。我怎样才能让它.*分布在多条线上?我试着做以下

s:/\*.*[\r]*.*\*/::g
Run Code Online (Sandbox Code Playgroud)

但它没有用...

vim regular-expression

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

Awk:检查字段长度

awk. 我正在 Solaris 10 上工作,所以它可能是awk. 我想出了这个基本的单行代码,至少对于我的特定输入是有效的。

awk -F\; '$3 ~ /[ ]*...............................*/' file.csv 
Run Code Online (Sandbox Code Playgroud)

分隔符周围可能有也可能没有空格,因此[ ]*是正则表达式的一部分。

想要避免打印 30 次点.字符,我尝试了以下操作:

awk -F\; '$3 ~ /[ ]*.\{30\}.*/{print $3}' file.csv
Run Code Online (Sandbox Code Playgroud)

这没有返回任何结果。如果它有任何帮助,我正在使用ksh88.

避免输入这 30 个连续点的最佳方法是什么?

awk regular-expression

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

Emacs:不同的用户,不同的主题,相同的初始化文件

我在工作中使用 emacs,我通常使用两个不同的用户连接到系统:

  • myuser
  • commonuser

前者是我自己的个人用户,而后者是整个团队共享来管理一个应用程序。(不相关的提示:这是一个糟糕的主意。通常有更好的方法,尽管不太明显,管理权限。从我的经验中吸取教训)。

为了避免不幸的混淆,我想为每个用户定义一个单独的主题,并在各自的 init 文件中定义它。

init 文件中定义的所有其他内容都必须由两者共享。

简单的解决方案

我创建了一个单独的 init 文件,/path/to/init/file/.emacs.emacs在每个用户的主目录中创建了以下文件:

(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力。但是,当然,那太容易了!

需要新的解决方案

有人问我,不修改.emacs的文件commonuser。我不会详细说明原因,但事实仍然是我必须找到解决方法。这是我到目前为止所得到的:

  1. 写了一个完整的~myuser/.emacs文件,无论用户如何,我都会加载它。
  2. commonuser这样定义了一个别名:

    alias emacs='emacs -Q --load ~myuser/.emacs'
    
    Run Code Online (Sandbox Code Playgroud)

这将使 emacs 忽略commonuserinit 文件和 load myuser

现在我的(简单)问题是:

如何根据启动它的用户使 emacs 表现不同?

我正在做类似的事情:

if [[ $(whoami) == "myuser" ]]; then 
      (load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then 
      (load-theme 'theme2)
Run Code Online (Sandbox Code Playgroud)

emacs

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

shell 支持递归吗?

我正在尝试在我的 shell 脚本中编写递归函数。考虑以下代码:

function printA {
    if [[ "$1" = 0 ]]; then
        return
    else
        echo "a$(printA $(("$1" - 1)))"
    fi
}

printA 10

function factorial {

    if [[ "$1" = 0 ]]; then
        return 1
    else
        return $(( "$1" * $(factorial $(( $1 - 1 )) ) ))
    fi
}

echo $(factorial 5)    
Run Code Online (Sandbox Code Playgroud)

代码失败:

  • bash (3.0)

recur.sh:第 5 行:“10”-1:语法错误:预期操作数(错误标记为“10”-1”)

一种

recur.sh:第 16 行:“1”*:语法错误:预期操作数(错误标记为“1”*“)

recur.sh:第 16 行:“2”*:语法错误:预期操作数(错误标记为“2”*“)

recur.sh:第 16 行:“3”*:语法错误:预期操作数(错误标记为“3”*“)

recur.sh:第 16 行:“4”*:语法错误:预期操作数(错误标记为“4”*“)

recur.sh:第 16 行:“5”*:语法错误:预期操作数(错误标记为“5”*“)

  • zsh (4.2.1)

printA:1: 错误的数学表达式:非法字符:" …

shell bash ksh zsh shell-script

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

什么发行版会为笔记本电脑使用更少的资源?

目前我有疑问:
我正在购买带有 4 gig 内存的新戴尔 Vostro 2520。问题是我是 Ruby/前 PHP 开发人员,可能需要处理相当大的项目。大概是同时。一种选择是升级内存,但我更喜欢了解可用的 Linux 发行版并选择更合适的发行版的想法。
最后,我的清单上有两个 Linux:

  • Linux 薄荷 Xfce
  • 徐邦图

你有什么建议?

linux laptop distribution-choice

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

如何在启动时启动 teampeak 3,ubuntu 服务器 12.04

所以我对linux很陌生,但我开始理解它。我有一个 Ubuntu Server 12.04 系统,全新安装,并在其上安装了 Teamspeak 3 服务器:

$ sudo useradd teamspeak
(provided user info and password)
$ su teamspeak
(entered password)
$ cd /home/teamspeak
$ wget http://ftp.4players.de/pub/hosted/ts3/releases/3.0.10.3/teamspeak3-server_linux-amd64-3.0.10.3.tar.gz
(download teamspeak.tar.gz)
$ tar -zxvf teamspeak3-server_linux-amd64-3.0.10.3.tar.gz
(unpacked the file to teamspeak3-server_linux-amd64)
$ mv teamspeak3-server_linux-amd64 server
(server is no located in /home/teamspeak/server)
$ cd ./server
$ ./ts3server_minimal_runscript.sh createinifile=1
(initialized the server)
$ ./ts3server_startscript.sh start
(started the server)
Run Code Online (Sandbox Code Playgroud)

现在,当我重新启动服务器(例如$ sudo reboot)时,服务器不会启动。显然是因为我没有配置任何东西,/etc/init.d但我不知道如何做到这一点。

我希望服务器像使用/home/teamspeak/server/ts3server_startscript.sh start脚本一样启动,由用户运行teamspeak

我遵循了几个指南,但他们没有用。有人能帮我吗?

ubuntu init.d

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

文件系统中的文件名

我有一个关于 Unix 文件系统的奇怪问题。为什么同一目录下的两个文件不能同名?

难道不能使用 ID 来区分具有相似名称的不同文件吗?

filesystems files

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