标签: bash

什么是在OS X中创建目录硬链接的Unix命令?

如何在OS X中创建指向目录的硬链接(而不是符号链接或Mac OS别名)?我已经知道命令"ln target destination",但只有在目标是文件时才有效.我知道Mac OS与其他Unix环境不同,它允许硬链接到文件夹(例如,这用于Time Machine),但我不知道如何自己做.

unix filesystems macos bash ln

48
推荐指数
6
解决办法
5万
查看次数

如何将.sh文件与Cygwin关联?

我想通过双击Windows中的.sh文件在Cygwin中运行一个长rsync命令.它必须从包含文件的目录开始(例如/ cygdrive/c/scripts /),以便相对路径起作用.有人得到这个工作吗?

注意:我刚刚在这里找到一个管理Windows上下文菜单的Cygwin包(Bash Prompt Here).它可能有一些线索.

windows bash cygwin

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

Capistrano&Bash:忽略命令退出状态

我正在使用Capistrano运行远程任务.我的任务看起来像这样:

task :my_task do
  run "my_command"
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果my_command退出状态!= 0,那么Capistrano认为它失败并退出.当退出状态不为0时,如何在退出时让capistrano继续运行?我已经改变my_commandmy_command;echo它并且它有效,但感觉就像一个黑客.

ruby bash capistrano ruby-on-rails

48
推荐指数
5
解决办法
2万
查看次数

ssh命令执行不考虑.bashrc | .bash_login | 的.ssh/RC?

我试图通过ssh远程执行命令,例如:

ssh <user>@<host> <command>
Run Code Online (Sandbox Code Playgroud)

需要执行的命令是别名,在.bashrc中定义,例如

alias ll='ls -al'
Run Code Online (Sandbox Code Playgroud)

那么到底应该执行以下命令:

ssh user@host "ll"
Run Code Online (Sandbox Code Playgroud)

我已经发现.bashrc只能获得交互式shell,所以在.bash_login中我放了:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)

我还尝试直接在.bash_login中定义别名.

我还尝试将.bashrc的别名定义/源代码放在.bash_profile中,也放在.ssh/rc中.但这没有任何作用.请注意,我无法更改ssh命令的调用方式,因为这是某些二进制安装脚本的一部分.我唯一能修改的就是环境.执行ssh命令时是否还有其他可能来源这个别名?是否有一些ssh配置需要调整?

ssh bash

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

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

如何在没有任何用户配置的情况下启动shell?

我需要在Linux/OSX终端下使用"干净"shell(例如bash)而不需要任何用户配置,但每次启动时它都会从某些文件(例如〜/ .bashrc)中读取配置信息.我每次需要一个"干净"的shell时都可以修改文件,并在完成后将其还原,但有没有更简单的方法来执行此操作,例如命令?

linux macos bash shell

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

修改xargs中的替换字符串

当我xargs有时使用时,我不需要显式使用替换字符串:

find . -name "*.txt" | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

在其他情况下,我想指定替换字符串,以便执行以下操作:

find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar
Run Code Online (Sandbox Code Playgroud)

上一个命令会将当前目录下的所有文本文件移入/foo,并将扩展名附加bar到所有文件.

如果不是将一些文本附加到替换字符串,我想修改该字符串,以便我可以在文件的名称和扩展名之间插入一些文本,我该怎么做?例如,假设我想要像上一个示例中那样做,但是文件应该重命名/移动<name>.txt/foo/<name>.bar.txt(而不是/foo/<name>.txt.bar).

更新:我设法找到一个解决方案:

find . -name "*.txt" | xargs -I{} \
    sh -c 'base=$(basename $1) ; name=${base%.*} ; ext=${base##*.} ; \
           mv "$1" "foo/${name}.bar.${ext}"' -- {}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更短/更好的解决方案.

bash xargs

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

从PHP运行Bash命令

我有一个bash脚本,我通过命令行运行:

./script.sh var1 var2
Run Code Online (Sandbox Code Playgroud)

在我调用某个php文件之后,我正在尝试执行上面的命令.

我现在拥有的是:

$output = shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我尝试过使用execsystem太,但剧本从来没有得到执行.

但是当我尝试运行shell_exec("ls");它确实有效并且$output是所有文件的列表.

我不确定这是因为我正在使用的VPS的限制还是问题是否在其他地方?

php bash exec

48
推荐指数
2
解决办法
14万
查看次数

使用通配符的"git add"无法正常运行 - 我必须进入特定目录吗?

当我尝试做一个基本的git add*.erb(或任何简单的通配符表达式)时,git无法识别它们(它们).作为旁注,我之前从未这样做过,所以我确定这是一个新手的错误,但我在其他SO帖子或我校的校友列表服务中找不到任何帮助,所以我觉得这篇文章可能是合适的.

对于(一个不同的)示例,git status给了我:

#   modified:   config/routes.rb
#   modified:   spec/models/question_spec.rb
Run Code Online (Sandbox Code Playgroud)

我想只播放路由文件,所以我尝试了git add*s.rb而没有骰子.我在应用程序的根目录中...我是否需要位于包含我正在尝试应用通配符表达式的文件的目录中?那会很痛苦,但......实际上......它只是奏效了.

希望这不一定是一个单独的帖子,但有没有更简单的方法来使用通配符,你不必cd进入特定的目录?

git bash wildcard

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

我的Git bash忘了我的别名.我能做什么?

我在运行Windows 7的笔记本电脑上使用最新的Git bash for Windows.当我定义我的别名时:

$ alias gitc='git commit -a'
Run Code Online (Sandbox Code Playgroud)

在会议期间一切运作良好,但如果我关闭并打开bash,我无法恢复它们.但是,保留了命令历史记录.

我该怎么办?我错过了什么?

谢谢!

git bash

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

标签 统计

bash ×10

exec ×2

git ×2

macos ×2

shell ×2

capistrano ×1

cygwin ×1

filesystems ×1

linux ×1

ln ×1

php ×1

ruby ×1

ruby-on-rails ×1

ssh ×1

unix ×1

wildcard ×1

windows ×1

xargs ×1