现在,在您将其标记为重复之前,请理解我确实搜索了这个问题,并且我已经尝试了所有解决方案都没有效果。
我的脚本:
#!/bin/bash
echo "Enter the number 3"
read t1
if [$t1 -eq 3]; then
echo "it is 3"
elif [$t1 > 3]; then
echo "it is greater than 3"
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
./g.sh: line 5: [3: command not found
./g.sh: line 7: [3: command not found
Run Code Online (Sandbox Code Playgroud) 我在 bash 备份脚本中非常尴尬,并且错过了一些重要的事情。我知道 ext3 文件系统不跟踪创建日期,但是在 ext3 中复制文件会更新通过 stat 看到的更改时间(这会起作用)。但是,当文件从一台 Windows 服务器复制到另一台(我通过 smb/cifs 安装的)时,根据我的测试,更改的时间不会更新。我正在使用 find 对 cifs 共享进行搜索。真的没有办法检测何时使用“查找”从 Linux 通过 cifs 共享创建新文件?
此外,我对 rsync 非常熟悉,在这种情况下,rsync 的限制将其排除在外。我想我可以使用 rsync 进行搜索并尝试将结果通过管道传递给操作 (gzip),但我认为子外壳会很荒谬。当然可能是错的。任何建议将不胜感激。可以提供更多细节,但从我的研究来看,我认为这是不可能的。
我正在尝试提出一种 bash 脚本化方法来替换正在运行的 PC 上的根文件系统。该系统使用带有 ext4 rootfs 和交换分区的 MBR 分区磁盘,不幸的是它不使用 LVM / BTRFS 或任何类似的有用的东西。它使用 grub / kernel & initrd / systemd 运行最小的 Debian 发行版。
没有对所讨论的 PC 进行物理访问 - 它正在运行一些自助服务终端软件,可以使用专有工具将包含二进制文件和更新 shell 脚本的 tarball 推送到 PC。我的计划是使用这个更新系统来尝试替换rootfs。
我的想法基本上可以归结为以下几点:
将 initrd 替换为自定义版本,该版本不会将 switch_root 切换到真正的 rootfs 而是替换它(可能使用 dd 写入新映像),然后重新启动到新系统
(不知何故!)从实时系统 switch_root 到某种临时文件系统,然后执行上述 dd 并重新启动
如上所述,但是将 init 进程设置为一个新的临时 fs 并执行上述操作或类似操作...
我不熟悉pivot_root 和switch_root 功能,并且目前正在玩-我确定以前已经这样做过,但我已经搜索过但没有找到解决方案!
好的,所以我已经使用 Linux 18 年了,从来没有见过或听说过这样的事情:
starting-forth$ ls
ch01/ ch02/ ch04/ ch05/ ch06/ text/
starting-forth$ cd ch07 # A directory I thought I might exist, but didn't
ch04
ch04$
Run Code Online (Sandbox Code Playgroud)
哇?!好的,只是为了确保:
ch04$ pwd
/home/m/learn/forth/starting-forth/ch04
Run Code Online (Sandbox Code Playgroud)
我的 shell 是 bash,在虚拟终端 [LilyTerm,确切地说],在 XFCE 会话中,在 Manjaro Linux 上。我认为我没有进行任何奇怪的自定义,并且整个系统相当新(2014 年 10 月在新笔记本电脑上首次安装)。
那么,任何人都知道是什么导致了这种情况?
更新:我之前没有想到的一个事实(尽管我不知道为什么会如此)是这发生在 Git 工作目录中。
更新 2:显然,只要存在名称相同的现有目录,除了最后一个字符(或两个字符?),作为我尝试 cd 到的不存在目录时,就会发生这种行为。例如:
[tmp]$ mkdir dxx17903
[tmp]$ cd dxx17907
dxx17903
[tmp]$ cd dxx179035
dxx17903
[dxx17903]$ cd ..
[tmp]$ cd dxx179005
bash: cd: dxx179005: No such file or directory
[tmp]$ …Run Code Online (Sandbox Code Playgroud) 我不知道这是一件坏事,还是意味着什么。我的脚本似乎仍然可以正常工作,但我应该修复它吗?
#!/bin/sh
#This script will send text and maybe images to other computers via ssh and scp.
#Configuration files in same folder
source /Users/jacobgarby/Desktop/messaging/messages.cfg
TIME=$(date +"%H:%M:%S")
CONNECTED[0]="mainmini@192.168.1.65"
if [ -d messages.log ]; then
:
else
touch messages.log
fi
read MSG
if [ "$MSG" == "!help" ]; then
echo ; echo "!clear Clear's your personal chat log."
echo "!ban [usrname] Prevents a user from entering this chat IN DEV."
else
echo "$TIME | $USER | $MSG" >> messages.log; echo >> messages.log; …Run Code Online (Sandbox Code Playgroud) 我有一个文件,我想在其中压缩并同时使用 scp 传输到另一台主机。
我尝试执行以下命令但失败了。我不介意稍后拉上拉链和 scp,但我只想知道我哪里弄错了
使用管道我错了吗?在这里?
-bash-3.2$ gzip -c aum.dmp | scp oracle@192.168.0.191:/export/home/oracle/aum.dmp.gz
Usage: scp [-pqrvBC46] [-F config] [-S program] [-P port]
[-c cipher] [-i identity] [-o option]
[[user@]host1:]file1 [...] [[user@]host2:]file2
Run Code Online (Sandbox Code Playgroud)
问候, 菜鸟
的文档exec说,如果当前 shell 是非交互式的并且execfail没有设置选项,它会在出错的情况下退出 shell 。
我注意到交互式 bash shell 中有一个奇怪的行为,但我无法用文档解释。这个命令
exec non-existent-file
Run Code Online (Sandbox Code Playgroud)
产生一条错误消息,并且 shell 保持活动状态,正如预期的那样。但是如果我将相同的命令放入一个文件和source那个文件中,当前的 shell 将被失败的 exec 退出。
有人可以帮助我理解为什么会发生这种情况吗?
经过一些 bash 自学和试验,我坚持从函数返回一个数组,并且我一生都看不到我的错误。
简而言之,这应该/必须做的是使用具有从文件中读取值/字符串的函数,返回一个数组:
在我看来,该函数似乎读取整个文件而不是逐行读取,从而将所有字符串放入数组中的单个单元格中,我不确定如何将 clients[0] 显式显示为 $(clients[0] ]) 在 bash 代码中失败
如果通过某种方式我做错了什么,也请指出这一点或任何关于优化这一点的建议
#!/bin/bash
readArray(){
local array=()
local i=0;
local j=0
while IFS= read -r LINE && [[ -n "$LINE" ]] ; do
array[$((i++))]+=${LINE}; # Append line to the array
((j++))
done < "$1";
rtr=${array[@]}
}
string="/home/cybex/openvpntest/openvpn.log"
declare -a clients
#sed -i '/^$/d' $string
clients=$(readArray "$string")
echo "${clients[@]}"
echo -e "array not empty, displaying array contents\n"
for i in "${!clients[@]}"; do
echo "$i: ${clients[$i]}"
done
echo -e …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的问题要问你们。在浏览了文档和此处的站点后,我想知道是否可以防止 grep 在同一行上输出每个匹配项。
在我的示例中,我需要采用\xeb\x1a\x5e\x31\xc0\x88\x46\x07...等格式的字符串。我grep -oP "x\K(\S\S)")用来获取每个十六进制数字。
输出是正确的,但是每个匹配项都在自己的行上。这是一个问题,因为我需要将此输出提供给另一个程序。再说一次,有没有办法在没有任何类型的填充的情况下连续放置每个匹配项?
我有一堆二进制文件输出如下数据:
-0.002019
-0.000790
0.000158
0.001539
Run Code Online (Sandbox Code Playgroud)
这只是一堆数字,我想在 y 轴上绘制在 x 轴上具有相等间距的数字。
输出实际上有几千行长。
我需要一种简单的方法将它传递给绘制它的东西,如下所示:
./program_dumping_numbers | ??? # a simple window of the plot pops up!
Run Code Online (Sandbox Code Playgroud) bash ×10
linux ×7
centos ×1
debian ×1
filesystems ×1
grep ×1
mount ×1
partitioning ×1
rsync ×1
samba ×1
shell ×1
shell-script ×1
ubuntu ×1