Как передать аргумент из сценария 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" 
  • Функция вывода Bash Output / dev / null
  • Как обновить даты (на 30 дней) в файлах, идущих в это конкретное место в unix?
  • Проблемы с basename в цикле
  • linux curl POST запрос не работает
  • Выполнение скрипта в разрешениях zsh-файла
  • echo $ вместе с переменной
  • Как дождаться завершения процесса копирования (cp)?
  • Сценарий SSH и команда запуска
  • Как я могу автоматически вводить пароль из .bash_profile при запуске команды в качестве sudo?
  • SSH дважды и запустить команду, экранируя символ?
  • bash - Одиночные кавычки добавляются в двойные кавычки
  • Linux и Unix - лучшая ОС в мире.