如何在OS X中创建指向目录的硬链接(而不是符号链接或Mac OS别名)?我已经知道命令"ln target destination",但只有在目标是文件时才有效.我知道Mac OS与其他Unix环境不同,它允许硬链接到文件夹(例如,这用于Time Machine),但我不知道如何自己做.
我正在使用Capistrano运行远程任务.我的任务看起来像这样:
task :my_task do
run "my_command"
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果my_command
退出状态!= 0,那么Capistrano认为它失败并退出.当退出状态不为0时,如何在退出时让capistrano继续运行?我已经改变my_command
了my_command;echo
它并且它有效,但感觉就像一个黑客.
我试图通过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配置需要调整?
我需要在Linux/OSX终端下使用"干净"shell(例如bash)而不需要任何用户配置,但每次启动时它都会从某些文件(例如〜/ .bashrc)中读取配置信息.我每次需要一个"干净"的shell时都可以修改文件,并在完成后将其还原,但有没有更简单的方法来执行此操作,例如命令?
当我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脚本,我通过命令行运行:
./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)
但它不起作用.我尝试过使用exec
和system
太,但剧本从来没有得到执行.
但是当我尝试运行shell_exec("ls");
它确实有效并且$output
是所有文件的列表.
我不确定这是因为我正在使用的VPS的限制还是问题是否在其他地方?
当我尝试做一个基本的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进入特定的目录?
我在运行Windows 7的笔记本电脑上使用最新的Git bash for Windows.当我定义我的别名时:
$ alias gitc='git commit -a'
Run Code Online (Sandbox Code Playgroud)
在会议期间一切运作良好,但如果我关闭并打开bash,我无法恢复它们.但是,保留了命令历史记录.
我该怎么办?我错过了什么?
谢谢!