主流 *NIX shell 之间的根本区别是什么,哪些场景可能会促使您使用一种而不是另一种?我知道其中一些可能归结为用户偏好,但我只使用过 Bash,我很想知道另一个 shell 可能有用的地方。
此外,在一个或另一个 shell 下运行时是否对用户编写的 shell 脚本有影响,或者仅仅是更改文件顶部的 shell 的问题?我的直觉说这并不容易。
我有几百个 html 源代码文件。我需要<div>从这些文件中的每一个中提取特定元素的内容,因此我将编写一个脚本来遍历每个文件。元素结构是这样的:
<div id='the_div_id'>
<div id='some_other_div'>
<h3>Some content</h3>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一种方法,通过该方法我可以the_div_id使用 linux 命令行从文件中提取 div以及所有子元素和内容吗?
bash 变量 LATLNG 在括号中包含纬度和经度值,如下所示
(53.3096,-6.28396)
我想将这些解析为一个名为 LAT 和 LON 的变量,我试图通过 sed 像这样
LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")
但是,我收到以下错误:
sed: can't read (53.3096,-6.28396): No such file or directory
我在运行一些他们抱怨的安装脚本时遇到了一些问题bad interpreter。
所以我做了一个简单的例子,但我无法弄清楚问题是什么,见下文。
#!/usr/bin/env bash
echo "hello"
Run Code Online (Sandbox Code Playgroud)
执行上面的脚本会出现以下错误
[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
该/usr/bin/env文件存在,见下图:
[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16 2014 /bin/env
[root@ech-10-24-130-154 dc-user]#
Run Code Online (Sandbox Code Playgroud)
如果我更改脚本以使用常规的shebang,#!/bin/bash它就没有问题。#!/bin/env bash也有效。
允许便携式shebang工作的环境中缺少什么?
ls -lL /usr/bin/env返回ls: cannot access /usr/bin/env: No such file or directory所以我想我需要更改符号链接?我可以指点一下/bin/env …
我有一个find命令,我想将 GID 列表替换到其中。
这是命令:
find / -follow \( -group 39 -o -acl_group 39 \) -exec ls -ln {} \; 2> $HOME/error.39.log 1> $HOME/results.39.log
我还有一个包含内容的文件:
3
100005
21
7
Run Code Online (Sandbox Code Playgroud)
如何find依次将文件中的每个条目替换到命令中,以便为每个条目创建单独的输出和错误文件?
我的家庭网络上有一台 WD MyBook World NAS。我目前将此用于 Mac 的 Time Machine 备份,但我也想将其用作运行 Ubuntu Server 的 linux 机器的备份位置。如何在 linux 服务器上安装此驱动器,以便我的 cron 备份可以将其用作备份目标?
我已经使用静态 IP 地址配置了 WD 驱动器,我认为这在解决方案中很重要。
我在我的.bash_aliases文件中创建了下面的别名
alias auth="grep \"$(date|awk '{print $2,$3}')\" /var/log/auth.log |
grep -E '(BREAK-IN|Invalid user|Failed|refused|su|Illegal)'"
Run Code Online (Sandbox Code Playgroud)
这应该是:
auth.log今天的消息但是,它仅在有 2 位数的日期时才有效,因为编号 <10 的天数前面没有零。
例如,我运行date并将结果通过管道传输到awk. date输出Sat Jan 1 04:56:10 GMT 2011然后 awk 捕获$2并将$3它们提供给 grep,如下所示
Jan 1
Run Code Online (Sandbox Code Playgroud)
但是,当有一位数的日期时,消息auth.log显示如下
Jan 1 00:44:57 linux su[21249]: pam_unix(su:session): session closed for user root
Run Code Online (Sandbox Code Playgroud)
因此,有两个空格以下Jan的auth.log,但只有一个空格之后Jan在我的grep命令
如何修改命令以允许额外空间?