标签: scripting

处理Windows批处理脚本中的引号

在Windows批处理文件中,执行以下操作时:

set myvar="c:\my music & videos"

变量myvar与包含的引号一起存储.老实说,我发现这非常愚蠢.引号只是告诉字符串的开始和结束位置,而不是作为值本身的一部分存储.
我怎样才能防止这种情况发生?

谢谢.

windows quotes scripting batch-file

56
推荐指数
5
解决办法
9万
查看次数

Xcode:在每次直接修改源代码的构建之前运行脚本

我做了什么:

我有一个脚本

  1. 阅读一些配置文件以生成源代码片段
  2. 查找相关的Objective-C源文件和
  3. 用步骤1中生成的代码替换源代码的某些部分.

和一个Makefile,它有一个特殊的时间戳文件作为make目标,配置文件作为目标源:

SRC = $(shell find ../config -iname "*.txt")
STAMP = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME).stamp
$(STAMP): $(SRC)
    python inject.py
    touch $(STAMP)
Run Code Online (Sandbox Code Playgroud)

我在项目目标的构建阶段堆栈之上添加了这个Makefile作为"运行脚本构建阶段".

发生了什么:

在编译源代码之前运行了脚本构建阶段.

但是,由于脚本在执行期间修改了源代码,因此我需要构建两次以获取最新版本的构建产品.这是我想象中发生的事情:

  1. 第一次运行:Xcode收集依赖信息--->没有变化
  2. 第一次运行:Xcode运行"运行脚本构建阶段"--->源代码在Xcode的后面更改
  3. 第一次运行:Xcode完成构建,认为没有什么需要更新
  4. 第二次运行:Xcode收集依赖信息--->源已更改,需要重建!
  5. 第二轮:Xcode运行Run Script Build Phase"--->一切都是最新的
  6. 第二轮:Xcode继续编译

在阅读Build Phases上的Xcode文档后,我尝试添加一个源文件,这个源文件在每次运行脚本时都会更新,作为"Run Script Build Phases"的输出,但没有任何改变.由于配置文件的数量可能在我的项目中有所不同,我不想指定每个输入和输出文件.

题:

如何让Xcode知道在"运行脚本构建阶段"期间所做的源文件更改?

编辑:

  • 补充说我在其他构建阶段之前放置了脚本构建阶段

scripting xcode dependencies build

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

如何在Rails外的ruby脚本中使用ActiveRecord?

我有一个小的ruby脚本,我想使用ActiveRecord轻松访问数据库模型.最好的方法是什么?

ruby scripting activerecord ruby-on-rails

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

日期命令不符合Linux规范(Mac OS X Lion)

我已经在linux盒子上开发了一段脚本很长一段时间了,并且想在我的Mac上运行它.

我认为Mac上的功能与linux上的功能相同,但今天我意识到这是错误的.我知道Mac上存在的功能较少,但我认为确实存在的功能具有相同的实现.

此问题特别针对date命令.

当我在我的linux机器上使用参数运行命令以提供一些时间(纳秒)时,我得到了正确的结果,但是当我在我的mac上运行它时,它没有那个选项.

Linux-Machine> date +%N
55555555555 #Current time in nanoseconds
Mac-Machine> date +%N
N
Run Code Online (Sandbox Code Playgroud)

如何在Mac上以bash命令获取当前时间(以纳秒为单位)?

最糟糕的情况是我创建了一小段代码,用C或其他东西调用系统函数,然后在我的脚本中调用它.

任何帮助深表感谢!

macos bash scripting porting date

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

网络中断后自动(或更轻松地)重新连接到屏幕会话

补充:我相信这个问题现在归入了这个问题: 完全透明地自动使用GNU Screen

另请参阅此相关问题:https:
//superuser.com/questions/147873/ssh-sessions-in-xterms-freeze-for-many-minutes-whenever-they-disconnect

原始问题:

如果有一种方法可以ssh到一台机器并立即重新连接到特定的屏幕会话,那将是很好的.你可以这样做:

laptop> ssh server.com screen -ls
Run Code Online (Sandbox Code Playgroud)

它将显示server.com上可用的屏幕列表,如[1]:

123.pts-1
456.pts-2
Run Code Online (Sandbox Code Playgroud)

然后你可能会尝试这样做:

laptop> ssh server.com screen -dr pts-2
Run Code Online (Sandbox Code Playgroud)

但那失败了,说"必须连接到终端".你必须首先ssh然后在server.com上执行"screen -dr pts-2",如果你有一个片状连接并断开很多连接,这是不好的.您希望能够通过笔记本电脑上的简单"向上箭头输入"继续.(或者让它更自动化.)

我对这个问题有一个可怕的解决方案,我将其作为答案发布,希望它能够被遗忘以支持正确的方法来解决这个问题.


脚注:

[1]或者,更好的是,如果您使用" screen -S foo"和" screen -S bar" 等名称创建了屏幕会话,那么您将获得更友好的列表,如:

123.foo
456.bar
Run Code Online (Sandbox Code Playgroud)

