From b129683b975ef1d88774f7a18f66cc89e7f86306 Mon Sep 17 00:00:00 2001 From: Laurent Le Brun Date: Wed, 13 May 2015 14:58:59 +0000 Subject: Skylark: Add an empty argument after bash -c 'arg'. bash treats the argument after the command as $0. This is confusing. -- MOS_MIGRATED_REVID=93521828 --- .../build/lib/rules/SkylarkRuleImplementationFunctions.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java index be248b13a6..a653b51749 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java @@ -127,6 +127,13 @@ public class SkylarkRuleImplementationFunctions { // TODO(bazel-team): builder still makes unnecessary copies of inputs, outputs and args. builder.addInputs(castList(inputs, Artifact.class)); builder.addOutputs(castList(outputs, Artifact.class)); + if (commandO != Environment.NONE && arguments.size() > 0) { + // When we use a shell command, add an empty argument before other arguments. + // e.g. bash -c "cmd" '' 'arg1' 'arg2' + // bash will use the empty argument as the value of $0 (which we don't care about). + // arg1 and arg2 will be $1 and $2, as a user exects. + builder.addArgument(""); + } builder.addArguments(castList(arguments, String.class)); if (executableO != Environment.NONE) { if (executableO instanceof Artifact) { -- cgit v1.2.3