标签: shell-script

使用 Cygwin 在 Windows 上运行 shell 脚本

我在使用 Cygwin 在 Windows 上运行 .sh 脚本时遇到问题。

当我运行文件时:./build.sh -s srv.txt 我得到:./build.sh: line 1: #!/bin/bash: No such file or directory

大家帮我看看是什么意思。第一行已注释:)

谢谢。

cygwin shell-script

4
推荐指数
2
解决办法
3万
查看次数

当默认 shell 与 bash 不兼容时,为什么 bash 脚本不能正常工作?

我的默认外壳是鱼,因为它更好。但通常当我运行脚本时,我收到的错误似乎是由 fish 处理的 bash 脚本引起的。我认为这是因为脚本编写者假设默认的 shell 是 bash,但我不明白其中的机制。

例如,CrashPlan install.sh 脚本以 bash shebang 开头:

~/CrashPlan-install> head install.sh
#!/bin/bash

#############################################################
# Linux Client Installer Script
#############################################################
Run Code Online (Sandbox Code Playgroud)

所以当我运行./install.sh它时,它应该由 bash 处理,对吗?默认终端外壳应该是无关紧要的。然而,当我的默认 shell 是 fish 时,运行这样的脚本会导致 fish 返回错误,就好像它正在处理脚本一样:

fish: Expected a command name, got token of type “Run job in background”. Did you mean
 “COMMAND; and COMMAND”? See the help section for the “and” builtin command by typing “help and”.
Standard input: sed -imod "s|Exec=.*|Exec=/usr/local/crashplan/bin/CrashPlanDesktop|" 
 /home/username/Desktop/CrashPlan.desktop && rm -rf /home/username/Desktop/CrashPlan.desktopmod 
Run Code Online (Sandbox Code Playgroud)

这是因为我的计算机配置错误还是因为脚本是以不可移植的方式编写的?

bash shell-script chsh fish

4
推荐指数
1
解决办法
3235
查看次数

其他地方的硬链接目录结构

我有一个文件出现的目录。我想定期运行一个脚本,查找该目录中只有一个链接的所有文件,并将它们硬链接到另一个目录中。但是,我希望创建第二个目录中的目录结构以匹配第一个目录。

查找 /srcdir/ -links 1 -exec ln {} /dstdir/ \;

硬链接所有文件,但不创建我需要的目录。

如果目录仅包含已具有多个链接的文件,则无需在目标中创建该目录。

linux bash shell-script

4
推荐指数
1
解决办法
1185
查看次数

cp 到带有符号链接的目标层次结构?

我正在尝试编写一个站点部署脚本,它将像这样复制文件:

来源

.
..
src/
html/
Run Code Online (Sandbox Code Playgroud)

目标

.
..
src/
html/ -> /var/www/ftproot/mysite
Run Code Online (Sandbox Code Playgroud)

我希望 SOURCE 中的文件html转到 DEST /var/www/ftproot/mysite

脚本是:

cd SOURCE
cp -Rf * DEST
Run Code Online (Sandbox Code Playgroud)

每次运行脚本时,都会出现此错误:

