小编Gau*_*ier的帖子

在 ssh 命令中与 true 进行 ORing

当我尝试pkill -f通过 ssh 远程运行并尝试丢弃可能的错误代码(即使没有找到进程也继续执行脚本的其余部分)时,|| true行为与我预期的不一样。

$ pkill asdf || true
$ echo $?
0
$ pkill -f asdf || true
$ echo $?
0
$ ssh pi@10.20.0.10 "pkill asdf || true"
$ echo $?
0
$ ssh pi@10.20.0.10 "pkill -f asdf || true"
255
Run Code Online (Sandbox Code Playgroud)

我想是ssh返回 255,而不是引号之间的命令,但为什么呢?

shell ssh kill

14
推荐指数
2
解决办法
1210
查看次数

ls 模式匹配

我知道这[]ls模式匹配中起作用:

$ ls
foo.c  foo.h
$ ls foo.[ch]
foo.c  foo.h
Run Code Online (Sandbox Code Playgroud)

但我找不到记录在哪里。

我想知道与这些匹配的语法:

$ ls
foo.asd  foo.qwe
Run Code Online (Sandbox Code Playgroud)

这是我最好的猜测:ls foo.[{asd}{qwe}]。这没用。

ls shell wildcards patterns

7
推荐指数
1
解决办法
9839
查看次数

解压缩源参数

要将一堆 zip 文件从一个位置复制到另一个位置:

$ cp *.zip destination/
Run Code Online (Sandbox Code Playgroud)

将一堆 zip 文件解压缩到一个目录:

$ unzip \*.zip -d destination/
Run Code Online (Sandbox Code Playgroud)

man unzip 说:

星号前的反斜杠仅在 shell 扩展通配符时才需要,如在 Unix 中

让我感到困惑的是,这两个命令的行为方式似乎不同。他们为什么不呢?有没有办法知道或猜测每个命令的行为方式,而不是每次都记住或阅读手册页?

是否不同,因为它cp被实现为采用多个源参数而unzip不是?unzip可以取带通配符的字符串,为什么不实现取多个源文件呢?

获取源参数的标准方法是什么?是不是cp真的做得太多了?

command-line zip wildcards arguments

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

.xsession 和 .xinitrc 未在登录时执行

这是我的内容~/.xsession

#!/bin/bash

# Tray for skype, keyboard layout, ...
trayer --edge top --align right --SetDockType true --SetPartialStrut true  --expand true --width 10 --transparent true --tint 0x686868 --height 17 &

# Keyboard layout switcher
setxkbmap -layout us,se -option 'grp:alt_shift_toggle' &

xscreensaver -nosplash &
Run Code Online (Sandbox Code Playgroud)

在 lightdm 中选择 xmonad 登录后,xscreensaver 没有运行,trayer 也没有运行,并且 setxkbmap 没有设置。

我见过这个问题,这是完全一样的,但那里的答案没有帮助:

  • ~/.xsession 对所有人都可执行
  • 我在登录管理器中没有选项“自定义会话”(Ubuntu 的默认设置)

login ubuntu session xmonad

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

无法解析 awk 的空格分隔输出

如果我理解正确,输出的默认分隔符awkspace

但是,以下脚本的行为不符合我的预期。我无法将 的输出解析awk为数组:

#!/bin/bash
echo "------ with input string from awk ------"
ALL_TTY_OWNERS_STR=$(ls -l /dev | grep tty | awk '{print $3}')

read -r -a ALL_TTY_OWNERS_ARRAY <<< "$ALL_TTY_OWNERS_STR"

echo "${#ALL_TTY_OWNERS_ARRAY[@]}" # This says 1
echo "${ALL_TTY_OWNERS_ARRAY[0]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[1]}" # empty string, expected "root"
echo "${ALL_TTY_OWNERS_ARRAY[2]}" # empty string, expected "root"


echo "------ with my manually created input string ------"
ALL_TTY_OWNERS_STR="root root root" # only for testing

read -r -a ALL_TTY_OWNERS_ARRAY …
Run Code Online (Sandbox Code Playgroud)

bash array awk

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

apt-get purge 没有完全卸载

我已经安装了 emacs apt-get。稍后我尝试将其删除,但保留了二进制文件。

root@ionian:/home/gauthier# apt-get --purge remove emacs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'emacs' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@ionian:/home/gauthier# which emacs
/usr/bin/emacs
root@ionian:/home/gauthier# 
Run Code Online (Sandbox Code Playgroud)

(上面显示的清除不是第一次尝试,这只是为了表明该软件包已被删除。)

在我安装之前没有安装 emacs apt-get install emacs

知道发生了什么吗?为什么 apt-get 看不到二进制文件,为什么它认为 emacs 已经卸载了?完全卸载 emacs 的干净方法是什么?

debian apt

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

我是否需要让 SSH 会话保持活动状态才能运行 cron?

我知道nohup。它可以防止进程在挂断后死亡。

我想要的是我的用户 crontabs 运行,即使我的会话在它们应该运行时超时。我相信我需要用户仍然登录才能发生这种情况。

无论用户是否登录,我如何确保用户的 crontab 都在运行?

我需要让用户实际登录吗?

我应该改用系统 crontab 吗?

还有其他解决方案吗?

ssh cron

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

标签 统计

shell ×2

ssh ×2

wildcards ×2

apt ×1

arguments ×1

array ×1

awk ×1

bash ×1

command-line ×1

cron ×1

debian ×1

kill ×1

login ×1

ls ×1

patterns ×1

session ×1

ubuntu ×1

xmonad ×1

zip ×1