A questão é como @mikeserv apontou, as citações. Excesso de cotações. A solução é não ter aspas no seu foo
em primeiro lugar:
estrutura dir (e temos cd para o d
dir):
~
└── a
└── b c
└── d
Dentro de d
dir, já temos foo
e bar
você postou. Mas agora crie:
foo2
:
echo $PWD
bar2
:
set -x
ls "$(./foo2)"
- temos
set -x
para que você possa ver claramente o que está acontecendo
Quando você executa o /bar
no prompt de comando, você vê:
$ ./bar2
+++ ./foo2
++ ls '/home/youruser/a/b c/d'
bar bar2 foo foo2
Basta remover o set -x
do código para obter a saída desejada com êxito:
bar bar2 foo foo2
Explicação
Se você adicionar set -x
ao seu bar
original e executar, verá
$ ./bar
+++ ./foo
++ ls '"/home/youruser/a/b c/d"'
ls: cannot access "/home/youruser/a/b c/d": No such file or directory
Isso é o mesmo que no prompt de comando que você executou:
$ ls '"/home/youruser/a/b c/d"'
ls: cannot access "/home/youruser/a/b c/d": No such file or directory
- O culpado é o extra
"
quote - , que foi introduzido no seu original
foo
- assim que
"
for removido,ls
funcionará
Assim, remover as citações no seu foo
original, como fizemos com foo2
, garante que ls
o receba corretamente sem aspas excessivas e, em seguida, funciona.