对于我的持续集成脚本,我想检查 git 分支是否与 master 分支不同步。因此我使用
git rev-list --left-right --count master...my-branch-name
Run Code Online (Sandbox Code Playgroud)
它会返回…… 喜欢
1 3
Run Code Online (Sandbox Code Playgroud)
(3次提交在master之前,1次在后面)
添加| cut -f1只会给我第一个数字(在主人后面提交)。
现在我想用那个数字退出脚本,因为后面的 0 个提交是成功的,所有其他的都应该给出一个错误。
我怎样才能做到这一点?我试过
exit 'git rev-list --left-right --count master...my-branch-name | cut -f1'
Run Code Online (Sandbox Code Playgroud)
但这会引起
/bin/bash: line 66: exit: git rev-list --left-right --count master...my-branch-name | cut -f1:需要数字参数
是否有最佳实践?
我试图在/foo保留列出目录中的空格的同时回显所有文件。目前,名为目录"bar1 bar2"将回声出作为/path/to/foo/bar1/然后/bar2再file.txt全部上新的生产线。我需要它来 echo/path/to/foo/bar1 bar2/file.txt或/path/to/foo/bar1\ bar2/file.txt.
for file in $(find /path/to/foo/ -type f); do
if [[ ... ]]; then
echo "${file}"
fi
done
Run Code Online (Sandbox Code Playgroud)
还试过:
for file in $(find /path/to/foo/ -type f | sed 's/ /\ /g'); do
if [[ ... ]]; then
echo "${file}"
echo "$file" # variations i've tried
echo $file # variations i've tried
echo ${file}
otherCommand "${file}"
fi
done
Run Code Online (Sandbox Code Playgroud) 我多年来一直是 Linux 的狂热用户,但后来切换到了 Windows。我一直错过的一件事是使用 rsync 制作增量快照以进行备份。你使用这样的命令:
rsync -aP --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP
Run Code Online (Sandbox Code Playgroud)
它将创建您正在备份的文件夹当前状态的完整目录结构,使用硬链接来引用以前的备份。只有新的或更改的文件才会真正写入磁盘;所有其他的都保存为硬链接。这简直太棒了,我在 Windows 中找到的任何解决方案都无法做到这一点。(作为参考,我尝试过 Windows 文件历史记录,并为包括 Crashplan 和其他出色的Beyond Compare在内的商业软件付费。)
既然微软已经引入了 WSL,我已经尝试在 Windows 的 bash 中做到这一点。它似乎运行良好,但 Windows 错误地报告了磁盘上的大小,如下所示:
为了解释一下,snapshot-170831__07h08m48s我在一个快照中添加了一个大型视频文件,1.40 GB,复制需要几秒钟。在下一个快照中,snapshot-170831__07h09m09s文件没有花时间复制,这表明硬链接已正确创建并且我的硬盘驱动器上没有占用空间。
然而,我所有的 Windows 工具(Windows Explorer、Directory Opus、WinDirStat)都报告第二个快照文件夹在磁盘上占用了 1.40 GB。
那么第一个问题是为什么 Windows 会错误地报告这些硬链接的磁盘大小?
但更重要的问题是我是否应该这样做:在 Windows 下使用 Linux 工具进行常规文件备份。我已经在 WSL 上看到,使用 Windows 工具修改 .bashrc 等文件会使文件在 WSL 中不可读。我想知道将我的备份委托给这样的工具是否风险太大,或者我是否冒着损坏文件系统和丢失重要文件的风险。
我正在运行 Windows 7,它很旧,而且我弄乱了它。当我在 cmd 中时,我发现它的ls工作原理就像我在 Linux 中所期望的那样。所以执行一些其他命令,例如mvand rm。这本身不是问题,但我想知道它们来自哪里。据我所知,Windows 不自动支持这些。我可能在某个时候自己添加了它们。有什么方法可以尝试设计他们为什么工作?
如果您曾尝试通过双击在 Windows 10 上运行 .sh linux 脚本,在默认情况下将其分配给 bash.exe(Windows 10 的 Ubuntu Bash)后,您很可能注意到它不会打开。
为什么它不打开,我该如何解决这个问题?
我想使用 tmux 为终端创建一个“焦点模式”,有点像goyo 为 vim 所做的:
我的想法是通过将窗口分成三个窗格来实现这一点,然后将中心窗格设置为固定的最大值(可能是 80 列?可能是 100?可能根据终端窗口大小不同的最大值,例如响应式 Web 布局?)并设置侧窗格以平均填充剩余的列。我还希望它可以在不同尺寸的屏幕上工作,这样我就可以在我的笔记本电脑和台式机上使用它。
目前,我能想到的唯一方法是与 shell 合作(即,获取终端宽度,tput cols然后使用数学运算计算每个窗格所需的宽度$(()))。我对此没有意见,但是如果在 tmux 中有一种内置方法可以完成此操作,我会因为错过它而感到非常愚蠢。
所以……有吗?
这不太重要;看到顶部有提示的大部分空白窗格确实还不错。我知道 tmux 有clock-mode(例如),它会覆盖窗格的内容并显示其他内容。所以我想知道是否有办法完全隐藏非活动窗格的内容。到目前为止,我能想到的最好的方法是将 fg 和 bg 设置为相同的颜色:
:select-pane -t:.1 -P 'fg=black,bg=black'
Run Code Online (Sandbox Code Playgroud)
如果tmux 中的窗格有边距功能,那么这一切都可以更轻松地完成。据我所知,此功能不存在,但我远非 tmux 专家。有没有可能它在那里而我只是不知道它?
当我输入时,sudo du -sh ~student1我得到了我期望的输出(见截图)。但是,当我尝试使用以下脚本时:
#!/bin/bash
for user in "$@"; do
sudo du -sh ~$user
done
Run Code Online (Sandbox Code Playgroud)
做同样的事情,我得到一个目录不存在的错误。这是一个屏幕截图。
(我知道我可以做到sudo du -sh student1 student2...,而且 bash 脚本没用,但我仍然不明白为什么它不起作用。)
我查看 了特定用户的磁盘使用总量,但这并不是我想要的。
为什么我需要在 Windows bash 上使用带有 winpty 的前缀 openssl?
为什么命令
openssl genrsa -des3 -out ca.key 4096
Run Code Online (Sandbox Code Playgroud)
挂起并且没有响应
尽管
winpty openssl genrsa -des3 -out ca.key 4096
Run Code Online (Sandbox Code Playgroud)
工作正常吗?
我在 npm 脚本中有一个命令,它通过 SSH 连接到远程构建服务器并运行 Bash 脚本。该脚本设置一个锁文件,并trap在脚本退出时调用以删除该锁文件。
在这两种情况下,我都用ctrl+取消操作C。
LOCKFILEPATH="/tmp/env_app.lock"
# cleanup function just deletes $LOCKFILEPATH
function mutex() {
if [ -f "$LOCKFILEPATH" ]; then
echo -e "\n\n${redtext}Build already in progress! Exiting.${resettext}\n\n";
exit 1;
else
touch $LOCKFILEPATH;
trap cleanup EXIT;
fi
}
Run Code Online (Sandbox Code Playgroud)
当您第一次通过 SSH 进入主机以运行它时,这可以正常工作,但是当您通过 SSH 发送命令时,陷阱不起作用
ssh hostname command
Run Code Online (Sandbox Code Playgroud)
我尝试添加到 trap 命令以运行更多信号,但这些似乎也不起作用:
trap cleanup EXIT SIGHUP SIGKILL SIGTERM SIGINT
Run Code Online (Sandbox Code Playgroud)
我应该在这里做什么?
我还设置了一个更简单的脚本,当通过 SSH 手动执行它时,它似乎工作正常。也许当我使用 npm 脚本运行它时添加了层?npm 脚本是:
"deploy": "ssh HOSTNAME ''deploy-script $(git rev-parse …Run Code Online (Sandbox Code Playgroud) 我在使用 nmap 时遇到问题。
当我想执行任何命令时,nmap 会回答我:
Nmap: 'dnet: 无法打开设备 wifi0'
我正在使用 W10 bash 子系统开发 Ubuntu。
我在这里发红https://github.com/Microsoft/WSL/issues/1349 W10 bash 不支持某些数据包,您认为这就是答案吗?
谢谢。