我想在 diff 的输出中获得正确的行数(特别是使用-y
和--suppress-common-lines
选项)。使用简单的wc -l
做不工作,因为如果这两个文件没有结束换行符和他们的最后一行是不同的wc -l
将不计入最后一行。
有没有简单有效的解决方案来避免这种情况?
例如,如果您有文件“a”:
a
b
c
d #no newline here
Run Code Online (Sandbox Code Playgroud)
和“b”:
a
b
c
D #no newline here
Run Code Online (Sandbox Code Playgroud)
输出是:
$ diff -y --suppress-common-lines a b | wc -l
0
Run Code Online (Sandbox Code Playgroud)
这显然是不正确的,因为diff
确实输出了一行。
我正在编写一个脚本,我发现了一些我不理解的未初始化和未设置数组变量的意外行为。
首先是长度:
$ echo ${#notset[@]}
0
$ uninitialized=
$ echo ${#uninitialized[@]}
1
Run Code Online (Sandbox Code Playgroud)
为什么uninitialized
长度是1?不应该是零吗?是因为空变量被认为是一个空元素的数组吗?
这一事实导致了一些问题。例如假设我想创建一个数组,并根据用户命令行参数插入一定数量的东西。我以为我可以做类似(+) 的事情:
myarray=
if [ some-condition ]
then
myarray[${#myarray[@]}]=some-value
fi
if [ some-condition2 ]
then
myarray[${#myarray[@]}]=some-value2
elif [ some-condition3 ]
then
myarray[${myarray[@]}]=some-value3
myarray[${myarray[@]}]=some-value4
fi
Run Code Online (Sandbox Code Playgroud)
但这使第一个插槽为空,我不喜欢它,并且还会破坏我编写的一些代码(*),此时假设我想查看数组是否包含任何元素。我该怎么做?
[ -z "${myarray[@]}" ]
Run Code Online (Sandbox Code Playgroud)
如果数组包含多个元素,则引发错误。
[ -z "$myarray" ]
Run Code Online (Sandbox Code Playgroud)
失败,因为第一个元素为空,即使数组不为空。
那么,我应该如何控制数组未初始化?
有人能解释一下在处理数组和未设置 - 未初始化的变量时到底发生了什么吗?
(+)我知道我可以避免“声明”变量并且它会起作用,但是这个脚本将由教授审查,他不喜欢在随机位置定义变量。
(*)在尝试这件事之前,我将数组的长度保存在另一个变量中,所以我没有问题。但是我想避免定义这个辅助变量,因为我知道我可以在没有它们的情况下获得长度。
我必须在大学的服务器上运行一些测试。我可以从办公室的桌面 ssh 访问服务器。我想在服务器上启动一个 python 脚本,该脚本将在周末运行多个测试。
办公室的桌面将在周末进入待机状态,因此即使 SSH 会话终止,该进程也必须继续在服务器上运行。
我知道nohup
和screen
和tmux
,在这样的问题描述:
我现在正在做的是:
ssh username@server
tmux
python3 run_my_tests.py
-> 这个脚本做了一堆subprocess.check_output
其他脚本,这些脚本本身会启动一些 Java 进程。tmux attach
我重新获得仍然运行良好的 tmux 会话,没有任何错误。我一直检查这个几分钟,测试运行良好。在此之后,如果我通过 SSH 登录到服务器,我确实能够重新连接到正在运行的tmux
会话,但是我看到的是:
Traceback (most recent call last):
File "run_my_examples.py", line 70, in <module>
File "run_my_examples.py", line 62, in run_cmd_aggr
File "run_my_examples.py", line 41, in run_cmd …
Run Code Online (Sandbox Code Playgroud) 我不小心创建了一个/var
分区,我想摆脱它。是否可以在不重新安装操作系统的情况下删除此分区并使用该/
分区包含该分区,或者我是否必须重新分区我的硬盘并重新安装所有内容?/var
在后一种情况下,我可以做些什么来在新系统中自动重新安装已安装的更新/程序,还是必须列出我添加到系统中的所有内容并手动重新安装?我的/home
是在一个单独的分区上,所以可能它可以被新安装重复使用,即使我更关心我安装到/
.
操作系统是 Kubuntu 12.10。