Проблема, как указал @mikeserv, в кавычках. Лишние цитаты. Решение состоит в том, чтобы не иметь кавычек в вашем foo
в первую очередь:
структура dir (и у нас есть cd к директории d
):
~
└── a
└── b c
└── d
Within d
dir, у нас уже есть foo
и bar
, которые вы разместили.Но теперь создайте:
foo2
:
echo $PWD
bar2
:
set -x
ls "$(./foo2)"
set -x
, чтобы вы могли ясно видеть, что происходит Когда вы запускаете / bar
в командной строке вы увидите:
$ ./bar2
+++ ./foo2
++ ls '/home/youruser/a/b c/d'
bar bar2 foo foo2
Просто удалите set -x
из кода, чтобы успешно получить желаемый результат:
bar bar2 foo foo2
Если вы добавите установите -x
на исходную полосу
и запустите, вы увидите
$ ./bar
+++ ./foo
++ ls '"/home/youruser/a/b c/d"'
ls: cannot access "/home/youruser/a/b c/d": No such file or directory
Это то же самое, как если бы вы запустили командную строку:
$ ls '"/home/youruser/a/b c/d"'
ls: cannot access "/home/youruser/a/b c/d": No such file or directory
"
цитата foo
"
будет удален, ls
работает Таким образом, удаление кавычки в исходном foo
, как мы сделали с foo2
, гарантируют, что ls
получит его правильно, без лишних кавычек, и затем он будет работать.
1-й параметр в скрипте Bash называется не $first
, а $1
.
Второй параметр в скрипте Bash называется не $faulty_server
, а $2
.