我的服务器上有许多 bash 脚本,所有用户都可以使用。
但似乎位置
/usr/local/sbin
Run Code Online (Sandbox Code Playgroud)
不是最好的地方。
我不想使用用户的主目录,因为每个人都可能执行它们。
是否有关于将它们存储在 Debian 上的约定?
我刚开始使用 BASH,所以我可以将一个目录的所有内容移动到另一个目录。但问题是,我期待它合并目录。我正在使用 cron 作业来运行此脚本。
#!/bin/bash
shopt -s dotglob nullglob
mv mv_schedule/* public_html/
Run Code Online (Sandbox Code Playgroud)
来源:(/mv_schedule/包含文件夹/文件)
/files/
4.html
5.html
/assets/
sitemap.xml
Run Code Online (Sandbox Code Playgroud)
目的地:(/public_html/以前的文件夹已经存在)
/files/
1.html
2.html
3.html
/assets/
sitemap.xml
Run Code Online (Sandbox Code Playgroud)
所以,我想要的东西,是所有来自这些目录内的新文件/mv_schedule/与在那些合并/public_html/,并已经在那里存在的文件,与那些来自何处来代替/mv_schedule/。
当我使用当前脚本尝试此操作时,它当前正在通过电子邮件返回此错误:
mv: cannot move `mv_schedule/assets' to `public_html/assets': Directory not empty
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
例如,我的 Linux 服务器上有数据库备份,我想编写一个脚本将其上传到远程 FTP。我试过这个put命令,但它一次只能传输一个文件。然后我尝试了 mput 命令,但它只显示我要传输的文件的问号(也许我使用错误?...)
我试过这个:
#!/bin/bash
ftp -n <<EOF
open ftp.server.com
user name password
cd backup
mput /backup/*
EOF
Run Code Online (Sandbox Code Playgroud)
但它不会工作。它输出我想传输的文件名称,名称末尾带有问号。我错过了什么,或者有更好的更简单的方法吗?
当我跑
curl | tee test.txt; echo ${PIPESTATUS[0]}
Run Code Online (Sandbox Code Playgroud)
我正确地看到
curl:尝试“curl --help”或“curl --manual”以获取更多信息
2
但是当我尝试使用“/bin/sh”运行完全相同的命令时:
sh -c "curl | tee test.txt; echo \${PIPESTATUS[0]}"
Run Code Online (Sandbox Code Playgroud)
我得到
curl:尝试“curl --help”或“curl --manual”以获取更多信息
sh: 1: 替换错误
Bad substitution请问我们如何解决问题?
我在 Windows 8.1 上使用 Git Bash
我看到(至少)两种不同的方式来启动 Git Bash:
1) 开始屏幕 -> 输入 Git Bash -> 按 Enter
2) Windows 资源管理器 -> 右键单击文件夹 -> 选择“Git Bash”
当我用方法 1 打开程序时,我的字体很小。当我用方法 2 打开程序时,我的字体很大。这两种方法似乎都能正确读取我的 /etc/profile 和其他配置。
我更喜欢更大的字体,所以我希望它每次都用更大的字体打开。
启动方法有什么区别?为什么会发生这种情况,如何让它每次都使用大字体?
我想要source一个文件并为该源重定向 STDIN。是否可以?
例如,我有这个我想获取的文件:
# test.sh
export VALUE=SOMETHING
Run Code Online (Sandbox Code Playgroud)
这适用于外壳:
> source test.sh
> echo $VALUE
SOMETHING
>
Run Code Online (Sandbox Code Playgroud)
然而这不起作用
> echo anything | source test.sh
> echo $VALUE
>
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做到这一点,还是因为“源”在当前 shell 中运行而无法暂时重定向 STDIN?
每天,在使用几个小时后,任何使用 SSH 的东西都会随机停止工作。唯一的解决方案是我重新启动我的机器,它会修复它,直到它再次随机发生。
> git push
Could not create directory '/var/empty/.ssh'.
The authenticity of host 'github.com (192.30.252.131)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)
在尝试通过 ssh 进入 diff 主机后,这里有更多关于 -v 的信息(为了简洁而缩短):
debug1: Connection established.
Could not create directory '/var/empty/.ssh'.
debug1: identity file /var/empty/.ssh/id_rsa type -1
debug1: identity file /var/empty/.ssh/id_rsa-cert type -1
debug1: identity file /var/empty/.ssh/id_dsa type -1
debug1: identity file /var/empty/.ssh/id_dsa-cert type -1
Run Code Online (Sandbox Code Playgroud)
我已登录到我的主要 OSX 用户。~/ 和 ~/.ssh 都很好而且完好无损,发生这种情况时我没有对我的用户的权限做任何事情。发生这种情况时,我当然不会在 /etc …
是否有相当于 bash 的 Windows 批处理set -e,如果命令以非零退出状态失败(除了在if语句中预期的地方),它会导致 shell 立即退出?if errorlevel 1 exit 1在每一行之后我都会很累。
我目前在一个符号链接目录中,我想在绝对路径中上一级,但我不能,因为它会回到我的主目录 (~)。我可以执行 pwd -P 来获取绝对路径,但是如何将该结果通过管道传输到 cd 命令中?我一直以为是这样的:{}
样本:
10:21:55 {master *} ~/ch$ pwd -P
/home/drupal/sites/all/themes/house
10:22:16 {master *} ~/ch$ pwd -P | cd {}
bash: cd: {}: No such file or directory
10:22:20 {master *} ~/ch$
Run Code Online (Sandbox Code Playgroud) 最常见的错别字之一是将同一个单词重复两次,如下所示。我需要一个自动程序来删除文本文件中的所有重复单词。对于现代编辑器或拼写检查器来说,这不应该是一个奇怪的功能,例如我记得 MS Word 几年前引入了这个功能!显然,我的操作系统(hun-spell)上的默认拼写检查不能这样做,因为它只能找到字典中没有的单词。
有一个对 linux 的特定文本编辑器编辑器(pluma/gedit2 或 Sublime-text)有效的解决方案和基于 bash 脚本的解决方案是可以的。