我编写了以下函数,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)
我想知道是否有一种更简单、更优雅的方式在屏幕上显示带下划线的单词。
为了记录我正在使用:
一方面,我有一般的日常 linux: Fedora/CentOS/ArchLinux/Ubuntu. 另一方面,我有以下几点:
有没有人经常使用那些不常见的 linux 发行版,它们最适合哪里(服务器或桌面使用或不间断服务)?
它们与我们一般的 linux 完全不同吗?
在 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)
这可能吗?
我正在从 C 源文件中删除注释。让我们关注多行注释/* ... */并忽略内联注释 (//)
以下命令似乎适用于 (solaris) sed:
s:/\*.*\*/::g
Run Code Online (Sandbox Code Playgroud)
然而,在 Vim (7.2) 中,它只有在整个注释都在一行时才有效。我怎样才能让它.*分布在多条线上?我试着做以下
s:/\*.*[\r]*.*\*/::g
Run Code Online (Sandbox Code Playgroud)
但它没有用...
在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 个连续点的最佳方法是什么?
我在工作中使用 emacs,我通常使用两个不同的用户连接到系统:
myusercommonuser前者是我自己的个人用户,而后者是整个团队共享来管理一个应用程序。(不相关的提示:这是一个糟糕的主意。通常有更好的方法,尽管不太明显,管理权限。从我的经验中吸取教训)。
为了避免不幸的混淆,我想为每个用户定义一个单独的主题,并在各自的 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。我不会详细说明原因,但事实仍然是我必须找到解决方法。这是我到目前为止所得到的:
~myuser/.emacs文件,无论用户如何,我都会加载它。为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) 我正在尝试在我的 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: 错误的数学表达式:非法字符:" …
目前我有疑问:
我正在购买带有 4 gig 内存的新戴尔 Vostro 2520。问题是我是 Ruby/前 PHP 开发人员,可能需要处理相当大的项目。大概是同时。一种选择是升级内存,但我更喜欢了解可用的 Linux 发行版并选择更合适的发行版的想法。
最后,我的清单上有两个 Linux:
你有什么建议?
所以我对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。
我遵循了几个指南,但他们没有用。有人能帮我吗?
我有一个关于 Unix 文件系统的奇怪问题。为什么同一目录下的两个文件不能同名?
难道不能使用 ID 来区分具有相似名称的不同文件吗?