ব্যাশ প্যারামিটার সম্প্রসারণ কেন সিস্টেমড পরিষেবা ফাইলগুলির মধ্যে কাজ করে না?


14

আমি ব্যবহার করার চেষ্টা করছি systemd'র EnvironmentFileএবং কমান্ড একটি বিকল্প যোগ যখন এটি ফাইলের মধ্যে সেট করা হয়। ইউনিট ফাইলে আমার নিম্নলিখিত রয়েছে:

ExecStart=/usr/bin/bash -c "echo ${PORT:+port is $PORT}"

যা আমি পরিষেবাটি শুরু করার পরে কিছুতেই প্রতিধ্বনিত হয় না।

নিম্নলিখিতটি প্রত্যাশার মতো কাজ করে:

ExecStart=/usr/bin/bash -c "echo port is $PORT"

যার অর্থ ফাইলটি সঠিকভাবে পড়েছে।

পরামিতি প্রতিস্থাপন কমান্ড লাইনেও কাজ করে:

$ PORT=1234 bash -c 'echo ${PORT:+port is $PORT}'
port is 1234

আমি কী মিস করছি?

উত্তর:


27

systemd নিজস্ব নমনীয় শেল-স্টাইল কমান্ড লাইনExecStart= এবং অন্যান্য পরামিতিগুলির বিষয়বস্তুগুলির পার্সিং করে । এই সংক্ষিপ্ত বিবরণটি মূল পরিবেশের পরিবর্তনশীল প্রতিস্থাপনকে সমর্থন করে তবে দৃশ্যত পছন্দ হয় না ${PORT:+port is $PORT}

আপনি সিস্টেমডকে এটি করা থেকে বিরত রাখতে চান এবং চালিত শেলটি এটি পরিচালনা করতে দেয়।

ডকুমেন্টেশন থেকে:

আক্ষরিক ডলার চিহ্নটি পাস করতে, " $$" ব্যবহার করুন ।

সুতরাং এটি চেষ্টা করুন:

ExecStart=/usr/bin/bash -c "echo $${PORT:+port is $$PORT}"

বা আরও ভাল, এই চেষ্টা করুন:

ExecStart=/bin/sh -c "echo $${PORT:+port is $$PORT}"

কারণ আপনি এখানে যে ধরণের পরিবর্তনশীল প্রসারণ করছেন তা হ'ল পসিক্স মান এবং এটি কোনও বাশ-ইসম নয়। /bin/shপরিবর্তে bashআপনার ব্যবহার করে অনাবশ্যক নির্ভরতা দূর করবে bash

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.