当我通过 SSH 连接到 Linux 机器时,我想让/etc/profile文件将whoami命令的结果保存到全局环境变量中。
如果我要使用命令进入 root sudo su -,我不希望该命令在进入 root 时再次运行。我希望它whoami在我进入 root 之前使用我的常规用户名的结果,并且需要以 root 用户身份访问该变量,即使它会/etc/profile在我进入 root 时再次运行该文件。
我该怎么做才能在命令中只运行一次该/etc/profile命令?
我想总结一个纯文本文件中的数字。有什么办法可以用命令或 bash 脚本来做到这一点吗?
假设我想以如下所示的模式提取数字:
… text text …
Removed 50 items out of 50 items.
… text text …
Removed 34 items out of 50 items.
… text text …
Run Code Online (Sandbox Code Playgroud)
所以在上面的例子中,我想提取它们弹出的行中的第一个数字并将其相加。在示例中,结果应该是 84。我知道如何 grep 它,但这就是我对 *nix 命令的了解程度。
运行 Debian/Crunchbang,当我尝试运行脚本时遇到一个奇怪的错误。例如
exec: 392: ./firefox-bin: not found
Run Code Online (Sandbox Code Playgroud)
我以前从未遇到过这种情况,我找不到任何关于此的好信息,有没有人愿意解释它的含义以及它发生的原因?
显然“未找到”的文件确实存在于该路径中,并且归我所有且可执行。我也尝试从不同的位置执行它,但没有运气。
cd "$(mkdir -v "$(date -R)"|sed s+.`(.*)'.*)"
Run Code Online (Sandbox Code Playgroud)
这是为了创建一个名为$(date -R). 我可以简单地 cd $(date -R),但罪魁祸首是自上一个命令运行以来日期可能会更改 ( mkdir)。
所以我想解析它的输出以确定创建的目录的名称。如何更正代码?目前它显示>提示,表明缺少引用。
更改'为\'不会改变结果。如果您有更好的方法来做到这一点,请说出来。
我的 shell 脚本中有一个字符串,它采用固定格式:'[STATUS REPORT] PROJECT'. 当用户执行我的 shell 脚本时,他会被要求提供'PROJECT'.
我想'PROJECT'用用户提供的价值替换这个词。例如,如果'ABCD'是用户输入:
'[状态报告] ABCD'
我有两个问题: 1:如何处理项目名称中的“&”等特殊字符?例如:
echo "[STATUS REPORT] PROJECT" | awk '{ gsub(/PROJECT/, "A&A"); print }'
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
[状态报告] APROJECTA
2:我的实际 shell 语句如下所示:
echo "[STATUS REPORT] PROJECT" | awk '{ gsub(/PROJECT/, $ProjectName); print }'
Run Code Online (Sandbox Code Playgroud)
其中 $ProjectName 存储用户提供的项目名称。但这似乎不起作用
我怎样才能让它正常工作?
我对 Mac OSX 中的终端越来越熟悉,我想我会涉足 bash 脚本。不想在我坐下之前爬行,我想写一个非常简单的“你好,世界!” 脚本所以我这样做了:
~/Desktop touch hello.sh
~/Desktop vim hello.sh
Run Code Online (Sandbox Code Playgroud)
然后我将它添加到 hello.sh
#!/bin/bash
echo "Hello, world!"
Run Code Online (Sandbox Code Playgroud)
然后我这样做了:
~/Desktop chmod -x hello.sh
~/Desktop hello
Run Code Online (Sandbox Code Playgroud)
此时什么都没有发生。
我从某个地方下载了一个同样简单的 bash 脚本:
#!/bin/bash
echo "The current date and time."
date
Run Code Online (Sandbox Code Playgroud)
当我这样做的时候
~/Desktop date
Run Code Online (Sandbox Code Playgroud)
它做了它应该做的。
然后我用 ls -l 检查了文件权限,我得到了这个:
-rw-r--r-- 1 Mike staff 33 5 Sep 21:13 hello.sh
-rw-r--r--@ 1 Mike staff 50 5 Sep 21:00 date.sh
Run Code Online (Sandbox Code Playgroud)
很明显@ 正在发挥作用,或者我是这么认为的。我没有使用 vim,而是在 TextEdit 中创建了相同的文件,在经历了与之前相同的动作之后,我最终遇到了相同的情况,即我的脚本除了现在权限在它们末尾显示一个 @ 之外什么也没做。
所以我的问题是为什么这不起作用,我做错了什么?权限末尾的@ 是什么?
我如何将这两行合并为一行?
chown abc:abc *.sh
chown abc:abc *.txt
Run Code Online (Sandbox Code Playgroud)
将两个文件扩展名的所有权更改为一个行。
如果我有:
foo
bar
Run Code Online (Sandbox Code Playgroud)
..我想awk/sed这个:
foo-bar
Run Code Online (Sandbox Code Playgroud)
..什么是语法?
我正在尝试在 OS X 10.6.x 上使用 System Profiler:
system_profiler SPMemoryDataType | awk '/Type/ {print $2} /Speed/ {print $2}'
Run Code Online (Sandbox Code Playgroud)
输出类型速度(即DDR-1067)。还没有想出如何使用print或printf尚未弄清楚如何做到这一点,可能会尝试grep改为..
我的本地网络中有一台 CentOS 主机,我每天都使用它来打开与 Internet 和本地网络中许多(超过 40 个)其他主机的 SSH 连接。我已经设置了 RSA 密钥对来跳过交互式身份验证和一些像这样的 bash 脚本:
[root@beta ~]# cat ~/connections/mywebsite.sh
ssh mywebsitefi@virtualserver123.hostingprovider.fi
Run Code Online (Sandbox Code Playgroud)
当我需要打开与它们的连接时,这很好用,但当我需要将scp文件发送到同一主机时就不行了。
是否可以创建等效于别名的东西来替换这样的 username@host 部分?
[root@beta ~]# scp myfile MYWEBSITE:/var/www
Run Code Online (Sandbox Code Playgroud)
使用 Tab 键自动完成别名的可能性也很棒。
我知道 bash 别名只能用作命令的第一个单词,但是还有其他方法可以实现吗?如果不在 bash 中,也许是另一个 shell?
我${VARIABLE}在脚本中看到了很多类型语法。大括号的重点是什么?