是否有比以下更紧凑的杀死后台作业的形式:
for i in {1..5}; do kill %$i; done
Run Code Online (Sandbox Code Playgroud)
此外,{1..5} 显然有一个硬编码的幻数,我怎样才能使它成为“N”,而 N 是正确的数字,而不做:
$(jobs | wc -l)
Run Code Online (Sandbox Code Playgroud)
我实际上在 PS1 中使用 \j 来获取托管作业的数量,这是否等效?
什么是规范的方式:
scp 一个文件到远程位置tar或不压缩,单个文件或整个文件夹,7za或者其他更有效的东西)我熟悉这样的壳管:
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z
Run Code Online (Sandbox Code Playgroud)
本质上:
tarstdout给stdin压缩程序通过ssh链接执行此操作的最佳方法是什么,文件登陆远程文件系统?
我宁愿不sshfs安装。
这行不通:
scp <(tar cvf - MyBackups | 7za a -si -mx=9 -so) localhost:/tmp/tmp.tar.7z
Run Code Online (Sandbox Code Playgroud)
因为:
/dev/fd/63: not a regular file
Run Code Online (Sandbox Code Playgroud) mutt与 Gmail 一起使用时,我有时通过$绑定(同步邮箱)“检查电子邮件更新” ,有时仅通过使用c(更改文件夹)并仅提供=(默认为 MAILBOX)作为要更改的 IMAP 文件夹路径。
有没有更好(特别是:更快)的方法来做同样的事情?例如,一个解决方案将比“假装切换文件夹”更直接,就像我所做的那样。还有一些不会“错过”某些更新的东西,就像$有时似乎做的那样(也许$根本不是为了检查电子邮件,而只是为了清除标记为已删除的邮件等?)
我有文件a,b并且我想输出b更改后的行,因为它是从a. 只是修改后的行,没有周围的上下文,没有差异偏移标记。
我如何使用 shell 脚本来做到这一点?(没有 Python/Perl/PHP/...)
sed 和 awk 是可接受的解决方案。
现在,我正在做的是 diff -y 与 --suppress-common-lines 和 sed 使用正则表达式反向引用来获取空格后的正确部分。一定会有更好的办法?
使用 perl(这是被禁止的),我会做这样的事情:
diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
Run Code Online (Sandbox Code Playgroud) 我想从 CLI 执行我的 CalDAV,就像我从 执行 IMAPmutt一样,就客户而言,我最好的选择是什么?
我有一个奇怪的passwd-文件/etc,注意尾随的破折号:
root@ubuntu:~# ls /etc/passw*
/etc/passwd /etc/passwd-
Run Code Online (Sandbox Code Playgroud)
注意不同的权限:
root@ubuntu:~# ls -hl /etc/passw*
-rw-r--r-- 1 root root 2.0K Oct 26 13:38 /etc/passwd
-rw------- 1 root root 1.9K Oct 26 13:38 /etc/passwd-
Run Code Online (Sandbox Code Playgroud)
以及内容的区别:
root@ubuntu:~# diff /etc/passwd{,-}
39c39
< mysql:x:119:129:MySQL Server,,,:/nonexistent:/bin/false
---
> mysql:x:119:129::/nonexistent:/bin/false
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?
root@ubuntu:~# uname -a
Linux ubuntu 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux
root@ubuntu:~# cat /etc/issue
Ubuntu 12.04.1 LTS \n \l
Run Code Online (Sandbox Code Playgroud) 在 OS X 上,我得到了一个很好的人类可读系统内存,如下所示:
printf -v system_memory \
"$(system_profiler SPHardwareDataType \
| awk -F ': ' '/^ +Memory: /{print $2}')"
echo "$system_memory"
Run Code Online (Sandbox Code Playgroud)
打印出友好的:
4 GB
Run Code Online (Sandbox Code Playgroud)
尽管这在 Linux 上是正确的:
lshw -class memory
Run Code Online (Sandbox Code Playgroud)
它输出:
size: 4096MiB
Run Code Online (Sandbox Code Playgroud)
我需要痛苦地解析它并尝试将它变成一个和上面一样好的字符串。
我使用了错误的命令吗?
我想在我的 Bash $HISTFILE 中记录的命令上保留时间戳,这可能吗?
我没有设法将其设置man bash为信息源。
我的其他选择如下:
function thebanana() {
local -r -a bash_commands=(
"ls"
# ... more coconut commands
)
for bash_command in "${bash_commands[@]}"; do
printf "${bash_command}"
printf ":"
done
}
export HISTFILE=banana
export HISTIGNORE="$(thebanana)"
export HISTSIZE=999999
export HISTFILESIZE=999999999
export HISTCONTROL=ignoredups:erasedups
Run Code Online (Sandbox Code Playgroud)
我应该提到我在 OS X Mountain Lion 上(叹气)。uname -a给我:
Darwin CoconutMac.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64
Run Code Online (Sandbox Code Playgroud)
并echo $BASH_VERSION给我:
3.2.48(1)-release
Run Code Online (Sandbox Code Playgroud)
尝试添加这个:
export HISTTIMEFORMAT='%b %d %I:%M:%S %p ' …Run Code Online (Sandbox Code Playgroud) 我已经运行脚本好几天了。我将 stdout 重定向到$HOME/mylog,但没有重定向 stderr,因为我认为上面没有任何内容。突然间,stderr 上开始出现数千行,所以我暂停了这项工作。有没有一种方法可以$HOME/myerr从现在开始将 stderr 重定向到,而无需重新启动脚本?
我在盒子上有 sudo 访问权限,它是 OS X。
也许使用dtools诱捕的东西?
我不能丢失脚本到目前为止所做的工作并从头开始重新启动它。有没有办法在磁盘上“转储内存中的对象”,冻结程序,编辑变量(例如文件描述符)并使用新的上下文恢复?
有ls没有办法显示否定条件,例如“所有不是符号链接的文件”?我在项目目录中经常使用后者,但其他否定也很有用。
目前,我的研究仅导致为“like”创建一个别名:
find . -maxdepth 1 ! -type l | sort # (...)
Run Code Online (Sandbox Code Playgroud)
但显然这种方式我没有得到 的着色ls,列格式等......
我有时使用 OS X 10.8.2 上的 Bash v3 和穿山甲上的 Bash v4。