Как передать аргумент из сценария bash в 'x-terminal-emulator -e bash -c'?

Предположим, у меня есть этот скрипт:

x-terminal-emulator -e bash -c 'echo hello > ~/text' 

Я называю его foo.sh и делает его исполняемым.

Если я выполню этот скрипт, у меня будет текстовый файл в моей домашней папке, содержащий слово «привет».

Теперь, если я изменю его на это:

 x-terminal-emulator -e bash -c 'echo $1 > ~/text' 

… и я выполняю его в терминале следующим образом:

 ./foo.sh hello 

Я получаю текстовый файл в моей домашней папке, содержащей ничего.

foo.sh получает 'hello' как первый и единственный аргумент ($ 1). Так почему же bash не получает его? Есть ли способ передать один или несколько аргументов из foo.sh в bash?

Я попытался сохранить аргумент внутри имени переменной, а затем экспортировать его, но он не изменил результат.

Извините, если этот вопрос звучит глупо, я пробовал искать Google и этот сайт, не найдя ответа.

2 Solutions collect form web for “Как передать аргумент из сценария bash в 'x-terminal-emulator -e bash -c'?”

От man bash

 -c If the -c option is present, then commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the positional parameters, starting with $0. 

Таким образом, вы можете сделать

 x-terminal-emulator -e bash -c 'echo $0 > ~/text' "$1" 

или (если вы предпочитаете сохранять «обычную» нумерацию параметров)

 x-terminal-emulator -e bash -c 'echo $1 > ~/text' _ "$1" 

где _ можно заменить любой фиктивной переменной по вашему выбору.

В bash -c 'echo $1 > ~/text' , $1 был расширен в процессе bash -c , а не в вашем скрипте. Вам нужно передать исходные $1 в bash -c :

 x-terminal-emulator -e "bash -c 'echo \$1 > ~/text' bash $1" 
  • Перемещение большого количества файлов и каталогов в другой каталог
  • Удалите повторяющиеся строки из нескольких файлов в папке: проверьте только файлы в пределах диапазона
  • Делайте работу «читать», когда не фокусируетесь на терминале
  • Нужен сценарий оболочки для преобразования CSV в формат Apache httpd
  • Скрипты многотомных (GNU) `tar` с заранее определенным количеством томов
  • Фоновая и передняя задача и выполнение задач параллельно
  • Ошибка при запуске скрипта PL / SQL
  • Как добавить несколько строк в файл без последней новой строки?
  • Как удалить файлы из папки с более чем 60 файлами в unix?
  • Поиск файлов на основе имени префикса каталога и копирования в каталог
  • массив считывания и суммирование элементов
  • Linux и Unix - лучшая ОС в мире.