cp: cannot overwrite non-directory 'html' with directory `html'
Run Code Online (Sandbox Code Playgroud)

由此,我推断cp当 DEST 具有符号链接时无法自动将文件复制到 DEST 中。

笔记:

  1. 按照cp 手册,我设置POSIXLY_CORRECT为 1。这不起作用。

  2. 我不得不将站点链接htmlftproot/mysite而不是反之,因为 ftp 用户有奇怪的访问模式。

  3. 这家伙修改了 cp源代码并重新编译了它。我不想对生产服务器这样做。

关于如何解决这个问题的任何想法?

symbolic-link shell-script cp

4
推荐指数
1
解决办法
6778
查看次数

通过拖放文件或文件夹来运行 powershell 脚本

有没有办法通过在上面拖放文件来运行 powershell 脚本(就像将文件拖放到 .exe 文件一样)?能够对文件夹做同样的事情也很好......

windows-7 powershell shell-script drag-and-drop

4
推荐指数
1
解决办法
9109
查看次数

如果目录尚不存在,如何递归创建目录?

这似乎是一个通用实用程序,我想知道是否已经存在任何东西。我试图在脚本运行后将带时间戳的日志文件放在目录中,但需要先确保子目录(以及链中的任何目录)存在。

例如,如果完整的相对路径是./2014/Backups/Logfiles,我想检查是否2014不存在,创建它,如果Backups不存在,创建它,如果Logfiles不存在,创建它....

到目前为止,我已经得到了这样的东西(但这只是一步):LOGFILE_DIRECTORY="./2014/Backups/Logfiles"

if [ ! -d "$LOGFILE_DIRECTORY" ]; then
  mkdir "$LOGFILE_DIRECTORY" >> $LOGFILE 2>&1
fi
Run Code Online (Sandbox Code Playgroud)

编辑,添加解决方案

if [ ! -d "$LOGFILE_DIRECTORY" ]; then
  mkdir -p "$LOGFILE_DIRECTORY" >> $LOGFILE 2>&1
fi
Run Code Online (Sandbox Code Playgroud)

shell-script bash-scripting

4
推荐指数
1
解决办法
3068
查看次数

Bash - 仅当脚本从特定目录运行时才启用执行

我需要编写一个 shell 脚本,该脚本只有从当前登录用户的主目录运行时才能执行,并且我不知道如何从脚本本身检查它。任何帮助将不胜感激。

unix bash shell-script ubuntu

4
推荐指数
1
解决办法
2252
查看次数

在 Linux 中删除特定文件时如何获得通知?

我正在寻找一种方法来监视文件并在文件被删除后立即触发事件。一旦它被删除,我将替换/复制一个新文件并再次启动监视器。

例如

watch "/tmp/fileToMonitor.txt"

// file deleted by some process
cp new_file "/tmp/fileToMonitor.tx"

// watch file again (repeat same steps..)
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 bash 脚本做到这一点?这可能吗?

linux bash shell-script

4
推荐指数
1
解决办法
4483
查看次数

grep 文件并将输出通过管道传输到 sed 并将 sed 输出存储在文件中

内容source.txt

gold  green white black blue
yellow magenta brown 
tram kilo charlie tango
Run Code Online (Sandbox Code Playgroud)

嗨,大家好!我需要解开一个谜。

我正在尝试运行一个小脚本来 grep 文件source.txt,管道grep输出以sed替换字符串并将该行存储在新文件中pol.txt

grep -l "gold" source.txt | xargs sed  's/green/red/' >  pol.txt
Run Code Online (Sandbox Code Playgroud)

而不是将唯一的那行存储在pol.txt

gold  red white black blue
Run Code Online (Sandbox Code Playgroud)

我有整个文件本身和我替换的字符串

gold  red white black blue
yellow magenta brown 
tram kilo charlie tango
Run Code Online (Sandbox Code Playgroud)

当我-l从 grep 命令中删除选项时,我有这个,当然 pol.txt 中没有任何内容

sed: can't read gold: No such file or directory
sed: can't read green: No such file …
Run Code Online (Sandbox Code Playgroud)

linux bash grep sed shell-script

4
推荐指数
1
解决办法
2万
查看次数

使用 ADB 向手机发送事件触摸,但无法释放

我有一个运行 CM13 的 HTC 10 我试图通过 ADB 和发送事件向它发送触摸事件,发送后:

adb shell
sendevent /dev/input/event6 3 57 0
sendevent /dev/input/event6 3 53 300
sendevent /dev/input/event6 3 54 400
sendevent /dev/input/event6 3 48 5
sendevent /dev/input/event6 3 58 50
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0
Run Code Online (Sandbox Code Playgroud)

我在手机上点击一下,打开 showtouches,我可以看到触摸已经开始,但触摸仍然在手机上处于活动状态。

根据我在这里这里以及其他地方的阅读,似乎我应该做的就是:

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0
Run Code Online (Sandbox Code Playgroud)

或者甚至只是

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 0 0
Run Code Online (Sandbox Code Playgroud)

然而,这些命令都不会导致触摸在手机上结束。

我尝试将所有这些放在手机本身的 …

script android shell shell-script adb

4
推荐指数
1
解决办法
1万
查看次数