并且可以重新连接,例如" screen -dr foo".


迷你屏幕教程,结合这个问题的答案:

登录到server.com并执行操作

screen -S foo 
Run Code Online (Sandbox Code Playgroud)

然后再也不会退出该会话.要从其他地方重新连接,请执行此操作

ssh -t server.com screen -dr foo
Run Code Online (Sandbox Code Playgroud)

列出要重新协调的可用屏幕:

screen -ls
Run Code Online (Sandbox Code Playgroud)

或者,当然,

ssh server.com screen -ls
Run Code Online (Sandbox Code Playgroud)

远程检查server.com的可用屏幕.

我现在使用以下别名(tcsh),基于Jason的答案,连接到命名屏幕(如果存在)或创建并连接:

alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S …
Run Code Online (Sandbox Code Playgroud)

ssh scripting automation gnu-screen

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

通过Python检查网站是否已启动

通过使用python,我如何检查网站是否已启动?从我读到的,我需要检查"HTTP HEAD"并查看状态代码"200 OK",但该怎么做?

干杯

有关

python scripting http httprequest http-head

55
推荐指数
7
解决办法
10万
查看次数

bash:默默杀死后台功能进程

贝壳大师,

我有一个bash shell脚本,我在其中启动一个后台函数,比如说foo(),显示一个无聊和长命令的进度条:

foo()
{
    while [ 1 ]
    do
        #massively cool progress bar display code
        sleep 1
    done
}

foo &
foo_pid=$!

boring_and_long_command
kill $foo_pid >/dev/null 2>&1
sleep 10
Run Code Online (Sandbox Code Playgroud)

现在,当foo我去世时,我看到以下文字:

/home/user/script: line XXX: 30290 Killed                  foo
Run Code Online (Sandbox Code Playgroud)

这完全摧毁了我的,非常酷的进度条显示的令人敬畏.

我如何摆脱这条消息?

unix linux bash shell scripting

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

从Windows脚本中的命名环境变量中删除引号

我想在Windows环境变量中存储URL前缀.查询字符串中的&符号使这很麻烦.

例如:我有一个URL前缀,http://example.com?foo=1&bar=并希望通过提供bar参数值来创建完整的URL .然后我想使用"start"命令启动该URL.

在SET操作的值周围添加引号很容易:

set myvar="http://example.com?foo=1&bar="
Run Code Online (Sandbox Code Playgroud)

Windows虽然包含实际值中的引号(感谢Windows!):

echo %myvar%
"http://example.com?foo=1&bar=true"
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用代字号从批处理文件参数中删除引号:

echo %~1
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法对命名变量这样做:

echo %~myvar%
%~myvar%
Run Code Online (Sandbox Code Playgroud)

完成此操作的语法是什么?

windows quotes scripting batch-file environment-variables

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

用于批量重命名文件夹中文件的Shell/Bash快捷方式

Shell/Bash中是否有一个快捷方式可以根据正则表达式或其他一些条件重命名文件夹中的所有文件.我在这里寻找的是在我的文件夹文件中,让我们说100个文本文件具有以下命名约定:

<longdocumentidentifier>-doc-<counter>.txt.
Run Code Online (Sandbox Code Playgroud)

我需要使用上面给出的约定将所有文件重命名为:

doc-<counter>.txt
Run Code Online (Sandbox Code Playgroud)

是否有一个可以帮助我完成上述工作的单行程?

linux bash scripting file-io

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

有没有可以编译成Bash的语言?

我既喜欢又讨厌写Bash.我喜欢它是如此简化操作文件和处理进程(我同意这个流行的问题,它在这方面比Python,Ruby等更好),但我讨厌语法,特别是在条件,循环等方面.

(这是主观的,但我发现它既令人困惑又烦人.例如,$var在阅读时,但var在写作时;如果周围有空格则静默写入; =使用正则表达式时ifs中的双括号;有时双分号和其他单分号;等等)

作为编写JS的CoffeeScript的忠实粉丝,我一直在想:是否有任何语言具有Python/Ruby/CoffeeScript等语言的美学/语法,但是编译和运行为Bash而不是其他运行时之一?

例如,我希望能够用更简单的语法编写Bash - Bash:

$AGGREGATE_FILENAME = 'allfiles.txt'

if not exists $AGGREGATE_FILENAME
    touch $AGGREGATE_FILENAME

for $file in files/*
    cat $file >> $AGGREGATE_FILENAME

switch $1
    case 'test'
        run-tests
        echo 'Tests finished!'
    case 'deploy'
        echo 'Packaging...'
        mv foo bar/
        deploy-bar
Run Code Online (Sandbox Code Playgroud)

这是一个超级人为的例子,语法是一个稻草人(主要来自CoffeeScript,但保留了一流命令的基本Bash概念,与变量分开,松散打字).

无论如何,只是一个问题和思考的食物.我很喜欢到能写我的剧本比猛砸东西更好.=)谢谢!

bash shell scripting coffeescript

54
推荐指数
6
解决办法
6974
查看次数